拡張機能を通じた新しい在庫分析コードの追加

この記事では、拡張機能を使用して新しい在庫分析コードを追加する方法の概要を示します。 また、実際の実装を含むサンプル アプリケーションへのアクセス方法に関する情報も含まれます。

ソリューションの概要

このソリューションで重要なことは、複数のロールが、拡張機能を介して新しい在庫分析コードを追加するライフサイクルに参加することです。 次の説明では、このソリューションを簡略化して一般化していますが、現実にはロールの重複があり、時には同じ人が複数のロールを果たす場合もあります。

Microsoft のロール

Microsoft は、使用されていない分析コード フィールドの限定的なセットを提供します。

15 の既存の分析コードに加えて、Microsoft は 12 の一般的な分析コードをサポートします。

  • 10 つの文字列ベース
  • リアルベース 1 つ
  • utcdatetime ベース 1 つ

これにより、標準アプリケーションのインベントリ ディメンションの合計数が 28 になります。

  • 5 製品分析コード: 色、サイズ、スタイル、コンフィギュレーションおよびバージョン
  • 5 つの追跡用分析コード: シリアル、バッチ、所有者、プロファイル (ロシアのみ)、および GTD (ロシアのみ)
  • 6. 保管分析コード: サイト、倉庫、場所、ステータス、ライセンス プレートおよびパレット (アップグレードと移行のみ)
  • 12 個の未割り当ての一般的な分析コード: InventDimension1 から InventDimension12

Microsoft は、物理スキーマを提供しています。

ISV 役割

ISV は、新規在庫分析コードを追加します。 ISV ソリューションは、分析コードの特定のすべての機能を提供します。強力な種類で、管理、テストしやすく、パフォーマンスの高いものでなければなりません。 さらに、ソリューションは、その他の ISV のソリューションに依存しないようにする必要があります。 ISV は、物理スキーマを直接参照せず、シームレスに行うことができる間接参照を通過するソリューションを構築します。

ISV は、論理実装を提供します。

VAR ロール

VAR は、完全に機能するシステムを顧客に出荷できる必要があります。 システムには、複数の ISV のソリューションを含めることができます。それぞれに新しい在庫分析コードが含まれる可能性があります。 合計で最大 10 個の ISV 分析コード フィールドがサポートされます。

VAR により、物理的データ モデルと論理的実装が結合されます。

細目

ソリューションの前半はシンプルです。 新しいクラス階層が導入されています。 それぞれの新しい分析コードは、InventProductDimension または InventTrackingDimension のいずれかから派生する新しいクラスに実装する必要があります。 現在、保管分析コードのサポートがされていません。 これを使用すると、ISV は InventDim テーブルのロジックを変更せずに新しい分析コードを導入することができます。

InventDimensionClassHierarchy.

厳密に型指定された新しい分析コードを参照するために、ISV では InventDim テーブルにテーブル拡張クラスが導入されました。 スタイル、色、サイズの拡張クラスをテンプレートとして使用できます。

例: InventDimStyle_Extension

/// <summary>
/// The <c>InventDimStyle_Extension</c> class extends the <c>InventDim</c> table with behavior for the style dimension.
/// </summary>
[ExtensionOf(tableStr(InventDim))]
final class InventDimStyle_Extension
{
    public EcoResItemStyleName parmInventStyleId(EcoResItemStyleName _style = this.getValueForDimension(classStr(InventProductDimensionStyle)))
    {
        if (!prmIsDefault(_style))
        {
            this.setValueForDimension(classStr(InventProductDimensionStyle), _style);
        }
        return _style;
    }

    /// <summary>
    /// Returns the field id for the style dimension.
    /// </summary>
    /// <returns>The field id.</returns>
    public static FieldId fieldIdStyle()
    {
        return InventDim::fieldIdForDimension(classStr(InventProductDimensionStyle));
    }
}

分析コードは、次のように参照することができます。

//Setting a value
inventDim.parmISVDim("Some value");

//Select statements
select inventDim
    where inventDim.(InventDim::fieldIdISVDim()) == "Some value";

ISV は、新しい在庫分析コードの分析コード値のリストを保持するために、データ モデルおよびユーザー インターフェイスなどのロジックを構築できるようになりました。

ソリューションの後半はデータ モデルです。 標準アプリケーションには、新しい分析コードごとに次の内容が含まれます。

  • ラベル ファイル。
  • コンフィギュレーション キー。
  • 2 つの拡張データ型 (EDT) (InventDim のフィールド用と InventDimParm のフラグ用) です。
  • InventDim テーブルの 1 つのフィールドです。
  • InventDimParm テーブルの 1 つのフィールドです。
  • InventDimFieldMap マップの 1 つのフィールドと、各テーブルの 1 つのフィールド (約 30) がマップされています。

VAR の職務は、特定の顧客の InventDim の分析コード フィールドに ISV ソリューションを書き込むことです。 この作業を最小にするために、現在以下が含まれています。

  • バインディング マッピングを実装します。 これは、メソッド InventDimFieldBinding.className2FieldName() メソッドを拡張するよって行います。
  • コンフィギュレーション キーを有効にします。
  • 右側の文字列のサイズを指定するには、EDT を拡張します。
  • ISV 製ラベルを正しいラベル ファイルにコピーするなど、ラベル ファイルを拡張します。
  • InventDim の ProductDimensions または TrackingDimensions フィールド グループおよび分析コードのタイプに応じていくつかの他のテーブルを拡張します。
  • 関係およびインデックスを必要に応じて、InventDim で拡張します。

InventDimensionISVVARExtensions.

既知の問題

ソリューションの設計に影響を与えるいくつかの技術的な制限があります。 最も重要なのは、InventDim のWhere 句を含むアプリケーション全体の SQL 文です。 これらのほとんどはマクロを使用して実装され、SQL ステートメントが拡張可能ではないという事実を変更しません。 SQL ステートメントの多くは書き換えることができ、クエリ オブジェクトを使用して拡張できますが、多くの delete_from および update_recordset は残ります。 実行可能なソリューションは、新しい分析コードを追加するときに、これらの SQL ステートメントへの変更を要求することはできません。

もう 1 つの技術的な制限は、サポートできる在庫分析コードの数です。 それぞれが小さなオーバーヘッドを追加し、InventDimFixed EDT は上限を 32 に設定します。 この EDT には各分析コードのビットマスクが含まれており、EDT は整数であるため制限は 32 です。 指定されたソリューションは 32 の制限内で保持されます。 将来に必要になる場合、InventDimFixed を Int64、コンテナーに変更するまたは削除することができます。

サンプル アプリケーション

「製品フレーバーの分析コード サンプル アプリケーション」と呼ばれるサンプル アプリケーションは、GitHub で見つけることができます。

この例は 3 つのモデルで構成されています。

  • ISV の生産コード
  • ISV テスト コード
  • VAR 統合コード

これらのモデルを組み合わせると、新しい在庫分析コードを実装するための出発点となります。 サンプル アプリケーションでは、Flavor という新しい製品ディメンションが導入されています。

アプリケーションでは、さまざまなフレーバーの品目の製造、購入、販売などの多くのエンド ツー エンドのビジネス シナリオがサポートされています。

必要な場合は、問題を GitHub に直接記録し、追加の補充を提供するサンプル アプリケーションへ自由に投稿してください。

InventDimensionFlavorScreenshot.