После обновления с Dynamics CRM 2011 до CRm 2016 возникла странная проблема с формами и плагинами - PullRequest
0 голосов
/ 21 июня 2019

Клиентская компания только что обновилась до 2016 года с 2011 года. Я тестировал плагины, чтобы убедиться, что они все еще работают, и я наконец (после большого разочарования) выяснил, что происходит, но не знаю, почему или как решитьthis.

У меня есть несколько плагинов, и все они работают точно так, как ожидается - до тех пор, пока обновления данных не будут проходить через формы.

Позвольте мне объяснить:

У меня есть плагины (синхронные), которые запускаются при изменении поля.Если поле изменяется с помощью рабочего процесса или другого кодированного процесса, все работает просто отлично.

Но когда я обновляю поле в форме, оно само.Это терпит неудачу с очень общей ошибкой (ниже).

Я поддерживаю пару других клиентов уже в 2016 году, и у меня нет такой же проблемы.Так что я даже не знаю, с чего начать.Последние несколько дней я сходил с ума, чтобы проверить код.Но это происходит только при обновлении поля в форме.Любой другой метод обновления данных, которые я протестировал, работает без ошибок.

У меня тоже есть другая проблема.Когда поле обновляется (через тестовый рабочий процесс), оно запускается и обновляет дочернюю запись.Дочерняя запись затем имеет рабочий процесс, который запускается для деактивации записи.Рабочий процесс говорит, что запустил и деактивировал запись, но никогда не деактивирует).

В любом случае.если кто-либо имеет хоть какую-то идею о том, что может быть причиной этого.Я хотел бы услышать это.Я в своем уме на этом.

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

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

EntityReference contact =    
(EntityReference)preImageEntity.Attributes["ipmahr_contact"];

QueryExpression cn = new QueryExpression("ipmahr_recertification");
cn.ColumnSet = new ColumnSet("ipmahr_contact", "statecode");
cn.Criteria.AddCondition("ipmahr_contact", ConditionOperator.Equal,  
contact.Id);
cn.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);

EntityCollection results1 = server.RetrieveMultiple(cn);

if (results1.Entities.Count > 0)
     foreach (Entity a in results1.Entities)
     {
      a.Attributes["ipmahr_deactivaterecertificationrecord"] =   true;
         server.Update(a);
     }    

В большинстве случаев код довольно прост и работает нормально, если в форме ничего не обновляется.

Вот ошибка: Exception: System.ServiceModel.FaultException`1 [Microsoft.Xrm.Sdk.OrganizationServiceFault]: System.ServiceModel.CommunicationObjectFaptedException: # 595EB751 (Сведения о сбое равны Microsoft.Xrm.Sdk.OrganizationServiceFault)., Id корреляции: fd846-cd767Инициирующий пользователь: 274d55dc-3f4d-e811-b30f-0050569142af Выход из повторных подтверждений.Main.DeactivateUsedRecertificationsonEndDateChange.Execute (), идентификатор корреляции: fd1a79ca-c846-407b-b578-ac92056-f2-ef0406d6506d6506d6406d6*


Новая информация.Я обнаружил, что не все плагины, которые я написал, имеют проблемы на этом сервере.Это хорошо.Но я также обнаружил, что есть общие черты для тех плагинов, которые не работают.

Любой плагин, использующий выражение запроса, завершается с общей ошибкой.Добавление надежной проверки ошибок ничего не показало (как только проверка ошибок была добавлена, она просто ничего не запускала и не вырабатывала ошибок в журналах).Журналы трассировки также не показали ничего существенного.

Так что теперь мне интересно, есть ли что-то в том, как форматируется выражение запроса, или есть ли проблема с SQL.Я упоминаю SQL, потому что утром обнаружил, что если я создаю поля слишком быстро, я получаю общую ошибку SQL.Подождите минуту, и я могу создать новые поля без проблем.

1 Ответ

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

Я думаю, вероятно, что этот плагин на самом деле не выходит из строя на основании получаемой вами ошибки и того факта, что это происходит по условию. Скорее всего, ваш сервер. Обновление (а); вызов приводит к сбою в дополнительном подключаемом модуле или действии рабочего процесса, инициируемому обновлением записи повторной сертификации.
- Закомментируйте эту строку и убедитесь, что плагин работает
- Проверьте, можете ли вы воспроизвести ошибку, непосредственно обновив это поле в записи повторной сертификации
- Просмотрите плагин / рабочие процессы, работающие с объектом повторной сертификации

Скорее всего, это имеет одну из следующих основных причин:
- Проблема безопасности, связанная с выполнением разных пользователей между обновлением формы или обновлением рабочего процесса
- Другие тангенциальные поля обновляются тем или иным из этих двух методов, что впоследствии вызывает другое поведение во вторичном плагине / рабочем процессе

...