5

設定

オンサイト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は実際にそれを作成します。それは機能し、ハックですが、このバグを回避するために私が思いついたのはそれだけです...


問題は残っています

すでに存在するファイルを使用する代わりに、スクリプトブロックが作成および実行されるのはなぜですか?

4

2 に答える 2

1

まず、インラインjavascriptがXMLまたはSVGファイルから取得されるときにスクリプトブロックが作成されます。

これは既知のIEの問題です(「スクリプトブロック」をスキャンしてください):http://msdn.microsoft.com/en-us/ie/ff959805.aspx

IE9の[ネットワーク]タブを使用してフォームの読み込みをキャプチャすると、XMLファイルを表示できます。実際にはXMLであるaspxファイルがいくつかあるはずです。例はRenderGridView.aspxです。

したがって、問題は、aspxファイルが再度取得され、以前のスクリプトブロックを置き換えるインライン関数が実行されることです(javascriptは単一のグローバルファイルとして動作するため)。

于 2012-07-24T21:43:30.170 に答える
0

コードブレークを設定する前に、[デバッグの開始]ボタンをクリックしてみてください。また、IE8または9を使用していますか?

于 2012-04-20T18:39:25.150 に答える