知識創造研究室 by CRM(xRM)

CRMリーディングカンパニーである アーティサン株式会社 CRM事業部 の最先端 CRM ブログです。

Dynamics CRM クライアントサイドスクリプトのススメ その2

time 2016/08/20

みなさん、こんばんは。夏バテの 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

動作の確認

それでは実際に確認してみます。

取引先企業の入力

フォームに必要な項目を入力します。
0820-001

[上書き保存]をクリック

確認のダイアログが表示されます。
0820-002

[OK]をクリック

0820-003
やったー![取引先企業]フィールドに作成した取引先企業が指定された取引先担当者のフォームが別ウィンドウで開いた~♪

最後に・・・

Dynamics CRM に存在しない保存後に動作するJavaScriptをご紹介しました。このような用意されているもので実現できないことを製品のサポートされる機能を工夫して使うことがDynamics CRMでは大切になってきます。Dynamics CRM(特に Online )は 画面のDOMなどは変更されることがよくあり、周知もされません。(製品のサポート外なのでそらそうですよねw)
こういった事を熟知したのがアーティサンのCRM事業本部のツワモノ達ですwwww(ちょいと恥ずかしいw)
アーティサンでは『Dynamics CRM 運用保守/定着化支援定額サービスパック』をやっていますので、お気軽にお問い合わせください。

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
};

※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。

The following two tabs change content below.

Kengo Harada

CRM事業部 製品開発部 マネージャーアーティサン株式会社

文系プログラマ(.NET Framework、Java)。25歳から始めたプログラムは死ぬ気で頑張った(誰も褒めてくれないので自分で誉めてます)。気が付けば製品開発部のマネージャー・・・
弊社Dynamics CRM トレーニングの講師をやったりもします。
事業部やら役職やらありますが、『事業部内の便利屋』が一番フィットする肩書です。

<アーティサン株式会社 CRM製品>

CRM製品に関するお問い合わせ TEL 042-444-4815

メールでお問い合わせはこちら

down

コメントする