CRM 2011では、メモが自動的に作成され、フォーカスが失われたイベントのメインレコードに添付されます。要件は、この自動保存機能を削除することです。メインフォームが開くまで、ユーザーはメモを編集できるはずです。また、新しく追加されたメモは、メインフォームが保存された後にのみ保存されます。たとえば、ユーザーが1つのメモを追加してブラウザを閉じるか、メインフォームを保存しない場合、そのメモはメインレコードに添付されず、新しいメモは破棄されます。
私は次の解決策を考えていました:
新しいカスタムエンティティTempNotesHolderを作成します
この機能が必要なエンティティ(Caseエンティティなど)と1:Nの関係を作成します
実際のケースのメモセクションを読み取り専用にします(これは必須です。メモが作成されたら、ユーザーはメモの機能を編集/削除したくない)
Caseのイベントを作成するためのプラグインを作成し、TempNotesHolderのレコードを1つ作成し、それをcase(TempNotesHolder = IncidentIdのRegardingIdフィールド)に関連付けます。これにより、1つのCaseに常に1つのTempNotesHolderレコードのみが関連付けられます。CRM 2011には、1つのエンティティレコードが関連付けられたエンティティに1つのレコード、つまり1:1の関係のみを持つようにする方法はありません。少なくとも私には道がわかりません。誰かがそれを知っているかどうか私に知らせてください。
ケースフォームで、ケースのメモセクションの下に1つのIFrameを追加します
ケースフォームの読み込みイベントで、fetchXmlを使用してケースに関連付けられたTempNotesHolderIdを取得します(関連付けられたTempNotesHolderを参照するCaseエンティティには実際のフィールドがないため、fetchXmlを使用する必要があります。関連付けられたTempNotesHolderIdをCaseエンティティに追加し、そのフィールドを配置する方法ケースフォームでは、fetchXmlを避けるために、非表示にします)
TempNotesHolderレコードのメモのみを表示するようにURLを準備します。(/ _ controls / notes / notesdata.aspx?EnableInlineEdit = false&EnableInsert = true&id =&ParentEntity =
このURLを新しく追加されたIFrameに設定して、関連付けられたTempNotesHolderのメモがIFrameに表示されるようにします。また、「新しいメモの追加」リンクもあります。
ユーザーは、ケースレコードに直接追加されないメモをTempNotesHolderに追加できます。
次に、Caseの保存前イベントでプラグインを開発し、TempNoteHolderにメモが追加されているかどうかを確認します。追加されている場合は、それらのメモをCaseレコードに移動し、TempNoteHolderIdのメモを削除します。このようにして、メモはメインフォームの保存時にのみメインレコードに保存されます。
TempNotesHolderにいくつかのメモを追加した後、ブラウザーのクローズイベントを処理するには、Case pre Retrieveイベントにプラグインを記述し、関連するTempNotesHolderIdにメモが存在するかどうかを確認し、存在する場合はそれらのメモを削除します。(メモはTempNotesHolderIdに存在するため、何らかの理由でこれらのメモは実際のケースレコードに移動されず、不要になったため削除します。これにより、ケースの読み込み時に、TempNotesHolderのメモセクションが常に空白になります)
上記の解決策は、手順8までは問題ありませんでした。TempNotesHolderにメモを追加しようとすると、「レコードがTempNotesHolderに存在しません」というエラーが表示されました。次に、GUIDを確認しました。TempNotesHolderのメモを作成するときに、CRMがIncidentIdを取得していることに失望しました。次に、メモを作成するための実際のコードを追跡して、TempNotesHolderIdではなくIncidentIdを使用している理由を見つけました。「_static/_controls / notes/notes.htc」関数名「UpdateNote」に次のコードが見つかりました
xml = "0" + CrmEncodeDecode.CrmXmlEncode(value)+ "" + _parentCrmFormSubmit.crmFormSubmitId.value + "" + this.parentEntityType + "" + CrmEncodeDecode.CrmXmlEncode(currentTitle)+ "" + this.userId + ""
CRMは、メモの作成中に_parentCrmFormSubmit.crmFormSubmitId.valueをobjectidとして取得しています。
今、私はこの問題に固執しました。このショーストッパーの問題を克服するための考えはありがたいです。また、主な要件に対する他の代替ソリューションも歓迎します。
Pravin Pujari(Microsoft Dynamics CRM 2011開発者)