複合列
フォームに追加された一部の列は、複数のデータ項目を表すことができます。 これらの 複合列 は、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 分かかります。 個人データは収集されません (プライバシー ステートメント)。