次の方法で共有


モデル駆動型アプリでフォームをカスタマイズする

モデル駆動型アプリのフォームは、ユーザーがテーブル レコードの作成、表示、または編集に使用するユーザー インターフェイス (UI) を提供します。 この記事では、カスタマイズ ツールで SystemForm テーブルとフォーム デザイナーを使用して、プログラムでフォームを作成または編集する方法について説明します。 コード例を使用して、フォーム定義にアクセスし、フォームのプロパティを理解し、フォームを実装する方法について説明します。

フォーム定義へのアクセス

SystemForm テーブルには、フォームとダッシュボードと視覚化が格納されます。 テーブルのフォーム定義は、次の 2 つの方法で検査できます。

  • テーブルをアンマネージド ソリューションに含め、ソリューションをエクスポートします。

  • SystemForm テーブルに対してクエリを実行します。

エクスポートされたテーブルから FormXML を表示する

エクスポートされたマネージド ソリューションには、カスタマイズしたシステム フォームの定義のみが含まれます。 システム フォームの定義を表示するには、フォームを変更するか、既存のフォームを新しい名前で保存して新しいフォームを作成する必要があります。

ソリューションをエクスポートした後、内容を抽出し、 customizations.xml ファイルを表示します。 フォームの定義は、 ImportExportXml>Entities>Entity>FormXmlにあります。 <FormXml> ノードでは、フォームの種類ごとに、フォームの種類を指定する <forms> パラメーターを使用して、type要素にグループ化されます。

フォームのプロパティ

次の表は、主な SystemForm テーブルの列と対応するデータについて説明しています。このデータには、ソリューションとともにエクスポートされた XML 要素が含まれています。

SystemForm プロパティ FormXML 要素 プロパティ
AncestorFormId <ancestor> 親フォームを表す一意識別子です。 既存のフォームに 名前を付けて保存 を使用するか、SDK for .NET CopySystemFormRequest クラスまたは Web API CopySystemForm アクションを使用して、新しいフォームを作成するときにこのプロパティを設定 します
CanBeDeleted <CanBeDeleted> このコンポーネントを削除できるかどうかを指定する情報。 この管理プロパティは、マネージド ソリューションをインポートしてフォームを作成する場合にのみ適用されます。
Description <Descriptions> Description は文字列で、<Descriptions> にはフォームの説明のためのローカライズされたラベルが含まれています。

ローカライズされたラベルは、 RetrieveLocLabelsRequestを使用して取得できます。
FormActivationState <FormActivationState> フォームの状態を指定します。

「メイン」の種類のフォームのみを非アクティブ化できます。

有効な値:

- 0: Inactive
- 1: Active
FormId <formid> フォームを表す一意識別子
FormPresentation <FormPresentation> このフォームが Microsoft Dataverse の更新された UI レイアウトにあるかどうかを指定します。
FormXml <form> フォーム レイアウトの XML 表現です。
IntroducedVersion <IntroducedVersion> フォームが追加されたソリューションのバージョンです。
IsAIRMerged なし このフォームを Dataverse の更新された UI レイアウトと統合するかどうかを指定します。
IsCustomizable <IsCustomizable> このコンポーネントがカスタマイズ可能かどうかを指定する情報です。

この管理プロパティは、マネージド ソリューションをインポートしてフォームを作成する場合にのみ適用されます。
IsDefault なし フォームまたはダッシュボードがシステムの既定であるかどうかを指定する情報です。
Name <LocalizedNames> Name は文字列で、<LocalizedNames> にはフォーム名のためのローカライズされたラベルが含まれています。

ローカライズされたラベルは、 RetrieveLocLabelsRequestを使用して取得できます。
ObjectTypeCode フォームは、 Entity 要素の子孫です。 ObjectTypeCode 値はテーブルの論理名です。
Type <forms> 要素 type パラメーター フォームで有効な値は以下の通りです。

- 2: main
- 5: mobile
- 6: quick
- 7: quickCreate

フォームを作成して編集する

新しいフォームは、 EntityMetadata.CanCreateForms で許可されているテーブルに対してのみ作成できます。

フォームを直接作成するか、 CopySystemForm メッセージを使用して新しいフォームを作成します。 SDK for .NET CopySystemFormRequest クラスまたは Web API CopySystemForm アクションを使用します。 フォーム エディターで CopySystemForm メッセージまたは 名前を付けて保存 を使用する場合、フォーム間の継承はありません。 したがって、基本フォームに対する変更は、そのフォームから作成されたフォームには自動的には適用されません。

フォーム定義を編集する場合は、マネージド ソリューションをエクスポートし、フォーム定義を編集してから、ソリューションを再インポートします。 フォームを手動で編集する場合は、スキーマ検証をサポートする XML エディターを使用します。 詳細については、「 スキーマ検証を使用してカスタマイズ XML ファイルを編集する」を参照してください。

クライアント API を使用してダイアログでメイン フォームを開く

クライアント API を使用してダイアログでメイン フォームを開くには、 Xrm.Navigation.navigateTo メソッドを呼び出します。 Xrm.Navigation.navigateTo API メソッドは、サイズや位置など、いくつかのオプションを含むダイアログを開きます。

ヒント

Xrm.Navigation.openForm メソッドでは、メイン フォームをダイアログとして開く機能はサポートされていません。

例: 新しいレコードを開く

この例では、ダイアログが新規レコードを作成する新たな取引先企業のフォームを開きます。 ダイアログは、呼び出されたフォームまたは呼び出し元のフォームの上に、使用可能なウィンドウの最大 50% をモーダルとして使用して、中央にポップアップ表示されます。

var pageInput = {
    pageType: "entityrecord",
    entityName: "account",
    formType: 2,
};
var navigationOptions = {
    target: 2,
    width: {value: 50, unit:"%"},
    position: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions);

新しいレコードを開きます。

例: 既存のレコードを開く

この例では、コンタクトフォームのアカウントID値を使用して、既存のアカウントレコードを開きます。 ID を任意のレコード ID 値に置き換えて、ダイアログでレコードを開きます。

var pageInput = {
    pageType: "entityrecord",
    entityName: "account",
    formType: 2,
    entityId: "00aa00aa-bb11-cc22-dd33-44ee44ee44ee" //replace with actual ID
};
var navigationOptions = {
    target: 2,
    width: {value: 80, unit:"%"},
    position: 1
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions);

既存のレコードを開きます。

例: サイド ウィンドウで新しいレコードを開く

この例では、ダイアログ ウィンドウの右隅で新しいレコードを開きます。 この動作は、ピクセル オプションを使用して実現できます。

var pageInput = {
    pageType: "entityrecord",
    entityName: "account",
    formType: 2,
};
var navigationOptions = {
    target: 2,
    width: {value: 500, unit:"px"},
    position: 2
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions);

サイド ウィンドウで既存のレコードを開きます。

例: コールバック メソッドを使用してダイアログでメイン フォームを開く

この例では、レコードを保存してダイアログを閉じた後、コールバック メソッドを使用してメイン フォーム ダイアログを呼び出す方法を示します。

var pageInput = {
    pageType: "entityrecord",
    entityName: "account",
    formType: 2
};
var navigationOptions = {
    target: 2,
    width: {value: 80, unit:"%"},
    position: 2  
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success(result) {
            console.log("Record created with ID: " + result.savedEntityReference[0].id + 
            " Name: " + result.savedEntityReference[0].name)
            // Handle dialog closed
    },
    function error() {
            // Handle errors
    }
);

参照

フォームの作成および設計
SystemForm テーブル
フォーム XML スキーマ
Xrm.Navigation.navigateTo