次の方法で共有


新しいカスタム エンティティ フォームを追加する (Project Service Automation 2.x)

Important

Dynamics 365 Project Service Automation は Dynamics 365 Project Operations に進化しました。 詳細は、Project Service Automation の移行を参照してください。

型フィールド

Dynamics 365 Project Service Automation は、営業案件、見積もり、注文、請求書エンティティの 種類 (msdyn_ordertype) フィールドに依存して、これらのエンティティの 作業ベース のバージョンと 、アイテムベース のバージョンと サービスベースの バージョンを区別します。 これらのエンティティの作業ベースのバージョンは、PSA によって処理されます。 ソリューションのクライアント側とサーバー側の多くのビジネス ロジックは 、[種類 ] フィールドによって異なります。 そのため、エンティティの作成時にフィールドを正しい値で初期化することが重要です。 値が正しくないと、不適切な動作が発生する可能性があり、一部のビジネス ロジックが正しく実行されない可能性があります。

フォームの自動切り替え

販売エンティティ レコードの不適切な初期化と編集によって引き起こされる潜在的なデータ破損や予期しない動作を回避するために、PS には、既定のフォームでの自動フォーム切り替えのロジックが含まれるようになりました。 このロジックにより、ユーザーは、作業ベースのバージョンまたはその他の種類の営業案件、見積もり、注文、または請求書エンティティを操作するための正しいフォームに移動します。 ユーザーが営業案件、見積もり、注文、または請求書エンティティの作業ベースのバージョンを開くと、フォームは プロジェクト情報に切り替えられます。

自動フォーム切り替えロジックは、 formId 値と msdyn_ordertype フィールド間のマッピングに依存します。 すべてのすぐに使用できるフォームがそのマッピングに追加されました。 ただし、ユーザー設定フォームを手動で追加して、処理するエンティティのバージョンを示す必要があります。 これは、 msdyn_ordertype フィールドに基づいています。 フォームの切り替えがマッピングに含まれていない場合、ロジックはエンティティの msdyn_ordertype フィールドに保存されている値に基づいて、すぐに使用できるフォームに切り替わります。

カスタム フォームを追加し、フォーム切り替えロジックを有効にする

次の例は、作業ベースの営業案件で動作するように、カスタム フォームの マイ プロジェクト情報を追加する方法を示しています。 見積もり、注文、請求書を操作できるように、同じプロセスを使用してカスタム フォームを追加します。

プロジェクト 情報 フォームのカスタム バージョンを作成するには、次の手順に従います。

  1. 営業案件エンティティで、[ プロジェクト情報 ] フォームを開き、[ マイ プロジェクト情報] という名前でコピーを保存します。

  2. 新しいフォームを開き、プロパティで、 プロジェクト情報 フォームのフォーム初期化スクリプトが存在することを確認します。

    Important

    スクリプトを削除しないでください。 そうしないと、一部のデータが正しく初期化されない可能性があります。

  3. [種類] (msdyn_ordertype) フィールドがフォームに存在することを確認します。

    Important

    このフィールドは削除しないでください。 それ以外の場合、初期化スクリプトは失敗します。

  4. 新しい フォームの formId 値を検索します。 この手順は、次の 2 つの方法で完了できます。

    • アンマネージド ソリューションの一部として [マイ プロジェクト情報 ] フォームをエクスポートし、エクスポートしたソリューションの customization.xml ファイルで formId 値を検索します。
    • フォーム エディターで [ マイ プロジェクト情報 ] フォームを開き、次の図に示すように、URL の fromId パラメーターの横にあるグローバル一意識別子 (GUID) を探します。

    URL 内の新しいフォームの formId 値。

  5. msdyn_/SalesDocument/PSSalesDocumentCustomFormIds.js Web リソースを編集して、formId 値のmsdyn_ordertype マッピングを作成します。 リソースからコードを削除し、次のコードに置き換えます。

    define(["require", "exports"], function (require, exports) {
        "use strict";
        var SalesDocumentCustomFormIds = (function () {
            function SalesDocumentCustomFormIds() {
            }
            SalesDocumentCustomFormIds.overwriteFormIds = function (mappedFormIds) {
                /*
                ---- Notes ----
                mappedFormIds[SalesEntity][OrderType] => The array of forms IDs that support particular entity and order type
                Add or overwrite customized formId for the particular entity and order type by calling:
                    mappedFormIds[<EntityType>][<msdyn_ordertype>].push("<formId>");
                Allowed msdyn_ordertype values for reference:
                    ServiceBased: 690970002 (Field Service version of the entity)
                    WorkBased: 192350001 (PSA version of the entity)
                    ItemBased: 192350000 (Regular out of the box entity)
                Uncomment and update one of the following lines to register custom PSA form for required entity:
                */		
                //mappedFormIds[1][192350001].push("<formId>"); //Quote
                //mappedFormIds[5][192350001].push("<formId>"); //Quote Line
                //mappedFormIds[2][192350001].push("<formId>"); //Sales Order
                //mappedFormIds[6][192350001].push("<formId>"); //Sales Order Line
                // In this example we have added new form for Opportunity
                mappedFormIds[0][192350001].push("192EE537-DCC4-45D3-B7AF-EA694B9113D2"); //Opportunity
                //mappedFormIds[4][192350001].push("<formId>"); //Opportunity Line
            };
            return SalesDocumentCustomFormIds;
        }());
        exports.default = SalesDocumentCustomFormIds;
    });
    
  6. カスタマイズを保存して発行します。