Microsoft Xrm: невозможно упорядочить по языку объект типа IQueryable‹KnowledgeArticle›

Я просто пытаюсь упорядочить их языком набор KnowledgeArticle. Моя первая догадка была:

var SPRSet = _XrmServiceContext.KnowledgeArticleSet
            .Where(c => c.IsInternal == false)
            .Where(c => c.StateCode == Xrm.KnowledgeArticleState.Published)
            .OrderBy(s => s.LanguageLocaleId.Name)

Это дает мне следующую ошибку:

System.NotSupportedException : «Вызов orderBy должен указывать имена свойств».

Затем я попытался загрузить объект LanguageLocale, выполнив следующие действия:

SPRSet.OrderBy(s => _XrmOrganizationService.Retrieve(s.LanguageLocaleId.LogicalName, s.LanguageLocaleId.Id, new ColumnSet("name")).ToEntity<Xrm.LanguageLocale>().Name);

или похожие:

SPRSet.OrderBy(s => _XrmOrganizationService.Retrieve(s.LanguageLocaleId.LogicalName, s.LanguageLocaleId.Id, new ColumnSet("name")).GetAttributeValue<string>("name"));

Оба дают мне следующую ошибку:

System.ServiceModel.FaultException`1 :
Сущность 'KnowledgeArticle' не содержит атрибута с Name = 'name' и NameMapping = 'Logical'. MetadataCacheDetails: ProviderType = Dynamic, StandardCache = True, IsLoadedInStagedContext = False, Timestamp = 62358974, MinActiveRowVersion = 62358974 '

При отладке загрузка объекта LanguageLocale работает нормально, когда я оцениваю выражение для первого элемента моего набора:

var languageName = _XrmOrganizationService.Retrieve(SPRSet.First().LanguageLocaleId.LogicalName, SPRSet.First().LanguageLocaleId.Id, new ColumnSet("name")).ToEntity<Xrm.LanguageLocale>().Name

Другие сортировки по Title или ArticlePublicNumber работают нормально.


person S.Bo    schedule 17.12.2018    source источник
comment
Вы проверили, не создал ли кто-нибудь languagelocal без имени? Ваш код выглядит нормально, и если вы даже можете получить первый LanguageLocalId.Name, я подозреваю, что проблема в данных.   -  person Filburt    schedule 17.12.2018
comment
Я только что проверил, и все статьи, похоже, имеют правильный LanguageLocale с непустым свойством Name. Изменить: на самом деле информация о языке требуется при создании новой статьи в CRM.   -  person S.Bo    schedule 17.12.2018


Ответы (1)


Я запустил браузер метаданных XrmToolbox, чтобы посмотреть.

Проблема, которую вы видите, может быть связана с тем фактом, что объект, такой как поле name учетной записи, имеет флаг IsRetrievable, установленный на true.

В то время как name в LanguageLocale имеет IsRetrievable значение false.

Счет:

Учетная запись

ЯзыкЯзык:

LanguageLocale

Я не уверен, что вы можете с этим поделать. Возможно, вам придется придумать альтернативный способ хранения информации о языке в статье знаний.

person Aron    schedule 18.12.2018