2

フォームが更新モードのときに自動的に実行されるように、メインの請求書フォームで "Get Products"リボンアクションロジックを取得しようとしています。フォームが2回ロードされ、ロードイベントロジックがキャンセルされます

請求書は、オポチュニティで始まるビジネスフローによって作成されます。

onFormLoad = function() { 

    //if we are in update mode... 
    if (Xrm.Page.ui.getFormType() == 2) { 

     //if no products are present in the list... 
     if (loadInvoiceProducts().length == 0) { 
      Mscrm.CommandBarActions.getProducts(); 
     } 
    } 
}; 

loadInvoiceProducts = function() { 
    //just a jQuery ajax call to the oData service... this works. 
    var products = oDataQuery("InvoiceDetailSet?$filter=InvoiceId/Id eq guid'" + Xrm.Page.data.entity.getId() + "'"); 
    return products.results; 
}; 

私は手動で新しいオーダーを作成する場合、これは正常に動作します(フォームがフォームモード== 1で、その後で、作成)とするとき:

は、ここでのコードは、請求書のonLoadイベントのLoadイベントを形成します必要なフィールドに入力して保存し、フォームが更新モードでリロードされたら、[Get Products]ポップアップが表示されます。

問題は、ビジネスフローによって請求書が作成される場合です。請求書フォームは作成モードで開きます(ビジネスフローを通じて、すべての必須フィールドはすでに入力済みです)。Ctrl-Sを押すと、上記のコードがトリガーされ、フォームは更新モードになります。上記のコードは実行されません。

もう一度トリガーするにはF5キーを押す必要があります。

誰もこれの前に何かを試みましたか?

ありがとうございました。

+0

2016年ですか? – Polshgiant

+0

はい私は2016を使用しています –

答えて

1

最新バージョンのCRMには、非同期フォームの読み込みと更新があります。これは実行している可能性が高いです。新しいレコードが作成されて保存されると、あなたが指摘したように、再度onloadがトリガされます。既存のレコードが更新および保存されると、onloadは再びトリガされません。 、何が起こっているかの詳細については、このように、保存をキャンセルするのOnSaveハンドラを追加するには:あなたの問題が消えるハンドラを追加した後、問題は、既存のレコードが保存されていることがある場合

// Put this function into your script 
function cancelSave(econtext) { 
    var eventArgs = econtext.getEventArgs(); 
    console.log("saveMode", eventArgs.getSaveMode()); // could help you figure out why form is saving 
    eventArgs.preventDefault(); 
} 

// And then put this line into your onload method 
Xrm.Page.data.entity.addOnSave(cancelSave); 

私が言及したように再びオンロードを引き起こさない。フォームが保存されている理由を調査する必要があります:

  • 保存をトリガーする可能性のある他のコードがありますか?
  • cancelSaveからのコンソール出力が70(「自動保存」)を示している場合、自動保存されます(特に、システム全体またはフォーム上を無効にすることができます[preventAutoSaveためのSDKを検索])
  • コンソール出力の場合は、 cancelSaveが2(「保存して閉じる」)、フォーム上に何かが発生している可能性があります(自動保存を有効にすると、保存されていないデータから移動するとモード2で保存されます)

妨げになっているが、何らかの理由で保存がどこから来ているのか分からない保存イベントであると判断した場合は、どのフォームフィールドを調べるか汚い。セーブイベントは、汚れたフィールドがない場合は何もしないので、汚れを見つけて解決することができれば、問題を回避できます。どのフィールドが汚れているかを確認する簡単な方法の1つは、エンティティの監査を有効にし、監査ログを表示して、保存で変更されたフィールドを確認することです。

+0

ありがとうございました。 –

関連する問題