Dynamics CRM クライアントサイドスクリプトのススメ その2
みなさん、こんばんは。夏バテの Harada です!w
蒸し暑いですね~!ムシムシしてて嫌になります。
今日はまたまたクライアントサイドスクリプトについて書こうと思います。(最近よく触ってるのでしゃーないw)
以前、クライアントサイドスクリプトを使用した画面操作の最適化を紹介したので、似たような例をもう一つご紹介します。
取引先企業を作成後に続けて取引先担当者を流れるような操作で作成したいと思い考えていました。そちらをご紹介します。
また、今回は「上書き保存」後にOnLoad が呼び出されないので、保存後に動作させたい処理ができないなどありませんか?それを実現するTipsをお伝えしたいと思います。そんなこんなで始めていきましょ~!
取引先担当者の作成フォームの表示
取引先企業を作成したら取引先担当者を作成するかのダイアログを表示し、「OK」がクリックされたときに取引先担当者の作成フォームを表示してみます。
JavaScript の実装
OnLoadイベントのメソッド作成
取引先企業の作成時だけ取引先担当者のフォームを表示したいので、まずはフォームの OnLoad イベントに設定するメソッドを記述します。
artisan.form.account = {
_formType: null,
onload: function () {
artisan.form.account._formType = Xrm.Page.ui.getFormType();
},
};
こちらは後ほど判定処理に使うために使用しています。やり方は一例で動的にOnChange イベントを関連付けるほうが簡単かもしれません。。
OnChangeイベントのメソッド作成
フォームにおいて保存後に起動するイベントは用意されていません。(これは結構困るんですよねぇ~)
やり方は至って簡単です。標準で用意されてる[修正日]フィールドの OnChange イベントを使用します。なぜ[修正日]?と思いました?Dynamics CRM の[修正日]は保存後に必ず値が書き換わるので、起動するタイミングとしては申し分ないわけです(笑)
OnChange イベントでは OnLoad時に保持した値(FormType)が[新規作成]だったら、保存後に行いたい処理を呼び出します。
ここでは artisan.form.account.afterSaved(); です。
artisan.form.account = {
onchange: function () {
if (artisan.form.account._formType != 1) return;
artisan.form.account._formType = Xrm.Page.ui.getFormType();
// 保存後に呼び出したいメソッドを記述
artisan.form.account.afterSaved();
},
};
保存後に呼び出したいメソッドの作成
ここでは、作成した取引先企業の名前を使用して確認ダイアログを表示(Xrm.Utility.confirmDialog)して、[はい]の場合は取引先担当者の作成フォームを別ウィンドウで開きます。(Xrm.Utility.openEntityForm)
openEntityForm に渡している parameters と windowOptions がミソです。
artisan.form.account = {
afterSaved: function () {
var name = (Xrm.Page.getAttribute("name"))
? Xrm.Page.getAttribute("name").getValue() : null;
if (!name) return;
Xrm.Utility.confirmDialog(
name + " を作成しました。取引先担当者を作成しますか?",
function () {
// yes の場合は取引先担当者 の作成フォームを
// 別ウィンドウで開く
var parameters = {
_CreateFromId: Xrm.Page.data.entity.getId(),
_CreateFromType: 1
};
var windowOptions = {
openInNewWindow: true
};
Xrm.Utility.openEntityForm(
"contact", null, parameters, windowOptions);
},
function () {
// no の場合は何もしない
});
},
};
_CreateFromId は呼出元のレコード GUID、_CreateFromType は呼出元のレコードのエンティティタイプコードを指定します。
openInNewWindow は true の場合に別ウィンドウで開きます。
取引先企業フォームのカスタマイズ
上記で作成したJavaScriptをWebリソースとして登録しておきます。
フォームのカスタマイズ
カスタマイズ画面で、フォームに[修正日]フィールドの配置し、OnChange イベントに 上記で作成した onchange メソッドを指定します。
フォームの OnLoad イベントには、上記で作成した onload メソッドを指定します。
※ 今回は修正日を分かりやすい位置に配置していますが、画面上に表示する必要はないものなので、配置して非表示にしておくことをおススメします!
上記が終われば、お決まりの公開をしてくださいねw
動作の確認
それでは実際に確認してみます。
取引先企業の入力
[上書き保存]をクリック
[OK]をクリック
やったー![取引先企業]フィールドに作成した取引先企業が指定された取引先担当者のフォームが別ウィンドウで開いた~♪
最後に・・・
Dynamics CRM に存在しない保存後に動作するJavaScriptをご紹介しました。このような用意されているもので実現できないことを製品のサポートされる機能を工夫して使うことがDynamics CRMでは大切になってきます。Dynamics CRM(特に Online )は 画面のDOMなどは変更されることがよくあり、周知もされません。(製品のサポート外なのでそらそうですよねw)
こういった事を熟知したのがアーカス・ジャパンのCRM事業本部のツワモノ達ですwwww(ちょいと恥ずかしいw)
アーカス・ジャパンでは『Dynamics CRM 運用保守/定着化支援定額サービスパック』をやっていますので、お気軽にお問い合わせください。
おまけ
ソースコードのすべてはこちらです。
if (typeof artisan == 'undefined') {
artisan = { __namespace: true };
}
if (typeof artisan.form == 'undefined') {
artisan.form = { __namespace: true };
}
artisan.form.account = {
_formType: null,
onload: function () {
artisan.form.account._formType = Xrm.Page.ui.getFormType();
},
onchange: function () {
if (artisan.form.account._formType != 1) return;
artisan.form.account._formType = Xrm.Page.ui.getFormType();
artisan.form.account.afterSaved();
},
afterSaved: function () {
var name = (Xrm.Page.getAttribute("name"))
? Xrm.Page.getAttribute("name").getValue() : null;
if (!name) return;
Xrm.Utility.confirmDialog(
name + " を作成しました。取引先担当者を作成しますか?",
function () {
var parameters = {
_CreateFromId: Xrm.Page.data.entity.getId(),
_CreateFromType: 1
};
var windowOptions = {
openInNewWindow: true
};
Xrm.Utility.openEntityForm(
"contact", null, parameters, windowOptions);
},
function () {
});
},
__namespace: true
};
※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。