2008-08-18

Plug-in signing

При разработке plug-in'а, нужно обязательно задавать сильное имя(strong name) и не забывать при релизе переподписывать(re-sign) библиотеку, если был выставлен атрибут Delay Sign Only.

sn - R <assembly> <keyfile>

"Not have enough privilege to complete Create operation for an Sdk entity" при регистрации плагина в CRM 4.0

Эта ошибка возникает даже если пользователь обладает ролью System Administrator. Причина её возникновения, в том, что пользователь не является членом группы Deployment Administrators group в утилите CRM Deployment Manager.

Вы написали plug-in и пытаетесь его зарегистрировать. Не важно, делаете ли вы это с помощью Plug-in Registration Tool из SDK или с помощью собственного инсталлера, однако, даже если вы Системный Администратор, то возможно вам все-равно не удастся зарегистрировать plug-in, и вы получите следующую ошибку:

"Not have enough privilege to complete Create operation for an Sdk entity"

Оказывается System Administrator больше не царь и бог, и эта роль не обладает привилегиями развертывания(deploy). Есть отдельная роль Deployment Administrator. Изначально ее имеет тот, кто устанавливал CRM на локальную машину.
Чтобы регистрировать плагины, понадобится добавить пользователя из-под которого происходит регистрация в Deployment Manager.

  1. Откройте CRM 4.0 Deployment Manager (Start -> All Programs -> Microsoft Dynamics CRM -> Deployment Manager)

  2. Добавьте пользователя из Active Directory в Deployment Administrator'ы


После этого попробуйте еще раз зарегистрировать свой plug-in.

2008-08-05

TargetUpdate Sample Code.

Этого Sample Code я не нашел в SDK, однако нашел вопросы на форумах, оставленные без ответов и решенные с помощью CrmService.Update. Потому я решил написать такой пример.
Думаю кому-то будет интересно как же на самом деле может быть решена задача обновления через TargetUpdate.
private void EmailDeliveryChange(email emailResult, int new_delivery)
{
service = new CrmService.CrmService();
service.Credentials = System.Net.CredentialCache.DefaultCredentials;
service.Url = CrmServiceUrl;

TargetUpdateEmail tue = new TargetUpdateEmail();
// create new email entity for update
email emailUpdate = new email();

// Set the ID of entity which we want to update
emailUpdate.activityid = new Key();
emailUpdate.activityid.Value = new Guid(emailResult.activityid.Value.ToString()); // parameter

// set new value of attribute
emailUpdate.new_delivery = new Picklist();    
emailUpdate.new_delivery.Value = new_delivery;  // parameter

tue.Email = emailUpdate;    
UpdateRequest upreq = new UpdateRequest();

upreq.Target = tue;
UpdateResponse upres = (UpdateResponse)service.Execute(upreq);
}