サードパーティのスクリプトを使用せずにjavascript経由でアクションを呼び出す方法はありますか?Microsoft Dynamics CRM 365がJavaScript経由でアクションを非同期に呼び出す
私はこのhttps://github.com/PaulNieuwelaar/processjs
は、しかし、私はサードパーティのライブラリを使用することはできません発見しました。
ありがとうございます。
UPDATE:
ここではJavaScriptを経由して、アクションへの非同期呼び出しを示していますいくつかのサンプルコードです。覚えておくべき重要な点は、リクエストのopenメソッドの最後のパラメータをにすることです。。
req.open(consts.method.post、oDataEndPoint、true);
//プラグイン
public class RunAsync : CodeActivity
{
[Input("input")]
public InArgument<string> Input { get; set; }
[Output("output")]
public OutArgument<string> Output { get; set; }
protected override void Execute(CodeActivityContext executionContext)
{
try
{
Thread.Sleep(20000);
Output.Set(executionContext, $"Result:{Input.Get(executionContext)}");
}
catch (Exception e)
{
throw new InvalidPluginExecutionException(e.Message);
}
}
}
// javascriptの
function callAction(actionName, actionParams, callback) {
var result = null;
var oDataEndPoint = encodeURI(window.Xrm.Page.context.getClientUrl() + consts.queryStandard + actionName);
var req = new XMLHttpRequest();
req.open(consts.method.post, oDataEndPoint, true);
req.setRequestHeader(consts.odataHeader.accept, consts.odataHeader.applicationJson);
req.setRequestHeader(consts.odataHeader.contentType, consts.odataHeader.applicationJson + ";" + consts.odataHeader.charset_utf8);
req.setRequestHeader(consts.odataHeader.odataMaxVersion, consts.odataHeader.version);
req.setRequestHeader(consts.odataHeader.odataVersion, consts.odataHeader.version);
req.onreadystatechange = function() {
if (req.readyState === 4) {
req.onreadystatechange = null;
if (req.status === 200) {
if (callback) {
result = JSON.parse(this.response);
callback(result);
}
} else {
console.log(JSON.parse(this.response).error);
}
}
};
req.send(JSON.stringify(actionParams));
}
function onLoad() {
console.log('call action...');
var actionParams = {
Input: 'test1234'
};
callAction('TestAsyncAction',actionParams, function(data){
console.log('action callback triggered...');
console.log(JSON.stringify(data));
});
console.log('action called...');
}
//アクション
私はそれが実際に同期して実行されていることに気がつき、20秒間待機するダミープラグインと、アクションがコールされた前後に印刷されるコンソールメッセージとアクションのコールバックでこれを確認しました。コードをアップロードします。ここでは、呼び出しが非同期であることをデモンストレーションする記事もあります。http://blogs.microsoft.co.il/rdt/2016/01/13/executing-custom-action-via-javascript/ オンラインで追加情報を確認しています。何か案は? – noobie
req.open(.....、false)は同期です。非同期 –
が真実であることを試してみてください!出来た。ご協力いただきありがとうございます。私は他の人のためのコードで私の質問を更新します。 – noobie