Basado en la documentación oficial: How to Extend a Custom Form Template for Billing Output with Custom Fields
Introducción
En este post vamos a detallar como ampliar un formulario estandar para que contenga un nuevo campo, el caso que se expone como ejemplo es el formulario estándar de documento financiero para añadirle un QR de TicketBAI y asignarlo como formulario por defecto para que se imprima, pero puede extrapolarse a cualquier formulario estandar de SAP S4HANA Cloud.
Info |
---|
Si el objetivo de esta guía es implementar el requerimiento de TicketBAI para el formulario de facturación, es necesario incluir dos campos: el QR y el código TicketBAI. Sin embargo, en esta guía solo se aborda la implementación del QR para simplificar el proceso. Para implementar otros campos hay que repetir los pasos 2, 3 y 4. |
Pasos a seguir
Encontrar el formulario en cuestión y copiarlo.
Para nuestro caso vamos a la aplicación “Change Billing Document” seleccionamos una factura reciente y entramos al detalle. En la pantalla de detalle vamos al menú Goto > Header > Output.
En el caso del ejemplo el formulario es estándar ya que no empieza por Y o Z.
Una vez encontrado el formulario vamos a la aplicación “Maintain Form Template” y copiaremos el formulario.
Le asignaremos el nombre que queramos y guardaremos.
Ampliar la factura con el campo nuevo.
En la aplicación “Custom fields” crearemos un nuevo campo y le pondremos el nombre que queramos usar en nuestro caso QR_TBAI. El contexto empresarial es super importante ya definirá donde puede usarse el campo, en S4HANA, al crear un campo este aplica no solo a una estructura o a una BADI, si no que se habilita para activarse en cualquier , por ejemplo con el contexto “Ventas: Documento de finanzas” podremos activar el campo para que aparezca en CDS, formularios, APIS, BAPIS, emails, etc, todas las relacionadas con el contexto empresarial.
Vamos a activar el campo para que aparezca en nuestro formulario, vamos a la sección “Form Templates” activamos nuestro formulario. (En el caso del pantallazo ya está activado). Es normal que se activen objetos dependientes.
Modificar el Formulario para que se muestre el nuevo campo.
Desde la App “Install Additional Software” descargamos el Adobe® LiveCycle® Designer y lo instalamos en nuestro equipo.
Descargamos el formulario que creamos anteriormente desde la app “Maintain Form Templates” y descomprimimos el ZIP en nuestro equipo.
Abrimos Adobe® LiveCycle® Designer seleccionamos “Open Form” y seleccionamos el XSD que empieza por YY1 que se nos han descargado anteriormente al descomprimir el ZIP. Si aparecen mensajes, aceptar todo.
Para nuestro ejemplo vamos a añadir un QR, así que en el menú “Object Library” de la derecha seleccionamos “QR Code” y arrastramos al lugar del formulario donde queremos que aparezca.
En el caso de normativas como TicketBAI es importante revisar la especificación del requerimiento, ya que debe cumplirse “Ver anexo IV de
View file | ||
---|---|---|
|
Una vez arrastrado el QR al formulario vamos a “bindearlo” con el campo que creamos anteriormente, desde la pantalla Binding, una vez seleccionado con doble click el QR en el formulario, seleccionamos nuestro campo (no el que acaba en F).
TIP: Si queremos que un elemento solo se muestre cuando tenga información debemos hacer lo siguiente:
Con el elemento seleccionado, en la parte superior de la pantalla seleccionamos “Show: Validate” y añadimos el siguiente script.
Bloque de código |
---|
// Hide field if data is not bound or the field value is empty if (this.isNull) then this.presence = "inactive"; endif 1; //returns true for validation |
Guardamos y subimos la plantilla usando la aplicación “Maintain Form Templates”.
Implentar la lógica para que se rellene el campo cuando se genere el formulario.
En la aplicación “Custom logic” para el contexto empresarial “Sales: Billing Document” crear una nueva implementación para el siguiente punto de extensión:
Publicamos y editamos el código para implementar nuestra lógica, en nuestro caso sería recuperar la URL de TicketBAI a través del apunte contable asociado al documento de finanzas, guardar y activar!
Bloque de código | ||
---|---|---|
| ||
* This method can be used to set values for output to billing document header extension fields. * Example: * * First of all assign existing extension field values to output parameter: billingdoc_extension_out = billingdoc_extension_in. billingdocdescr_extension_out = billingdocdescr_extension_in. select single url from /tbai/r_registrotp where companycode = @billingdoc-companycode and accountingdocument = @billingdoc-accountingdocument and fiscalyear = @billingdoc-fiscalyear and estbai = @abap_true into @billingdoc_extension_out-yy1_qr_tbai_bdh. |
Parametrizar el formulario para sea el formulario por defecto.
Este punto es tarea del equipo funcional y varía dependiendo de si el cliente tiene o no el Custom Business Configurator (CBC) activado para el sistema o no, debemos hacer 2 cosas, dar de alta la plantilla en el maestro de plantillas de documentos contables, y luego asignarla para que cuando se determine la plantilla, aparezca la nuestra.
Desde el CBC debemos ir a la actividad “Configure Your Business Processes” (si no está disponible debemos hablar con el equipo funcional para que lo haga) a “Assign Form Templates”.
Puedes probar a acceder directamente usando la siguiente url:
<host>/ui#IMGActivity-execute?IMGActivity=APOC_C_FORMV&CustomizingObject=APOC_C_FORMV&CustomizingObjectType=V&CustomizingProject=&CustomizingTransaction=S_ER9_68000005&Type=SSCUI
Creamos una nueva entrada para nuestra plantilla:
Para que se determine nuestra plantilla, en la aplicación “Output Parameter Determination” buscamos la tabla de “Billing Document” “Form Template” y cambiamos el formulario por defecto para nuestro escenario.
Con esto habremos realizado la ampliación del formulario además de asignarlo como formulario por defecto en nuestro sistema.