現在、CRM 2013 オンプレミスの開発環境を持っています。私のカスタム エンティティでは、次の JavaScript コードが実行されます。
function UpdateBPF() {
var requests = [];
requests.push(Xrm.Page.getAttribute('description').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('categoryid').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('priority').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('initialtype').setValue(1));
requests.push(Xrm.Page.data.save());
requests.push(event.returnValue = false);
$.when.apply(undefined, requests).always(function () {
Xrm.Page.data.setFormDirty(false);
RefreshForm();
});
};
function RefreshForm() {
Mscrm.ReadFormUtilities.openInSameFrame(window._etc, Xrm.Page.data.entity.getId());
};
私がやろうとしていること:
- オプション セット値の変更時にビジネス プロセス フローを変更する
オプションセットを切り替えた後のコードの動作:
- 実際の切り替えを行うためのカスタム ワークフローの起動 (正常に動作します。選択したワークフローを実際にユーザーに表示するには、更新が必要です)
- 特定のフィールドを必要としない (入力されていない場合、更新が発生しないようにする)
- フォームの保存 (正しいビジネス プロセス フローを表示するために更新した後、値が保存されなかったため、オプション セットの値が設定されませんでした)
- 「まだ保存していません」というポップアップが表示されないようにします。(これはもう必要ない可能性が高い)
- 保存せずにフォームを汚れないように設定しました
ほとんどのステップを requests 変数に入れているのはなぜですか?
- フォームを更新する前に、これらの値が確実に発生するようにしたかったのです。これを間違って行っているか、効率的ではない可能性が非常に高いです。
何がうまくいったか:
- 私の CRM 2013 オンプレミス テスト環境では、すべてが期待どおりに機能しました。
- 保存
- リフレッシュ
- 正しいビジネス プロセス フローとステージ
CRM 2013 オンラインの問題:
- 保存と更新が機能しない
- IE 9、10、11 および FireFox 完全にクラッシュします。クロムは大丈夫です。
- 自動保存をオフにしても違いはありませんでした
私が保存のために試したこと:
Xrm.Page.data.save()
Xrm.Page.data.entity.save()
私がリフレッシュのために試したこと:
Xrm.Page.data.refresh()
Mscrm.ReadFormUtilities.openInSameFrame(window._etc, Xrm.Page.data.entity.getId())
Xrm.Utility.openEntityForm("service_ticket", Xrm.Page.data.entity.getId(), null)
var url = Xrm.Page.context.getClientUrl(); window.open(url + "/main.aspx?etn=ticket&pagetype=entityrecord&id=" + Xrm.Page.data.entity.getId() + "&newWindow=false", "_blank", null, false);
上部に投稿されたコードを段階的にデバッグすると、then .when、.apply、および .always が取得されますが、内部のすべてがスキップされます。それは常にそれが常に実行されることを意味すると思います...
私がしようとすると:
Xrm.Page.data.save().then(
function () {
alert('Save worked, refresh');
Xrm.Page.data.refresh();
},
function () {
alert('Save failed!');
}
);
コードをステップ実行すると、保存がヒットします。しかし、ヒットした後、内部のすべてをスキップし、IE(Chromeが機能しているように見えるため、主にテストしていました...)が完全にクラッシュします。エラーは正確にはポップアップしません。「IE が動作を停止しました」という警告です。
StackOverflow で同様の問題が 1 件見られましたが、受け入れられた回答がないか、まったく機能しなかった回答がありました。前の 2 つの段落の直前の Xrm.Page.data.save() 関数は、回答の 1 つからのサンプルです。結果に変化がなく、テスト目的で簡単にフォローおよびステップ実行できる非常に単純なサンプル。
私はまた、グーグル(私の親友)と私の問題をBingedしました. 別のサイト (マイクロソフトのサイトだと思います) のもう 1 つの投稿には、まったく応答がありませんでした。書かれていることから、StackOverflow の投稿と同じ人物だと思います。
それが私のコードであろうと他のものであろうと、問題への洞察は大歓迎です。
tl;dr JavaScript の保存と更新が CRM 2013 Online で機能しない