2

プラグインでは、同期前、同期後、非同期後にプラグインが起動されたレコードを更新する必要があります。

Pre-sync-state では、たとえば mycontact.Attributes["lastname"] = "ABC" などの Context-Entity を更新するだけで、変更された値が自動的に保存されます。

Post-Update では、既にデータベースにあるため、それを行うことはできません (ただし、コミットされていません)。サービス (service.update(mycontact) を使用しようとして失敗しました。

Post-Update (同期/非同期) でレコードを更新する最良の方法は何ですか?

他のレコードの更新は問題ありませんが、プラグインが起動されたレコードの更新は機能しません。:-(

何か案は?

よろしく、ニック

4

9 に答える 9

3

上記の場合、値がまだDBに保存されていないため、同期操作は機能しません。そのため、左のオプションは、チェック付きのasync-post-updateです

if (context.Depth > 1){ return; } //To Avoid Multiple Trigger Of Same Update Plugin. 
于 2013-09-04T07:13:15.543 に答える
1

前に:-

コンテキストのデータを保存するので、コンテキストを更新してみてください:-

Entity test= (Entity)context.InputParameter["Target"];
test["name"]="ABC";
context.InputParaeter["Target"] = test;

ポスト(Syn / Asyn):-

レコードを更新するための新しいオブジェクトを作成してみてください

Entity test=new Entity("contact");
test.Id=((Entity)context.InputParameter["Target"]).Id;
test.Attributes["firstname"]="ABC";
service.Update(test);

また、チェックしてください

Context.Depth<=1;
于 2014-05-01T09:31:11.530 に答える
0

service.Update(entity) 

投稿段階で動作するはずです。とにかく、更新操作中は、エンティティのすべてのフィールドにアクセスできるわけではなく、更新されたフィールドにのみアクセスできます。他のフィールドを変更する場合は、retrieve を使用してエンティティを取得する必要があります (常に、パフォーマンスを向上させるために必要なフィールドのみを取得してください)。基本的に問題は、値を読み取ったり、コンテキストに転送されていないために null になっているフィールドを更新したりすることです。

于 2014-02-28T18:58:57.310 に答える
0

更新しているレコードを取得する必要があります

Entity EntityUpdate=  service.retrieve(entity,id,true);

次に、フィールドを次のように更新します

  EntityUpdate["field1"] = "abc";

それから

 service.update(EntityUpdate);
于 2014-01-28T10:20:12.900 に答える
-1

そのとおりです。レコードがデータベースに保存された後は、その内容を直接変更してコンテキスト レコードを更新することはできません。

代わりに、新しいエンティティ オブジェクトを作成し、それを新しい値で更新する必要があります。

Entity oContact = New Entity("contact");
oContact.Id = myContact.Id;
oContact.Attributes.Add("lastname", "ABC");
organizationService.Update(oContact);
于 2013-12-15T17:37:14.893 に答える