smemo

技術メモです。

【Dynamics】WebAPIから操作(Action)を実行する

WebAPIで操作(Action)を実行する方法のメモ。
今回は営業案件をコピーする操作を作成し、その操作をWebAPIから実行します。

①まず操作を作成します。イメージは以下のような感じです。
f:id:smemo:20170108215419p:plain
f:id:smemo:20170108215427p:plain

②この作成した操作を実行するスクリプトを作成します。

var ActionFromJsSample = (function () {
    return {
        CopyAnken: function () {
            var id = Xrm.Page.data.entity.getId().replace("{", "").replace("}", "");

            ActionFromJsSample.ExecuteAction("opportunities", id, "Microsoft.Dynamics.CRM.cc_OpportuinityCopy")
            .then(function (result) {
                var name = "opportunity";
                var id = result.opportunityid;
                var windowOptions = {
                    openInNewWindow: true
                };

                Xrm.Utility.openEntityForm(name, id, null, windowOptions);
            })
            .catch(function (error) {
                Xrm.Utility.alertDialog(error);
            });
        },
        ExecuteAction: function (entitySetName, id, query) {
            return new Promise(function (resolve, reject) {
                var req = new XMLHttpRequest();
                req.open("POST", encodeURI("/api/data/v8.2/" + entitySetName + "(" + id + ")/" + query), true);
                req.setRequestHeader("Accept", "application/json");
                req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                req.setRequestHeader("OData-MaxVersion", "4.0");
                req.setRequestHeader("OData-Version", "4.0");
                req.onreadystatechange = function () {
                    if (this.readyState == 4 /* complete */) {
                        req.onreadystatechange = null;
                        if (this.status >= 200 || this.status <= 204) {
                            resolve(JSON.parse(this.responseText));
                        }
                        else {
                            reject(this.responseText);
                        }
                    }
                };
                req.send();
            });
        }
    };
})();

③実行結果
コピー元の画面
f:id:smemo:20170108224837p:plain
実行後の画面
f:id:smemo:20170108224855p:plain
ちゃんとコピーされていることが確認できました。