Поделиться через


Устранение распространенных проблем с несколькими таблицами

Эта статья помогает устранять и устранять распространенные проблемы в нескольких таблицах, таких как возможность, цитата, заказ или счет в Microsoft Dynamics 365 Sales.

Проблема 1. В контекстной форме может отображаться в селекторе формы

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

Причина

Если в вашей среде есть какая-либо настройка, которая задает значение formActivationState для этих таблиц, в раскрывающемся списке селектора формы отображается форма "Контекст" и позволяет пользователям выбирать эту форму для просмотра сведений о записи.

Раскрывающийся список селектора формы с параметром

Решение

Если внешний вид формы контекста приводит к путанице, можно отключить форму контекста, как показано на следующем снимке экрана.

В форме контекста с параметром деактивации.

Проблема 2. Ошибка или непредвиденное поведение при работе с таблицами

Симптомы

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

  • "Расширенная сумма неправильная после изменения кавычки"- эта ошибка может возникнуть из-за пользовательского подключаемого модуля.
  • "Ошибка при сохранении возможности" — эта ошибка может возникать из-за пользовательской версии JavaScript.
  • "Ошибка при закрытии" — эта ошибка может возникать из-за пользовательского рабочего процесса.

Причина

Эти проблемы могут возникнуть из-за неправильной настройки приложения.

Решение

Необходимо проверить неправильные настройки и устранить их. Выполните следующие методы проверки, чтобы определить, какая настройка вызывает проблему, а затем устранить:

Отключение пользовательского подключаемого модуля

  1. Перейдите в раздел Параметры>Настройки>Настройка системы.

  2. Выберите действия по обработке сообщений пакета SDK.

    Отображается список доступных шагов обработки сообщений пакета SDK.

  3. Щелкните значок фильтра, выберите столбец Основной код типа объекта (фильтр сообщений sdk) и выберите таблицу, для которой возникает ошибка.

    Перейдите в пользовательский список подключаемых модулей, чтобы выбрать таблицу, для которой возникает ошибка.

  4. Выберите шаги обработки сообщений ПАКЕТА SDK, поступающие из решений, принадлежащих вам.

    Примечание.

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

    1. Перейдите в раздел "Решения параметров>", а затем откройте решение.

    2. Выберите шаги обработки сообщений ПАКЕТА SDK. Убедитесь, что значения выбраны следующим образом: тип компонента для шага обработки сообщений ПАКЕТА SDK и просмотр для всех.

  5. Выберите Деактивировать.

  6. Опубликуйте настройки.

    Выберите и отключите неуправляемые пользовательские подключаемые модули.

  7. Проверьте проблему и если она не возникает, проблема связана с пользовательскими шагами обработки сообщений ПАКЕТА SDK. Устраните проблему.

Примечание.

Если возникла проблема, активируйте шаги обработки сообщений ПАКЕТА SDK, которые вы деактивировали сейчас, и попробуйте отключить пользовательский javaScript или отключить пользовательский процесс рабочего процесса.

Отключение пользовательского JavaScript

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

    Откройте редактор форм.

  2. Выберите "Свойства формы" в редакторе форм.

    Выберите

    Откроется диалоговое окно "Свойства формы".

  3. На вкладке "События " выберите элемент управления OnLoad из раскрывающегося списка "События ".

    Выберите элемент управления OnLoad из раскрывающегося списка

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

    Примечание.

    Чтобы просмотреть настраиваемый JavaScript, выполните следующие действия.

    1. Перейдите в раздел "Решения параметров>", а затем откройте решение.
    2. Выберите WebResources. Убедитесь, что значения выбраны в качестве типа компонента в WebResources и View to All.
    3. Щелкните значок фильтра , чтобы включить параметры фильтра для столбцов. Выберите тип и задайте фильтр в качестве скрипта (JScript).

    Выберите тип и задайте фильтр как скрипт (JScript).

  5. Выберите Изменить. В этом примере мы выбрали настраиваемый файл JavaScript, eg_opportunity для редактирования.

    Входные данные в диалоговом окне свойств обработчика.

  6. Снимите флажок "Включить" и нажмите кнопку "ОК".

    Снимите флажок

  7. Опубликуйте настройки.

  8. Проверьте проблему и если она не возникает, проблема связана с пользовательским JavaScript. Устраните проблему.

Примечание.

Если возникла проблема, включите JavaScript, который вы отключили сейчас, и попробуйте отключить настраиваемый подключаемый модуль или деактивировать пользовательский процесс рабочего процесса.

Отключение пользовательского процесса рабочего процесса

  1. Перейдите в раздел Параметры>Настройки>Настройка системы.

  2. Выберите "Процессы". К этим процессам относятся рабочий процесс, поток бизнес-процессов и бизнес-правило.

    Отображается список доступных процессов.

  3. Щелкните значок фильтра, выберите столбец "Основная сущность", а затем выберите таблицу, для которой возникает ошибка.

    Перейдите в список пользовательских рабочих процессов, чтобы выбрать таблицу, для которой возникает ошибка.

  4. Выберите процессы, поступающие из решений, принадлежащих вам.

    Примечание.

    Чтобы просмотреть пользовательские процессы, выполните действия.

    1. Перейдите в раздел "Решения параметров>", а затем откройте решение.
    2. Выберите "Процессы". Убедитесь, что значения выбраны в качестве типа компонента для процессов и просмотра для всех.
  5. Выберите Деактивировать.

  6. Опубликуйте настройки.

    Выберите и отключите неуправляемые рабочие процессы.

  7. Проверьте проблему и если она не возникает, проблема связана с пользовательскими процессами. Устраните проблему.

Примечание.

Если возникла проблема, активируйте процессы , которые вы деактивировали сейчас, и попробуйте отключить настраиваемый подключаемый модуль или отключить настраиваемый JavaScript.

Проблема 3. Настраиваемая обработка подключаемых модулей с помощью общей переменной

Симптомы

  • Создание и обновление операций с таблицами "Возможность", "Цитата", "Заказ" и "Счет" активируют обновления в родительских таблицах.
  • Получение сведений о возможностях, кавычках, заказах и счетах внутренне активирует службу вычислений цен, которая впоследствии активирует пользовательские подключаемые модули, созданные клиентами.

Решение

Пользовательские подключаемые модули выполняют операции создания, обновления и сохранения операций с таблицами "Возможность", "Цитата", "Заказ" и "Счет". Операции создания и обновления этих таблиц внутренне активируют службу вычислений цен, которая затем обновляет связанные с ценами поля или атрибуты их родительских таблиц.

Вы можете определить или дифференцировать любые обновления в таблицах "Возможность", "Цитата", "Заказ" или "Счет", используя внутреннюю службу вычислений цен или используя собственный подключаемый модуль. Логическая общая переменная InternalSystemPriceCalculationEvent, доступная через IPluginExecutionContextкоторую доступна, доступна в коде подключаемого модуля. Любое событие создания или обновления, обрабатываемое с помощью службы вычислений цен, задает значение переменной InternalSystemPriceCalculationEvent true. Значение InternalSystemPriceCalculationEvent по умолчанию — false. Вы можете получить доступ к этой переменной из пользовательского кода подключаемого модуля, чтобы управлять потоком существующей бизнес-логики.

Примечание.

Чтобы выполнить пользовательские операции подключаемых модулей с помощью общей переменной, убедитесь, что служба вычислений цен отключена.

Пример кода

public void Execute(IServiceProvider serviceProvider)
{
   // Obtain the tracing service
   ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

   // Obtain the execution context from the service provider.  
    IPluginExecutionContext executionContext = (IPluginExecutionContext)
    serviceProvider.GetService(typeof(IPluginExecutionContext))
    bool isInternalSystemPriceCalculationEvent = false;

    //Check existence of shared variable and fetch the value from executionContext
    if (executionContext.ParentContext != null && executionContext.ParentContext.SharedVariables.ContainsKey("InternalSystemPriceCalculationEvent"))
                    
    {
        isInternalSystemPriceCalculationEvent = (bool)executionContext.ParentContext.SharedVariables["InternalSystemPriceCalculationEvent"];
    }   

    if (isInternalSystemPriceCalculationEvent)
    {
            //TO DO - Add or skip custom business logic
    }

}