私はMicrosoft Dynamicsの365&パワープラットフォーム側面は、ラヨーンを設計、マイクロソフト最優秀専門家が3年連続ダイナミクスCRM /ビジネスソリューションの側面(マイクロソフトMVP)のために2018年6月に2015年7月ですが、私は公共のマイクロチャネル番号の関心を歓迎しますMSFTDynamics365erLuoYong、返信または20190810 349は、この記事へのアクセスを容易にすることができる、しかし、あなたは私ボーエンは最初の部屋で発行された最新の情報を得ることができ、私に従ってください!
2016年版からのダイナミクスCRM 365はRetrieveEntityChangesRequestと呼ばれる新しいメッセージを追加し、このニュースは、CRMの最後の買収以降のデータの変化を監視することができます。、あなたはまず、エンティティ変更の追跡を有効にドキュメントを参照する必要があるデータの同期を制御するために有効になっている変更の追跡をプロパティが保存され、解放することができますトラックを変更するエンティティを選択し、それは実際には非常に簡単です、やって。
テストするために、私は次の記録を作成します:
コードは以下の通りであります:
使用してMicrosoft.Xrm.Clientを。 使用してMicrosoft.Xrm.Client.Servicesを。 使用してMicrosoft.Xrm.Sdkを。 使用してMicrosoft.Xrm.Sdk.Messagesを。 使用してMicrosoft.Xrm.Sdk.Queryを。 使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.IOを。 使用System.ServiceModelを。 名前空間LuoYongLab { クラスプログラム { 静的な 無効メイン(文字列[] argsが) { しようと { VARの orgService = 新しい(OrganizationService新しい CrmConnection(" CRM " )); 文字列dataToken、changedType。 一覧 <実体> initialrecords = 新しいリスト<実体> (); RetrieveEntityChangesRequest要求 = 新しいRetrieveEntityChangesRequest(); request.EntityName = " ly_test " 。 request.Columns = 新 ColumnSet(" ly_name "、" ly_alternatekey " ); 要求。= 新しい PagingInfo(){=カウント2、ページ番号= 1、ReturnTotalRecordCount = 偽}。 request.DataVersion = " 565904 2016年1月5日6時57分22秒!" 。 Console.WriteLineを(" request.DataVersion = String.Emptyを、最初的同步、获取所有记录" )。 一方、(真) { RetrieveEntityChangesResponse応答 = (RetrieveEntityChangesResponse)orgService.Execute(リクエスト)。 もし(response.EntityChanges.Changes.Count> =1 ) { foreachの(VARの変化にresponse.EntityChanges.Changes) { 場合(change.Type == ChangeType.NewOrUpdated) { NewOrUpdatedItem changedItem = (NewOrUpdatedItem)変化。 エンティティchangedRecord = changedItem.NewOrUpdatedEntity。 もし(changedRecord!= nullの) { 文字列のfirstName = changedRecord.GetAttributeValue <文字列 >(" ly_name " ); changedType = changedItem.Type.ToString()。 Console.WriteLineを(" 变更类型= {0}名称= {1} " 、changedType、firstNameの)。 } } そう であれば(change.Type == ChangeType.RemoveOrDeleted) { RemovedOrDeletedItem removedItem = (RemovedOrDeletedItem)変化。 実体参照removedRecord =removedItem.RemovedItem; もし(!removedRecord = NULL ) { のGUID番号 = removedRecord.Id。 changedType = removedItem.Type.ToString()。 Console.WriteLineを(" 变更类型= {0}、ID = {1} " 、changedType、id.ToString())。 } } } } 他 { Console.WriteLineを(" レコードがで変更されていない!" ); } IF(!Response.EntityChanges.MoreRecords) { dataToken = response.EntityChanges.DataToken; Console.WriteLineを(" 取得したレコードの取得が変更されたとき= {0} DataTokenを" 、 dataToken); 使用(のStreamWriter SW = File.AppendText(@ " C:\ luoyong.txt " )) { sw.WriteLine(文字列 .Format(" = {0} DataToken取得し、この変更レコードの時に取得"、dataToken))。 } ブレーク; } request.PageInfo.PageNumber ++ 。 request.PageInfo.PagingCookie = response.EntityChanges.PagingCookie。 } Console.WriteLineを(" 程序运行完成" )。 Console.ReadKey(); } キャッチ(FaultExceptionのEX) { Console.WriteLineを(" 程序出现异常:ex.Message = " + ex.Message)。 Console.WriteLineを("ex.StackTrace = " + ex.StackTrace); Console.ReadKey(); } } } }
ショットが表示された後、私は、コードを実行します。
それから私はrequest.DataVersionコードを取得するには565904の値に変更された値になります!2016年1月5日午前6時55分25秒後に、結果は以下の通りである、結果は正しいです。
それから私は、レコードを変更結果を確認するためにレコードを削除、レコードを追加しました。私は、結果は二つのレコードを示している変更、新しいレコード、以前に削除されての存在であるそのうちの一つ二つのレコードを、削除結果が正しいの後に、別の1を添加し、その後削除されます。結論は、この新しい期間で、その後削除されたレコードは新しい一度表示されません、それを削除のみが表示されますので、私たちは、他のシステムは、時間を記録し、存在しない場合も驚かないでください削除すると、外部システムインテグレーション時間ほしいです。
詳細については、マニュアルを参照してください: 利用変化は、外部システムと同期するデータの追跡