Solución de problemas comunes con varias tablas
Este artículo le ayuda a solucionar problemas comunes en varias tablas, como oportunidad, presupuesto, pedido o factura en Microsoft Dynamics 365 Sales.
Problema 1: En el formulario de contexto puede aparecer en el selector de formulario
El formulario en contexto se usa para mostrar y personalizar el panel lateral en el administrador de ofertas y en la nueva interfaz para contactos, oportunidades, clientes potenciales y cuentas.
Causa
Si el entorno tiene alguna personalización que establece formActivationState en Activo para estas tablas, el formulario en contexto aparece en la lista desplegable del selector de formularios y permite a los usuarios seleccionar este formulario para ver los detalles del registro.
Solución
Si la apariencia de In Context Form provoca confusión, puede desactivar el formulario En contexto , como se muestra en la captura de pantalla siguiente.
Problema 2: error o comportamiento inesperado al trabajar en tablas
Síntomas
Mientras trabaja en tablas (como oportunidades, presupuesto, pedido, factura, producto de oferta y producto de pedido), observa un comportamiento inesperado o un error en Dynamics 365 para Ventas. A continuación se muestran algunos de los errores que se pueden encontrar al trabajar en oportunidades y pueden aplicarse a otras tablas:
- "La cantidad extendida es incorrecta después de revisar la oferta": este error podría producirse debido a un complemento personalizado.
- "Error al guardar la oportunidad": este error puede producirse debido a JavaScript personalizado.
- "Error mientras se cierra la oportunidad": este error puede producirse debido a un flujo de trabajo personalizado.
Causa
Estos problemas pueden producirse debido a una personalización incorrecta de la aplicación.
Solución
Debe comprobar las personalizaciones incorrectas y resolverlas. Realice los métodos de comprobación siguientes para identificar qué personalización está causando el problema y, a continuación, resuelva:
- Desactivación de un complemento personalizado
- Deshabilitar JavaScript personalizado
- Desactivación de un proceso de flujo de trabajo personalizado
Desactivación de un complemento personalizado
Vaya aPersonalizaciones>de configuración>Personalización del sistema.
Seleccione Pasos de procesamiento de mensajes del SDK.
Se muestra una lista de los pasos de procesamiento de mensajes del SDK disponibles.
Seleccione el icono Filtro , seleccione la columna Código de tipo de objeto principal (filtro de mensajes del SDK) y, a continuación, seleccione la tabla para la que se está produciendo el error.
Seleccione los pasos de procesamiento de mensajes del SDK que proceden de las soluciones de su propiedad.
Nota:
Para ver los pasos personalizados de procesamiento de mensajes del SDK:
Vaya a Soluciones de configuración> y abra la solución.
Seleccione Pasos de procesamiento de mensajes del SDK. Compruebe que los valores están seleccionados de la siguiente manera: Component Type to SDK Message Processing Step (Paso de procesamiento de mensajes del tipo de componente a SDK) y View to All (Ver a todo).
Seleccione Desactivar.
Publique las personalizaciones.
Compruebe el problema y, si no se produce, el problema se produce con los pasos personalizados de procesamiento de mensajes del SDK. Resuelva el problema.
Nota:
Si se produce el problema, active los pasos de procesamiento de mensajes del SDK que ha desactivado ahora e intente deshabilitar JavaScript personalizado o desactivar un proceso de flujo de trabajo personalizado.
Deshabilitar JavaScript personalizado
Abra el editor de formularios de la tabla en la que se produce el error. En este ejemplo, vamos a seleccionar la tabla como Oportunidades y el formulario de solución predeterminado.
Seleccione Propiedades del formulario en el editor de formularios.
Se abre el cuadro de diálogo Propiedades del formulario .
En la pestaña Eventos , seleccione el control OnLoad en la lista desplegable Eventos .
Elija los archivos de JavaScript personalizados que proceden de la solución que le pertenece.
Nota:
Para ver el JavaScript personalizado:
- Vaya a Soluciones de configuración> y abra la solución.
- Seleccione WebResources. Compruebe que los valores están seleccionados como: Tipo de componente a WebResources y Ver a todo.
- Seleccione Icono de filtro para habilitar las opciones de filtro para las columnas. Seleccione Tipo y establezca el filtro como Script (JScript).
Seleccione Editar. En este ejemplo, hemos seleccionado el archivo JavaScript personalizado eg_opportunity editar.
Desactive la opción Habilitado y seleccione Aceptar.
Publique las personalizaciones.
Compruebe el problema y, si no se produce, el problema es con el JavaScript personalizado. Resuelva el problema.
Nota:
Si se produce el problema, habilite el JavaScript que deshabilitó ahora e intente desactivar un complemento personalizado o desactivar un proceso de flujo de trabajo personalizado.
Desactivación de un proceso de flujo de trabajo personalizado
Vaya aPersonalizaciones>de configuración>Personalización del sistema.
Seleccione Procesos. Estos procesos incluyen flujo de trabajo, flujo de proceso de negocio y regla de negocios.
Se muestra una lista de los procesos disponibles.
Seleccione el icono Filtro , seleccione la columna Entidad principal y, a continuación, seleccione la tabla para la que se está produciendo el error.
Elija los procesos que proceden de las soluciones que le pertenecen.
Nota:
Para ver los procesos personalizados:
- Vaya a Soluciones de configuración> y abra la solución.
- Seleccione Procesos. Compruebe que los valores están seleccionados como: Tipo de componente a procesos y Ver a todo.
Seleccione Desactivar.
Publique las personalizaciones.
Compruebe el problema y, si no se produce, el problema es con los procesos personalizados. Resuelva el problema.
Nota:
Si se produce el problema, active los procesos que desactivó ahora e intente desactivar un complemento personalizado o Deshabilitar JavaScript personalizado.
Problema 3: control de complementos personalizado mediante una variable compartida
Síntomas
- Las operaciones de creación y actualización en las tablas Oportunidad, Presupuesto, Pedido y Factura desencadenan actualizaciones en sus tablas primarias.
- La recuperación de detalles sobre las tablas Oportunidad, Cotización, Pedido y Factura desencadena internamente el servicio Cálculo de precios, que posteriormente desencadena complementos personalizados creados por los clientes.
Solución
Los complementos personalizados ejecutan operaciones de creación, actualización y guardado en las tablas Oportunidad, Presupuesto, Pedido y Factura. Las operaciones de creación y actualización de estas tablas desencadenan internamente el servicio Cálculo de precios, que luego actualiza los campos o atributos relacionados con el precio asociados de sus tablas primarias.
Puede identificar o diferenciar las actualizaciones de las tablas Oportunidad, Presupuesto, Pedido o Factura o las tablas primarias oportunidad, oferta, pedido o factura mediante el servicio de cálculo de precios interno o mediante su propio complemento personalizado. La variable InternalSystemPriceCalculationEvent
compartida booleana , a la que se puede acceder a través IPluginExecutionContext
de , está disponible en el código del complemento. Cualquier evento de creación o actualización procesado mediante el servicio Cálculo de precios establecerá el valor de la variable InternalSystemPriceCalculationEvent
en true
. El valor predeterminado de InternalSystemPriceCalculationEvent
es false
. Puede acceder a esta variable desde el código de complemento personalizado para controlar el flujo de la lógica de negocios existente.
Nota:
Para realizar operaciones de complemento personalizadas mediante una variable compartida, asegúrese de que el servicio de cálculo de precios de fábrica está deshabilitado.
Código de ejemplo
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
}
}