Извлечение настраиваемых полей Dynamics CRM с помощью запроса Webservice - PullRequest
4 голосов
/ 30 июня 2009

Я пытаюсь получить информацию из установки CRM, и пока это хорошо для использования полей по умолчанию. Однако у меня возникают трудности при получении настраиваемых полей, например, у контактов есть настраиваемое поле с именем web_username.

Мой код в настоящее время

        QueryExpression query = new QueryExpression();
        query.EntityName = "contact";
        ColumnSet cols = new ColumnSet();
        cols.Attributes = new string[] { "firstname", "lastname" };
        query.ColumnSet = cols;

        BusinessEntityCollection beReturned = tomService.RetrieveMultiple(query);
        foreach (contact _contact in beReturned.BusinessEntities)
        {
            DataRow dr = dt.NewRow();
            dr["firstname"] = _contact.firstname;
            dr["lastname"] = _contact.lastname;
            dt.Rows.Add(dr);
        }

Как включить пользовательские поля в мой запрос? Я пытался искать, но безуспешно, но мог искать неправильно, так как не привык к терминам CRM.

Заранее спасибо!

Ответы [ 2 ]

6 голосов
/ 30 июня 2009

С тех пор я смог решить это. На случай, если это кому-нибудь пригодится, это то, что я сделал. Запрос настроен, как и раньше, за исключением того, что я добавил свое настраиваемое поле в ColumnSet.

cols.Attributes = new string[] { "firstname", "lastname", "new_web_username" };

А затем использовал RetrieveMultipleResponse и Request с ReturnDynamicEntities, установленными в true

        RetrieveMultipleResponse retrived = new RetrieveMultipleResponse();

        RetrieveMultipleRequest retrive = new RetrieveMultipleRequest();
        retrive.Query = query;
        retrive.ReturnDynamicEntities = true;

        retrived = (RetrieveMultipleResponse)tomService.Execute(retrive);

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

EDIT Используя пример из моего исходного вопроса, если вы приведете к контакту

contact myContact = (contact)myService.Retrieve(EntityName.contact.ToString(), userID, cols);

После этого вы можете получить доступ к свойствам объекта

                phone = myContact.telephone1;
            password = myContact.new_password;

Если вы обновите свои пользовательские поля CRM, добавленные в CRM, будут доступны.

0 голосов
/ 30 мая 2017
    public List<Entity> GetEntitiesCollection(IOrganizationService service, string entityName, ColumnSet col)
  {
                        try
                        {
                            QueryExpression query = new QueryExpression
                            {
                                EntityName = entityName,
                                ColumnSet = col
                            };
                            var testResult = service.RetrieveMultiple(query);
                            var testResultSorted = testResult.Entities.OrderBy(x => x.LogicalName).ToList();

             foreach (Entity res in testResultSorted)
                        {
                            var keySorted = res.Attributes.OrderBy(x => x.Key).ToList();
                            DataRow dr = null;
                            dr = dt.NewRow();
                            foreach (var attribute in keySorted)
                            {
                                try
                                {
                                    if (attribute.Value.ToString() == "Microsoft.Xrm.Sdk.OptionSetValue")
                                    {
                                        var valueofattribute = GetoptionsetText(entityName, attribute.Key, ((Microsoft.Xrm.Sdk.OptionSetValue)attribute.Value).Value, _service);
dr[attribute.Key] = valueofattribute;


                                        }
                                        else if (attribute.Value.ToString() == "Microsoft.Xrm.Sdk.EntityReference")
                                        {
                                            dr[attribute.Key] = ((Microsoft.Xrm.Sdk.EntityReference)attribute.Value).Name;
                                        }
                                        else
                                        {
                                            dr[attribute.Key] = attribute.Value;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        Response.Write("<br/>optionset Error is :" + ex.Message);
                                    }
                                }
                                dt.Rows.Add(dr);
                            }
                 return testResultSorted;
                 }
                        catch (Exception ex)
                        {
                            Response.Write("<br/> Error Message : " + ex.Message);
                            return null;
                        }
            }

// здесь я упомянул еще одну функцию:

 var valueofattribute = GetoptionsetText(entityName, attribute.Key, ((Microsoft.Xrm.Sdk.OptionSetValue)attribute.Value).Value, _service);

// определение этой функции приведено ниже:

public static string GetoptionsetText(string entityName, string attributeName, int optionSetValue, IOrganizationService service)
    {
                 string AttributeName = attributeName;
        string EntityLogicalName = entityName;
        RetrieveEntityRequest retrieveDetails = new RetrieveEntityRequest
        {
            EntityFilters = EntityFilters.All,
            LogicalName = entityName
        };
        RetrieveEntityResponse retrieveEntityResponseObj = (RetrieveEntityResponse)service.Execute(retrieveDetails);
        Microsoft.Xrm.Sdk.Metadata.EntityMetadata metadata = retrieveEntityResponseObj.EntityMetadata;
        Microsoft.Xrm.Sdk.Metadata.PicklistAttributeMetadata picklistMetadata = metadata.Attributes.FirstOrDefault(attribute => String.Equals(attribute.LogicalName, attributeName, StringComparison.OrdinalIgnoreCase)) as Microsoft.Xrm.Sdk.Metadata.PicklistAttributeMetadata;
        Microsoft.Xrm.Sdk.Metadata.OptionSetMetadata options = picklistMetadata.OptionSet;

        IList<OptionMetadata> OptionsList = (from o in options.Options
                                             where o.Value.Value == optionSetValue
                                             select o).ToList();
        string optionsetLabel = (OptionsList.First()).Label.UserLocalizedLabel.Label;
        return optionsetLabel;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...