Dynamics CRM - как создать объект, а затем сохранить идентификатор в той же транзакции - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть программа .net, которая должна сделать это:

  1. Создать объект: учетную запись, адрес, контакт и т. Д.
  2. Получить идентификатор вновь созданного объекта
  3. Сохраните этот идентификатор как новую запись в пользовательском объекте, скажем «CreateJournal»
  4. Все это должно происходить в некой транзакции.То есть: шаги 1 и 3 должны идти вместе: либо неудача, либо успех

Я пробовал это:

Account acc = new Account();
acc.Name = "test on " + DateTime.Now.ToString();
Context.AddObject(acc);

CreateJournal jEntry = new CreateJournal();
jEntry.targetid = acc.Id.ToString();
Context.AddObject(jEntry);

Context.SaveChanges();

Но это не работает, targetId - Guid.Empty.

Контекст имеет тип OrganizationServiceContext .

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

CRM поддерживает назначение новым объектам их идентификаторов перед созданием записи.Помните, что Guides, в отличие от целочисленных идентификаторов, уникальны во всем мире, поэтому системы на основе guid обычно поддерживают такое поведение «set id first».

Специфично для вашего кода ... Попробуйте назначить acc.Id следующим образом:

Account acc = new Account();
acc.Name = "test on " + DateTime.Now.ToString();
acc.Id = Guid.NewGuid();
Context.AddObject(acc);  

РЕДАКТИРОВАТЬ: (Извините, я не понял), этот код не работает в коде плагина, поэтому вынеудача для транзакций.См. http://social.microsoft.com/Forums/en/crmdevelopment/thread/229dec17-6c49-43ad-9751-6ea61e4ecd36.

Поведение транзакций, о котором вы, возможно, слышали, частично документировано здесь и объясняет контекст поддержки транзакций в CRM: http://msdn.microsoft.com/en-us/library/gg327941.aspx#bkmk_DatabaseTransactions

1 голос
/ 21 февраля 2012

Используйте плагин для каждой интересующей вас сущности, есть журнал, например, пост этап плагин на создание события, которое будет создавать ваши объекты журнала. Он будет работать в «транзакционном» режиме.

...