2014-02-03 2 views
0

Я создал простой плагин для создания дублирующей записи, которая ссылается на родительскую запись.CRM 2011: плагин для создания повторяющихся записей

Вот мой код

 var pluginExecutionContext = localContext.PluginExecutionContext; 

     IOrganizationService service = localContext.OrganizationService; 

     abc= pluginExecutionContext.InputParameters["Target"] as Entity; 

     if (pluginExecutionContext.Depth == 1) 
     { 
      Guid abcId = abc.Id; 
      Entity abcCopy = new Entity("mcg_abc"); 


      if (abc.Attributes.Contains("mcg_abccategoryoptioncode")) 
      { 
       abcCopy.Attributes["mcg_abccategoryoptioncode"] = abc.GetAttributeValue<OptionSetValue>("mcg_abccategoryoptioncode"); 
      } 

      if (abc.Attributes.Contains("mcg_effectivedate")) 
      { 
       abcCopy.Attributes["mcg_effectivedate"] = isp.GetAttributeValue<DateTime>("mcg_effectivedate"); 
      } 

      if (abc.Attributes.Contains("mcg_startdate")) 
      { 
       abcCopy.Attributes["mcg_startdate"] = isp.GetAttributeValue<DateTime>("mcg_startdate"); 
      } 

      if (abc.Attributes.Contains("mcg_enddate")) 
      { 
       abcCopy.Attributes["mcg_enddate"] = isp.GetAttributeValue<DateTime>("mcg_enddate"); 
      } 

      if (abc.Attributes.Contains("mcg_amendeddate")) 
      { 
       abcCopy.Attributes["mcg_amendeddate"] = isp.GetAttributeValue<DateTime>("mcg_amendeddate"); 
      } 
      if ((abc.GetAttributeValue<OptionSetValue>("mcg_abccategoryoptioncode").Value) == 803870001) 
       { 
       //Some more fields;  

       } 
       else 
       { 
       //Some more fields;  
       } 
      // SOme more fields; 
      abcCopy.Attributes["mcg_parentabc"] = new EntityReference("mcg_abc", abc.Id); 
      service.Create(abcCopy); 

}

Теперь проблема все полей перед следующей проверкой становятся скопированы

if ((abc.GetAttributeValue<OptionSetValue>("mcg_abccategoryoptioncode").Value) == 803870001) 

Однако поля после этой проверки не получают скопированы ,

Пожалуйста, если кто-нибудь может предположить, какую ошибку я совершил.

+0

Вы хотите сказать 'if' секции выполняется, а не' else' (или визави-Versa) или вы говорите, что '// Несколько полей ', на самом деле ничего не устанавливает? – Daryl

ответ

0

Если вы берете поле с Target - это поле было обновлено на стороне клиента. В случае, если поле не было обновлено - оно не было бы в Target. Вы должны использовать «Изображения» для получения значений неизмененных полей.

0

Поле должно быть пустым, поэтому может возникнуть исключение. Попробуйте использовать плагин изображение или изменить свой код таким образом:

if (abc.Attributes.Contains("mcg_abccategoryoptioncode")){ 
    if ((abc.GetAttributeValue<OptionSetValue>("mcg_abccategoryoptioncode").Value) == 803870001) 
.... 
Смежные вопросы