複合列

フォームに追加された一部の列は、複数のデータ項目を表すことができます。 これらの 複合列 は、Webアプリケーションで表示された際に他の列とは異なる動作をするため、適切に使用するには別のスクリプトを記述する必要があります。

次の表に、モデル駆動型アプリで使用可能な複合列を示します。

テーブル

表示名

論理名

アカウント

住所 1

address1_composite

住所 2

address2_composite

取引先担当者

氏名

fullname

住所 1

address1_composite

住所 2

address2_composite

潜在顧客

氏名

fullname

住所 1

address1_composite

住所 2

address2_composite

ユーザー

氏名

fullname

住所

address1_composite

住所 (その他)

address2_composite

見積もり

請求先住所

billto_composite

送付先住所

shipto_composite

受注

請求先住所

billto_composite

送付先住所

shipto_composite

請求書

請求先住所

billto_composite

送付先住所

shipto_composite

Web アプリケーションの複合列

複合列がメイン フォームに追加されると、Web アプリケーションは複合列のみを表示します。 他のユーザーが列を編集すると、複合列を構成する個々の列を示すポップアップが表示されます。

たとえば、お問い合わせフォームの 住所 列は複合列です。 住所 列を選択すると、複合列を構成する個々の列のポップアップが表示されます。

複合列の例。

フォーム エディタでは明示的に追加されていませんが、列の一部の各列は、フォームで使用可能です。 複合値の値は getValue を使って読み取ることができますが、setValue を使って複合列の値を直接変更することはできません。複合列が参照する 1 つ以上の列を設定する必要があります。

ポップアップに表示される個々の構成コントロールに名前でアクセスできます。 これらのコントロールは、以下の命名規則を使用します: <composite control name>_compositionLinkControl_<constituent column name>。

address1_composite コントロール内の address_line1 コントロールのみにアクセスするには、以下を使用します。

formContext.getControl("address1_composite_compositionLinkControl_address1_line1")

モバイル クライアントの複合列

モデル駆動型アプリのモバイル クライアントでは、複合列のあるテーブルに使用されるフォーム定義と同じものを使用しますが、その解釈は異なります。 フォーム定義で複合列がある場合、フォームのその部分に複合列の一部であるすべての列が表示されます。 すべての列が表示されるため、ポップアップは必要ありません。 個々の列がフォームに追加されているかのように、それぞれの列にアクセスするスクリプトをフォームに記述することができます。 ただし、実際の複合コントロールは、モデル駆動型アプリのモバイル クライアント ページには存在しません。

違いの軽減

連絡先、リード、ユーザーの各テーブルのフルネーム列にアクセスする場合は、formContext.data.entity を使用します。getPrimaryAttributeValueメソッドは、直接参照することなく、この列の値を簡単に取得することができます。 このメソッドは、Web アプリケーションおよびモデル駆動型アプリ モバイル クライアントの両方で機能します。

両方のクライアントで動作させるために、アドレス複合列の一部の値を読み取る必要があるコードがある場合は、Xrm.Navigation を使用してフォーマットされたアドレスを表示する次の関数のように、getClient メソッドを使用してコードを分離する必要があります。openAlertDialogメソッドを、同じフォームのメインの Web アプリケーションやモバイル アプリケーションのバージョンのいずれかで使用します。

function showAddressDialog(executionContext) {
    var address1_compositeValue;
    var formContext = executionContext.getFormContext();
    if (Xrm.Utility.getGlobalContext().client.getClient() != "Mobile") {
        address1_compositeValue = formContext.getAttribute("address1_composite").getValue();
    }
    else {
        var address1_line1 = formContext.getAttribute("address1_line1").getValue();
        var address1_line2 = formContext.getAttribute("address1_line2").getValue();
        var address1_line3 = formContext.getAttribute("address1_line3").getValue();
        var address1_city = formContext.getAttribute("address1_city").getValue();
        var address1_stateorprovince = formContext.getAttribute("address1_stateorprovince").getValue();
        var address1_postalcode = formContext.getAttribute("address1_postalcode").getValue();
        var address1_country = formContext.getAttribute("address1_country").getValue();

        // Achieve equivalent formatting
        //address1_line1
        //address1_line2
        //address1_line3
        //address1_city, address1_stateorprovince address1_postalcode
        //address1_country

        var addressText = "";
        if (address1_line1 != null) {
            addressText += address1_line1 + "\n";
        }
        if (address1_line2 != null) {
            addressText += address1_line2 + "\n";
        }
        if (address1_line3 != null) {
            addressText += address1_line3 + "\n";
        }
        if (address1_city != null) {
            addressText += address1_city + ", ";
        }
        if (address1_stateorprovince != null) {
            addressText += address1_stateorprovince + " ";
        }
        if (address1_postalcode != null) {
            addressText += address1_postalcode + "\n";
        }
        addressText += address1_country;

        address1_compositeValue = addressText;
    }
    Xrm.Navigation.openAlertDialog({ text: address1_compositeValue });
    console.log(address1_compositeValue);
}

関連トピック

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。