設定
オンサイトCRM2011のカスタムエンティティに予定を追加しています。
- リボンの[新しいアクティビティ]ボタンをクリックし、[予定]、[OK]の順に選択します。
- 開いた新しいウィンドウで、F12を押してIEデバッガーを開き、[スクリプト]タブを選択し、onLoad関数とFormScript.js.aspxファイルのcrmForm_window_onload_handlerの両方でブレークポイントを設定し、[デバッグの開始]ボタンをクリックします。 。
- 次に、予定ウィンドウをリロードします。
問題
crmForm_window_onload_handlerのブレークポイントがヒットしますが、カスタムjs Webリソースファイル(appointment.js)のonLoad関数にステップインすると、appointment.jsファイルのonLoad関数にステップインするのではなく、onLoadにステップインします。私のファイルの正確なコピーの、その名前だけがスクリプトブロック(0から99までのいくつかの乱数)、すなわちscript block(23)
。これらのスクリプトブロックが作成されるのはなぜですか?保存時に、私もこのコードを実行しています:
Xrm.Page.getAttribute('new_issyncreqd').setValue(true);
Xrm.Page.getAttribute('new_issyncreqd').setSubmitMode("always");
しかし、実際には保存されておらず、スクリプトブロックに関連していると思います...
アップデート
IsSyncReqrdFieldを更新しているコードが機能しない理由を理解しました。これは、オンサイトCRM2011バージョンV5.0.9690.1992(ロールアップ6)用です。どうやらAppointmentエンティティにバグがあり、最初にエンティティを保存してから、実際にカスタムonSaveコードを実行します。現在の外観は次のとおりです。
function crmForm_onsave_handler(eventObj,eventArgs)
{
try
{
var eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,null);
eContext = Mscrm.FormUtility.constructExecutionObject(eventObj,0,eventArgs,eContext)
Mscrm.Form_onsave();
eContext=Mscrm.FormUtility.constructExecutionObject(eventObj,1,eventArgs,eContext)
NEW.Appointment.onSave(eContext); // <-- My custom OnSave Handler
}
catch(e)
{
displayError('crmForm', 'onsave', e.description);
}
}
バグは、Mscrm.Form_onsave();
行が実際にレコードをデータベースに保存しているため、カスタムイベントハンドラーが実行されると、既に保存されており、カスタムイベントハンドラーで行われた更新によってレコードが更新されないことです。
このバグの修正はbSaveInProgress = true;
、フォームのonLoadで設定してから、bSaveInProgress =!isValid;を設定することです。event.returnValue = isValid; onSaveで。は実際にrecrodを保存しbSaveInProgress = true;
ないようMscrm.Form_onsave();
にし、event.returnValueは実際にそれを作成します。それは機能し、ハックですが、このバグを回避するために私が思いついたのはそれだけです...
問題は残っています
すでに存在するファイルを使用する代わりに、スクリプトブロックが作成および実行されるのはなぜですか?