Saltar al contenido

Codeunit de acción de ejemplo

La codeunit 5138156 "SIM_DPS Sample CU" muestra cómo una codeunit de Business Central puede proporcionar lógica de acción personalizada a Business Portals. El ejemplo utiliza SIM_DPS OL como tabla de origen y cubre el descubrimiento de funciones, la ejecución de acciones, los eventos del frontend y la navegación a registros de origen o recién creados.

Esta codeunit es una implementación de referencia. Copie los patrones necesarios en una codeunit específica del cliente y sustituya la lógica de ventas, los mensajes, los códigos de campos de entrada y los cálculos por los requisitos de la solución.

Funciones disponibles

Cuando Business Portals ejecuta la codeunit sin contexto de acción, OnRun utiliza GETFUNCTIONS y devuelve en Rec."Function List" los siguientes valores separados por comas:

Función Finalidad
MakeOrderFromQuote Actualiza las líneas de la oferta con la entrada del portal y convierte la oferta de venta en un pedido.
MakeOrderFromItem Crea un pedido de venta con una línea para el producto seleccionado.
MakeQuoteFromItem Crea una oferta de venta con una línea para el producto seleccionado.

Estos valores pueden seleccionarse como parámetros cuando la codeunit se asigna a una acción o a un estado de proceso.

AL
'GETFUNCTIONS':
    Rec."Function List" := 'MakeOrderFromQuote,MakeOrderFromItem,MakeQuoteFromItem';

Flujo de ejecución

El trigger OnRun distribuye todas las llamadas a la codeunit.

  1. Para una llamada de acción normal, lee la acción de la tabla del conjunto de datos y su configuración. Una acción de proceso obtiene el parámetro del estado siguiente; los demás tipos lo obtienen de la acción.
  2. Para una subfunción, lee la acción asignada a la tabla de cabecera y añade un sufijo derivado de Rec."Sub Function Execute".
  3. El valor resultante se procesa en la instrucción case final.
Sub Function Execute Sufijo Uso previsto
SAVE Save Lógica personalizada de guardado.
CHECK Check Validación previa a la ejecución.
EVENT Event Procesar un evento del frontend y devolver datos.
HASEVENT HasEvent Indicar al frontend si el evento está implementado.
OPENDOCPAGE OpenDocPage Abrir el registro representado por la fila.
OPENNEWPAGE OpenNewPage Abrir el registro creado por la acción.
BASKETCHECK BasketCheck Validar una operación de cesta.

Por ejemplo, MakeOrderFromQuote y EVENT producen MakeOrderFromQuoteEvent.

Solo contienen lógica estos controladores:

  • MakeOrderFromQuoteEvent
  • MakeOrderFromQuoteHasEvent
  • MakeOrderFromQuoteOpenDocPage
  • MakeOrderFromQuoteOpenNewPage
  • MakeOrderFromItemOpenDocPage
  • MakeOrderFromItemOpenNewPage
  • MakeQuoteFromItemOpenDocPage
  • MakeQuoteFromItemOpenNewPage

Las ramas Save, Check y BasketCheck, junto con los eventos de las funciones basadas en productos, son marcadores de posición.

Ejemplos de documentos de venta

Convertir una oferta en pedido

MakeOrderFromQuote recibe el registro actual mediante un RecordRef. Busca las líneas asociadas en SIM_DPS OL, lee QUANTITY y actualiza las líneas de venta. Una cantidad vacía utiliza 1.

Después:

  1. Ejecuta la comprobación estándar de aprobación.
  2. Solicita confirmación si existe interfaz de usuario.
  3. Ejecuta la codeunit estándar Sales-Quote to Order.
  4. Copia el número de pedido de Business Portals en Your Reference.
  5. Guarda el identificador del nuevo registro y el identificador de página del pedido.

Crear un pedido o una oferta desde un producto

MakeOrderFromItem y MakeQuoteFromItem utilizan el producto seleccionado y el número de negocio asignado al pedido del portal. Cada procedimiento crea una cabecera y una línea, lee QUANTITY y utiliza 1 si está vacío.

Para acciones de proceso, el vínculo al documento se guarda en SIM_DPS OL Status; para otros tipos, directamente en SIM_DPS OL.

Eventos del frontend

Evento Comportamiento del ejemplo
SELECTLINE Devuelve los identificadores de las líneas del mismo documento con la misma cantidad.
UNSELECTLINE Devuelve el mismo grupo para que el frontend elimine la selección.
INPUTLINE Lee QUANTITY, BRUTTO, NETTO y PRICE y devuelve valores calculados.

MakeOrderFromQuoteHasEvent establece Sub Function Has Event en true para los tres eventos.

El controlador lee XML del BLOB Sub Function Event Data, toma EVENTVALUE de ROOT/EVENT y escribe la respuesta UTF-8 en Sub Function Event Return.

El cálculo de INPUTLINE es ilustrativo:

  • PRICE es la cantidad multiplicada por el precio unitario.
  • BRUTTO es la cantidad multiplicada por 10.
  • NETTO es la cantidad multiplicada por 5.
  • Las entradas numéricas vacías se tratan como cero.

Consulte Evento de selección de línea, Evento de anulación de selección y Evento de entrada de línea.

Abrir páginas de Business Central

OpenDocPage abre el registro indicado por Dataset Table Record utilizando la página configurada. OpenNewPage abre el registro creado: las acciones de proceso leen los identificadores de SIM_DPS OL Status y las demás de SIM_DPS OL.

Esto requiere una interfaz de Business Central y no es adecuado para sesiones en segundo plano ni servicios web.

Consideraciones de implementación

  • Mantenga TableNo = "SIM_DPS OL"; Business Portals pasa el contexto mediante Rec.
  • Añada cada función seleccionable a GETFUNCTIONS y al distribuidor.
  • Respete exactamente la convención de parámetro base más sufijo.
  • Valide todos los registros requeridos; varios lookups omiten deliberadamente el control de errores.
  • Sustituya mensajes, códigos y multiplicadores BRUTTO/NETTO codificados.
  • Utilice etiquetas localizadas para textos visibles.
  • Revise el límite de transacción introducido por Commit.
  • Devuelva solo los registros necesarios cuando puedan coincidir muchas líneas.

Resumen de configuración

  1. Cree o seleccione las tablas del conjunto de datos.
  2. Cree una acción o estado de proceso y asigne la codeunit.
  3. Seleccione un parámetro devuelto por GETFUNCTIONS.
  4. Asigne la acción a la tabla necesaria.
  5. Configure códigos de entrada, identificadores de página y eventos.
  6. Pruebe la ejecución normal, subfunciones, estados, acceso entre empresas y ejecución sin interfaz.