Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

【Dynamics CRM】【Xrm.Page】フォーム上の値の取得と設定

一番基本的なフォーム上からの値の取得と設定について。

もっとも利用頻度が高いと思われる、getAttributeの利用シチュエーションを想定して記載しています。

Xrm.Page.getAttribute()

getAttributeですが、正式にはXrm.Page.data.entity.attributes.getでショートカットバージョンとして提供されているものです。

https://msdn.microsoft.com/ja-jp/library/jj602964.aspx#BKMK_AccessingAttributes

意外と忘れがちなのですが、4種類パラメータ(フィールド物理名、フォーム上のIndex、指定なし、デリゲート)を受け渡すことが可能になっています。

フィールド物理名は最もよく利用するものかと思います。

Indexはあまり利用シチュエーションが思い浮かびませんが、フォーム上で次に配置されているフィールドなどを指定する場合などには利用するかと思います。

指定なしですと、フォーム上のフィールドをすべて取得し、

デリゲートでは、Typeなどを指定して、特定の種類のフィールドをすべて取得するなどのシチュエーションに利用できます。

概要

今回はすごく単純に、あるフィールドに入力した値を他のフィールドにも設定するというものです。

パラメータで、コピー元とコピー先のフィールド物理名を指定しています。

スクリプトサンプル

function copyFieldValue(copyFrom, copyTo)
{
    var value = Xrm.Page.getAttribute(copyFrom).getValue();
    Xrm.Page.getAttribute(copyTo).setValue(value);
}

指定画面

今回はコピー元フィールドのOnChangeイベントとして設定しています。

f:id:sugimomoto:20151123130704p:plain

f:id:sugimomoto:20151123130730p:plain

注意点

Optionsetの表示名を取得する場合getText()になります。

LookupないしPartyListの場合、配列が来ますので配列Indexを指定してから値を取得します。

Xrm.Page.getAttribute(copyFrom).getValue()[0].nameのような感じです。