2014-09-26 2 views
-1

Я создал запись контакта с помощью ASP.NET. Теперь мне нужно проверить, существует ли контактная запись. Если существует, обновите одну и ту же запись. Через предварительный поиск загрузили FetchXML и добавили в мою переменную FetchXML. Пожалуйста, предложите логику. Ниже мой код.Dynamics CRM- запись обновления контактного объекта

// Establish a connection to crm and get the connection proxy 

string connectionString = "xyz; Username= xyz ;Password=xyz"; 
CrmConnection connect = CrmConnection.Parse(connectionString); 
OrganizationService service; 


using (service = new OrganizationService(connect)) 
{ 
    WhoAmIRequest request = new WhoAmIRequest(); 
    Guid userId = ((WhoAmIResponse)service.Execute(request)).UserId; 

    ContactDetails contact = new ContactDetails(); 
    //Check if the contact record exists . If exists , update the same record. 
    //Fecthxml query 
    string fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> 
          <entity name='contact'> 
           <attribute name='fullname' /> 
           <attribute name='parentcustomerid' /> 
           <attribute name='telephone1' /> 
           <attribute name='emailaddress1' /> 
           <attribute name='contactid' /> 
           <order attribute='fullname' descending='false' /> 
           <filter type='and'> 
            <condition attribute= 'mobilephone' operator='not-null' /> 
           </filter> 
          </entity> 
         </fetch>" ; 
    FetchExpression query = new FetchExpression(fetchXml); 
    EntityCollection results = service.RetrieveMultiple(query); 

    if (results.Entities.Count > 0) 
    { 
     Entity contactRecord = results[0]; 
     contactRecord["firstname"] = contactInfo.FirstName; 
     contactRecord["lastname"] = contactInfo.LastName; 
     contactRecord["emailaddress1"] = contactInfo.EmailId; 
     contactRecord["mobilephone"] = contactInfo.MobilePhone; 
     contactRecord["address1_line1"] = contactInfo.Street1; 
     contactRecord["address1_line2"] = contactInfo.Street2; 
     contactRecord["address1_line3"] = contactInfo.Street3; 
     contactRecord["address1_city"] = contactInfo.City; 
     service.Update(contactRecord); 
    } 
    //Else, Create the contact record 
    else 
    { 
     Entity entity = new Entity(); 
     entity.LogicalName = "contact"; 

     entity["firstname"] = contactInfo.FirstName; 
     entity["lastname"] = contactInfo.LastName; 
     entity["emailaddress1"] = contactInfo.EmailId; 
     entity["mobilephone"] = contactInfo.MobilePhone; 
     entity["address1_line1"] = contactInfo.Street1; 
     entity["address1_line2"] = contactInfo.Street2; 
     entity["address1_line3"] = contactInfo.Street3; 
     entity["address1_city"] = contactInfo.City; 
     entity["address1_stateorprovince"] = contactInfo.State; 
     entity["address1_country"] = contactInfo.Country; 
     entity["spousesname"] = contactInfo.SpouseName; 
     entity["birthdate"] = contactInfo.Birthday; 
     entity["anniversary"] = contactInfo.Anniversary; 

     //Create entity gender with option value 
     if (contactInfo.Gender == "Male") 
     { 
      entity["gendercode"] = new OptionSetValue(1); 
     } 
     else 
     { 
      entity["gendercode"] = new OptionSetValue(2); 
     } 

     //entity["familystatuscode"] = contactInfo.MaritalStatus; 

     if (contactInfo.MaritalStatus == "Single") 
     { 
      entity["familystatuscode"] = new OptionSetValue(1); 
     } 
     else 
     { 
      entity["familystatuscode"] = new OptionSetValue(2); 
     } 
     service.Create(entity); 
    } 
} 
// Create the entity 

ответ

0

Ваша логика выглядит нормально, за исключением запроса FectchXML. Как у вас есть код, вы всегда будете обновлять первую полученную запись, заполненную своим полем для мобильного телефона. Это не кажется хорошим способом проверить, существует ли контакт.

Предлагаю вам изменить фильтр вашей выборки. В вашем состоянии фильтра вы должны использовать атрибут, который представляет уникальность для всех контактов.

Помимо этого, ваш код выглядит нормально.

0

Как и nunoalmeieda, вам нужно иметь лучший способ узнать, существует ли Контакт. Общим способом идентификации, если Контакт уже существует, было бы проверить, существует ли адрес электронной почты, так как маловероятно, что два человека будут иметь одинаковый адрес электронной почты.

Я обновил ваш базовый код, чтобы показать, как это делается с помощью FetchXML.

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> 
    <entity name="contact"> 
     <attribute name='fullname' /> 
     <attribute name='parentcustomerid' /> 
     <attribute name='telephone1' /> 
     <attribute name='emailaddress1' /> 
     <attribute name='contactid' /> 
     <order attribute="fullname" descending="false" /> 
     <filter type="and"> 
      <condition attribute="emailaddress1" operator="eq" value=contactInfo.EmailId /> 
     </filter> 
    </entity> 
</fetch> 

Логика здесь в том, что я проверяю, если значение emailaddress1 (поле в контактном субъекте CRM) равно стоимости вашего contactInfo.EmailId. Я предполагаю, что contactInfo - это запись, которую вы получаете от ASP.NET.

Остальная часть вашего кода в порядке (я немного отформатировал его, чтобы сделать вопрос более читаемым).

Смежные вопросы