Использование выражения запроса создает OrganizationServiceFault

#plugins #visual-studio-2017 #dynamics-crm-2016

Вопрос:

Мне нужна помощь. Это первое выражение запроса, которое я использовал с тех пор, как мне пришлось обновить свой SDK до 365.

На данный момент я даже не делаю ничего сложного, но если я использую выражение запроса в коде (как я делал 100 раз раньше) Я получаю ошибку в организации.

Это встроено в VisualStudio 2017 с использованием инструмента регистрации плагина 365SDK для создания плагина.

Итак, вот базовый код (и на данный момент он действительно базовый)

 using System;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace TrainerAppHistory.TransferHistory
{

/// <summary>
/// PreOperationipmahr_trainerapplicationUpdate Plugin.
/// Fires when the following attributes are updated:
/// ipmahr_transferhistory
/// </summary>    
public class PreOperationipmahr_trainerapplicationUpdate : PluginBase
{

    public PreOperationipmahr_trainerapplicationUpdate(string unsecure, string secure)
        : base(typeof(PreOperationipmahr_trainerapplicationUpdate))
    {

        // TODO: Implement your custom configuration handling.
    }
    private readonly string preImageAlias = "PreImage";
    protected override void ExecuteCrmPlugin(LocalPluginContext localContext)
    {
        if (localContext == null)
        {
            throw new InvalidPluginExecutionException("localContext");
        }

        IPluginExecutionContext context = localContext.PluginExecutionContext;
        IOrganizationService server = localContext.OrganizationService;
        Entity Training = (Entity)context.InputParameters["Target"];
        Entity preImageEntity = (context.PreEntityImages != null amp;amp; context.PreEntityImages.Contains(this.preImageAlias)) ? context.PreEntityImages[this.preImageAlias] : null;
        EntityReference Contact = (EntityReference)preImageEntity.Attributes["ipmahr_contactid"];
        
        bool transfer = Training.GetAttributeValue<bool>("ipmahr_transferhistory");
        Guid recordID = Training.GetAttributeValue<Guid>("ipmahr_trainerapplicationid");
        Guid contactid = Contact.Id;
        

        if (transfer == true)
        {
            QueryExpression TopRecord = new QueryExpression("ipmahr_trainerapplication");
            TopRecord.ColumnSet = new ColumnSet("ipmahr_trainerapplicationid");
             EntityCollection results1 = server.RetrieveMultiple(TopRecord);

            if (results1.Entities.Count > 1)
            {
                Training.Attributes["new_comments"] = "found them all";
               
            }

            //End Code

        }
    }
}
}
 

Когда я удаляю выражение запроса и просто использую простое обновление записи, подобное этому
Обучение.Атрибуты[«new_comments»] = «Это работает»;
Тогда у меня нет ошибок при обновлении записи.

Я попытался просто заполнить переменную в выражении запроса, а затем обновить (для тестирования) за пределами QE. Но, похоже, проблема заключается только в существовании QE.

Я не знаю, на что смотреть дальше. Кажется, ничто из того, что я нашел, не помогает. Я использовал инструмент Register Plugin для создания этого плагина.

Трассировка плагинов показывает следующее, и я думаю, что это ключ к этому. Но мне не очень-то везет в поиске ответов.

Система.Модель обслуживания.Исключение CommunicationObjectFaultedException: Объект связи, Система.Модель обслуживания.Каналы.Канал обслуживания, не может использоваться для связи, поскольку он находится в неисправном состоянии.

Комментарии:

1. Можете ли вы завернуть свой results1 = server.RetrieveMultiple(TopRecord); в try/catch блок и проверить наличие внутренних исключений?

2. Давно хотел вернуться к этому. Оказывается, это был вовсе не код, а скорее служба профилировщика и/или служба песочницы. (Я не уверен, что именно, так как хостинговая компания мне не ответила. Но код теперь работает после того, как они что-то сделали с ним в выходные.) Но спасибо, что ответили.

Ответ №1:

Давно хотел вернуться к этому. Оказывается, это был вовсе не код, а скорее служба профилировщика и/или служба песочницы. (Я не уверен, что именно, так как хостинговая компания мне не ответила. Но код теперь работает после того, как они что-то сделали с сервером в выходные.) Но спасибо, что ответили.