📋 Effortless Copy Actions: From Business Central to Clipboard 📎

📋 Copias sencillas: desde Business Central al portapapeles 📎

Si alguna vez has necesitado compartir rápidamente información de clientes o proveedores con un compañero por correo electrónico, Teams o WhatsApp, o copiar ciertos detalles de una transacción. En esta publicación intento ofrecer una solución práctica para copiar información estructurada de Business Central directamente al portapapeles, formateada y lista para pegar donde se necesite.

La solución intenta seguir una arquitectura modular que separa las responsabilidades y maximiza la reutilización:

  • Capa de Business Central AL: Las extensiones de página capturan las acciones del usuario que permiten formatear los datos de la entidad en texto de dos columnas.
  • Motor de visualización: La página auxiliar muestra el contenido formateado en un cuadro de diálogo estándar con títulos dinámicos.
  • Capa de complementos de control (Add-In): WebPageViewer renderiza HTML con áreas de texto, botones y controladores de eventos de JavaScript.
  • Ejecución de JavaScript: Ejecuta document.execCommand('copy') para copiar el contenido al portapapeles del sistema con retroalimentación visual.

Este framework permite:

  • Separación de responsabilidades: Cada entidad (Cliente, Proveedor, Asiento contable) tiene su propia CU dedicada.
  • Interfaz de usuario dinámica: Una única página auxiliar con títulos y contenido dinámicos.
  • Estándares web modernos: Utiliza System.Integration.WebPageViewer con la API de portapapeles de JavaScript.

Ejemplo: Navegamos a la página de Lista de clientes, Lista de proveedores o Movimientos de clientes. Seleccionamos un registro y encontramos la nueva acción «Copiar información de contacto» en el menú.

Se abre la siguiente página que muestra la información formateada en dos columnas organizadas. Puedes darle clic a cualquiera de los botones «Copiar» para copiar el contenido de esa columna al portapapeles.

La información copiada ya está lista para pegarse en cualquier aplicación: correo electrónico, Teams, WhatsApp o cualquier editor de texto. El formato se conserva y está lista para compartirse con los compañeros.

Aquí tenemos otro ejemplo, desde la página de movimientos de clientes, y copiamos la información de una transacción. La columna izquierda muestra los detalles de la transacción mientras que la columna derecha muestra la información completa del cliente.

La solución se compone:

  • GDRGClipboardMgtCust.Codeunit.al – Lógica de formateo de información de clientes.
  • GDRGClipboardMgtVend.Codeunit.al – Lógica de formateo de información de proveedores.
  • GDRGClipboardMgtCustLedg.Codeunit.al – Lógica de formateo de movimientos de clientes.
  • GDRGCustomerListExt.PageExt.al – Extensión de Customer List con acción «Copy Contact Info».
  • GDRGVendorListExt.PageExt.al – Extensión de Vendor List con acción «Copy Vendor Info».
  • GDRGCustLedgerEntries.PageExt.al – Extensión de Customer Ledger Entries con acción «Copy Entry Info».
  • GDRGClipboardHelper.Page.al – Página de diálogo con WebPageViewer y dos columnas.
  • GDRGClipboard.PermissionSet.al – Permisos de seguridad.

Espero que esta extensión te ayude a ahorrar tiempo en tu trabajo diario con Business Central.


📋 Effortless Copy Actions: From Business Central to Clipboard 📎

If you’ve ever needed to quickly share customer or supplier information with a colleague via email, Teams, or WhatsApp, or copy specific transaction details, this post offers a practical solution for copying structured information from Business Central directly to the clipboard, formatted and ready to paste wherever needed.

The solution attempts to follow a modular architecture that separates responsibilities and maximizes reuse:

  • Business Central AL Layer: Page extensions capture user actions that allow entity data to be formatted into two-column text.
  • Display Engine: The helper page displays the formatted content in a standard dialog box with dynamic titles.
  • Control Add-In Layer: WebPageViewer renders HTML with text areas, buttons, and JavaScript event handlers.
  • JavaScript Execution: Executes document.execCommand(‘copy’) to copy the content to the system clipboard with visual feedback.

This framework allows:

  • Separation of responsibilities: Each entity (Customer, Vendor, Journal Entry) has its own dedicated Codeunit.
  • Dynamic user interface: A single helper page with dynamic titles and content.
  • Modern web standards: Uses System.Integration.WebPageViewer with the JavaScript clipboard API.

Example: We navigate to the Customer List, Vendor List, or Customer Ledger Entries page. We select a record and find the new «Copy Contact Information» action in the menu.

The next page opens, displaying the information formatted in two organized columns. You can click either of the «Copy» buttons to copy the contents of that column to the clipboard.

The copied information is now ready to be pasted into any application: email, Teams, WhatsApp, or any text editor. The formatting is preserved and it’s ready to be shared with colleagues.

Here’s another example, taken from the customer ledger entry page. We’ve copied information from a transaction. The left column shows the transaction details, while the right column displays the complete customer information.

The solution is composed of these objects:

  • GDRGClipboardMgtCust.Codeunit.al – Customer information formatting logic.
  • GDRGClipboardMgtVend.Codeunit.al – Vendor information formatting logic.
  • GDRGClipboardMgtCustLedg.Codeunit.al – Customer ledger entry formatting logic.
  • GDRGCustomerListExt.PageExt.al – Customer List extension with «Copy Contact Info» action.
  • GDRGVendorListExt.PageExt.al – Vendor List extension with «Copy Vendor Info» action.
  • GDRGCustLedgerEntries.PageExt.al – Customer Ledger Entries extension with «Copy Entry Info» action.
  • GDRGClipboardHelper.Page.al – Dialog page with WebPageViewer and two-column layout.
  • GDRGClipboard.PermissionSet.al – Security permissions.

I hope this extension helps you save time in your daily work with Business Central.


Más información / More information:

Deja un comentario