0

サードパーティのスクリプトを使用せずに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...');  
} 

//アクション

enter image description here

答えて

3

あなたはwebapi to execute custom Actionを使用することができます。これは、非同期と呼ばれることができるXMLHttpRequest &にラップされています。非同期の実行のために

/api/data/v8.2/Action_Name 

req.open(....., true); 

同じsoap callを使用して(推奨されません)。

Processjsは、廃止予定のOrganization.svc/webを使用します。

+0

私はそれが実際に同期して実行されていることに気がつき、20秒間待機するダミープラグインと、アクションがコールされた前後に印刷されるコンソールメッセージとアクションのコールバックでこれを確認しました。コードをアップロードします。ここでは、呼び出しが非同期であることをデモンストレーションする記事もあります。http://blogs.microsoft.co.il/rdt/2016/01/13/executing-custom-action-via-javascript/ オンラインで追加情報を確認しています。何か案は? – noobie

+0

req.open(.....、false)は同期です。非同期 –

+1

が真実であることを試してみてください!出来た。ご協力いただきありがとうございます。私は他の人のためのコードで私の質問を更新します。 – noobie

関連する問題