D365 - Получить список решений, который содержит определенную строку в «уникальном имени» - PullRequest
0 голосов
/ 07 июля 2019

Я хочу получить список решений, отображаемых в DropDown в приложении Windows.

Итак, чтобы получить список решений, я написал ниже QueryExpression и добавил фильтр для того же:

    public EntityCollection GetSolutions(IOrganizationService service, string solutionUniqueNameLike)
    {
        QueryExpression querySampleSolution = new QueryExpression
        {
            EntityName = "solution",
            ColumnSet = new ColumnSet(new string[] { "publisherid", "installedon", "version", "versionnumber", "friendlyname", "ismanaged", "uniquename" }),
            Criteria = new FilterExpression()
        };

        querySampleSolution.Criteria.AddCondition("uniquename".ToLower(), ConditionOperator.Like, "*" + solutionUniqueNameLike.ToLower() + "*");
        var solutions = service.RetrieveMultiple(querySampleSolution);
        //var filteredSolutions = solutions.Entities.Where(e => (e.Attributes.Contains("uniquename")) && (e.Attributes["uniquename"].ToString().ToLower() == "*" + solutionUniqueNameLike + "*"));
        if (solutions?.Entities?.Count > 0)
        {
            return solutions;
        }
        return null;
    }

Но он возвращает 0 сущностей в результате.

Я также попытался выполнить поиск во всех решениях, используя LINQ , как добавлено в приведенной выше строке кода. Но получая NULL там.

РЕДАКТИРОВАТЬ 1: Когда я пытался использовать Contains вместо `Like условия, он выдает ошибку, как показано ниже:

System.ServiceModel.FaultException 1 HResult=0x80131501 Message= Sql error: Generic SQL error. CRM ErrorCode: -2147204784 Sql ErrorCode: -2146232060 Sql Number: 7601 Source=mscorlib<br> StackTrace: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Microsoft.Xrm.Sdk.IOrganizationService.RetrieveMultiple(QueryBase query) at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.RetrieveMultipleCore(QueryBase query) at Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.RetrieveMultiple(QueryBase query) at Microsoft.Xrm.Client.Services.OrganizationService.<>c__DisplayClass22.<RetrieveMultiple>b__21(IOrganizationService s) at Microsoft.Xrm.Client.Services.OrganizationService.InnerOrganizationService.UsingService[TResult](Func 2 действие) в Microsoft.Xrm.Client.Services.OrganizationService.RetrieveMultiple (QueryBase запрос) в TestProjectForCRM.Program.Main (String [] args) в C: \ Users \ pratik.soni \ источник \ Repos \ TestProjectForCRM \ TestProjectForCRM \ Program.cs: линия 37

Не уверен, что мне здесь не хватает.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я хочу добавить, почему вы видите следующую ошибку:

System.ServiceModel.FaultException1 HResult = 0x80131501 Сообщение =
Ошибка SQL: общая ошибка SQL. Код ошибки CRM: -2147204784 Sql
Код ошибки: -2146232060 Номер Sql: 7601

Часть, которая будет полезна: Номер Sql: 7601 , Движок базы данных События и ошибки говорит Cannot use a CONTAINS or FREETEXT predicate on %S_MSG '%.*ls' because it is not full-text indexed.

См. Мой блог о том, как взломать это сообщение об ошибке.

0 голосов
/ 08 июля 2019

Когда я использую оператор Like , как показано ниже, он дает мне список решений

// Define Condition Values
    var QEsolution_uniquename = "%sprint%";

    // Instantiate QueryExpression QEsolution
    var QEsolution = new QueryExpression("solution");

    // Add columns to QEsolution.ColumnSet
    QEsolution.ColumnSet.AddColumns("friendlyname", "uniquename");

    // Define filter QEsolution.Criteria
    QEsolution.Criteria.AddCondition("uniquename", ConditionOperator.Like, QEsolution_uniquename);

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

...