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

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

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

time 2016/07/17

みなさん、こんにちは~(=゚ω゚)ノ
毎度お馴染みの製品開発部の書くブログですよ~(*^^)v

梅雨が明けなくてストレス溜りまくりの今日この頃。。早くカラッとしてほしい・・・関西から出てきてはや1年ちょい、東京の暑さには慣れません(たまの世間話はいかがですか?笑)

さて、今回はちょっと javascript を書いてみようと思います。
これは Dynamics CRM を触っていてもう少し画面操作を簡単にしたいなぁ~っと思っていたので、どのような操作がいいのか考えていた中のひとつです。
ってなわけで、張り切っていきましょ~♪

クライアントサイドスクリプトの使用

リスト、フォームにクライアントサイドスクリプト(javascript)を利用して、入力しやすい画面遷移を実現することを目標にします。
関連エンティティのレコードを作成するのにイチイチ画面遷移するのがめんどくさいなぁと思ったことはないでしょうか?そんなあなたに朗報です!

概要

取引先企業のフォームから営業案件レコードを作成し、取引先企業フォームを開いたまま作成した営業案件レコードを編集する。
通常であれば、取引先企業フォームのサブグリッドから営業案件を作成したり、ナビゲーションバーの簡易作成から営業案件を作成すると思います。
前者の場合、画面が勝手に遷移したり(ちゃうねん!遷移したくないねん!って言いたくなるところw)
後者だと取引先企業の検索フィールドを自分で設定しなければならかったりと痒いところに手が届かない感じですよね?
それをもう少し簡単にできないかを検討した結果です。

操作手順

  1. 取引先企業フォームのコマンドバーに[案件作成]をクリック
  2. 営業案件の簡易作成フォームが起動
  3. 営業案件の簡易作成フォームで案件情報を入力し、[上書き保存]をクリック
  4. 作成された営業案件のレコードを別ウィンドウで開き、編集可能とする

これを実現する方法をこの後にやっていきます。

javascript の実装

まずはサンプルの全体をお見せします。

if (typeof artisan == 'undefined') {
    artisan = { __namespace: true };
}
artisan.account = {
    /*
     * 取引先企業のフォームより営業案件の簡易作成フォームを呼び出し、
     * 作成されたレコードを別ウィンドウで開く
     */
    createOpportunity: function () {        
        // フォームが変更時以外の場合は処理しない
        if (Xrm.Page.ui.getFormType() != 2) {
            return;
        }
        // 開いてるレコードの情報を取得
        var typeName = Xrm.Page.data.entity.getEntityName();
        var id = Xrm.Page.data.entity.getId();
        var name = Xrm.Page.data.entity.getPrimaryAttributeValue();
        var reference = { "entityType": typeName, "id": id, "name": name};
        /*
         * 簡易作成フォームを開く
         * 第1引数:簡易作成フォームのLogicalName(名前)
         * 第2引数:簡易作成フォームを呼び出したエンティティのReference
         * 第3引数:簡易作成フォーム内のフィールドを既定値設定するオブジェクト
         * 第4、5引数:成功時、失敗時のコールバック関数
         */
        Xrm.Utility.openQuickCreate(
            'opportunity', reference, null
            ).then(artisan.account.successCallback, artisan.account.errorCallback);
    },
    /*
     * 簡易作成フォームで上書き保存が正しくされた場合に呼ばれる関数
     * パラメータのobject には savedEntityReference のみ設定される
     */
    successCallback: function (object) {
        /*
         * 作成されたレコードを別ウィンドウで開く
         * param:window に渡すパラメータ(クエリ文字列)。
         * option:openInNewWindow:trueを指定することで別ウィンドウで開く
         */
        var param = { "navbar": "entity" };
        var option = { "openInNewWindow": true };
        Xrm.Utility.openEntityForm(
            object.savedEntityReference.entityType,
            object.savedEntityReference.id, param, option);

    },
    /*
     * 簡易作成フォームで上書き保存時にエラーが発生した場合に呼ばれる関数
     * パラメータのerrors には エラーコードとエラーメッセージが設定される
     */
    errorCallback: function (errors) {
        var msg = "エラーコード:" + errors.errorCode;
        msg += "\nメッセージ:" + errors.message;
        Xrm.Utility.alertDialog(msg, null);
    },
    __namespace: true
};

createOpportunity 関数

ここではフォームが更新の時だけに動くように更新以外の場合は処理を終えています。

if (Xrm.Page.ui.getFormType() != 2) {
    return;
}

 

こちらは、取引先企業の情報を取得しています。
Xrm.Page.data.entity.getEntityName でエンティティ名、Xrm.Page.data.entity.getId は主キーを、Xrm.Page.data.entity.getPrimaryAttributeValue ではプライマリフィールドの値を取得しています。
この3つの情報でEntityReferenceという検索フィールドに設定できるオブジェクトを reference という変数に格納しています。

var typeName = Xrm.Page.data.entity.getEntityName();
var id = Xrm.Page.data.entity.getId();
var name = Xrm.Page.data.entity.getPrimaryAttributeValue();
var reference = { "entityType": typeName, "id": id, "name": name};

 

このコードで営業案件の簡易作成フォームを呼び出し、取引先企業フィールドに値を設定しています。

Xrm.Utility.openQuickCreate(
    'opportunity', reference, null
    ).then(artisan.account.successCallback, artisan.account.errorCallback);

 

successCallback 関数

successCallback は、簡易作成フォームでレコード作成が成功した場合に呼び出されます。引数にsavedEntityReference を渡してくれるので、それを使用して別ウィンドウでエンティティフォーム(営業案件)を開いています。
param 変数の navbar は開いたエンティティフォームのナビゲーションバーの状態を指定します。option 変数は 別ウィンドウで開くかどうかの指定をしています。param 変数には コマンドバーの表示/非表示、その他既定値の設定などを設定することが可能です。
これで、作成された営業案件が別ウィンドウで開くことができました。

var param = { "navbar": "entity" };
var option = { "openInNewWindow": true };
Xrm.Utility.openEntityForm(
    object.savedEntityReference.entityType,
    object.savedEntityReference.id, param, option);

 

errorCallback 関数

errorCallback は、簡易作成フォームでエラーが発生した場合に呼び出されます。(必須チェックなどのクライアントサイドのチェックでは呼び出されません)

var msg = "エラーコード:" + errors.errorCode;
msg += "\nメッセージ:" + errors.message;
Xrm.Utility.alertDialog(msg, null);

 

あとは、コマンドバーにボタンを追加して、そこからこの javascript を呼び出せば完了です。

 

実際の画面の動き

それでは画面のを実際に見てみましょ~♪
1.既に登録済みの取引先企業を開きます。
pict001

2.[案件作成]コマンドをクリックすると[営業案件]の簡易作成フォームが開きます。
pict002

3.フィールドに値を入力して、[上書き保存]をクリックします。
pict003

4.作成したレコードが別ウィンドウで開かれます。
pict004
ナビゲーションバーにサイトマップの情報がない事や、高度な検索、簡易作成がない事が分かると思います。また、ウィンドウを並べて作業できるので効率も上がりそうじゃないですか!?(人それぞれですが・・・・)

まとめ

どうですか!? 簡単に登録操作を変えることができたと思いませんか?(ワァワァパチパチ)
こういったこともアーティサンのDynamics CRM トレーニング運用保守/定着化支援サービスで支援させて頂いてます。ご興味のある方はお問い合わせくださいm(_ _)m

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

The following two tabs change content below.

Kengo Harada

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

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

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

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

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

down

コメントする