Resumen
Entorno: desde la versión 11.
En este documento es una breve guía para adaptar un fichero EDI (de importación) donde viene un campo no previsto en la funcionalidad estándar y queremos incorporarlo a Sage X3.
Por ejemplo, se recibe en una posición determinada del fichero CABPED.txt un código de 5 caracteres correspondiente al Departamento de Compra. Dicho código se quiere guardar en un campo llamado YDEPARTAMENT dentro de la Tabla SORDER. Además, este campo antes de introducirse en Sage X3 es necesario tratarlo de tal forma que se incorporará de esta forma: [dos primeros caracteres del código de Departamento de Compra] + “_” + [dos primeros caracteres de la Sociedad].
Con este ejemplo de modificación de una Representación dentro del módulo EDI, nos sirve para explicar mejor la creación de específicos en la nueva programación de Sage X3 con Clases y Representaciones. En concreto se creará una nueva Propiedad dentro de la Clase EDISORDER y la Representación EDISOHEM, que se utilizan en Importaciones EDI.
Resolución
Previamente se tiene que introducir un campo nuevo en la Tabla SORDER y en la Pantalla SOH0. En este caso se trata de un alfanumérico de 5 caracteres que representará el Departamento de compra.
Además, se ha creado una copia del modelo de importación EDISOH llamada YEDISOH con la modificación correspondiente. Estas modificaciones deben llevar asociado su código de actividad.
1º Paso: Creación de la nueva Propiedad en la Clase
Dentro de Desarrollo>Diccionario datos>Clases>Clases se modificará la Clase EDISORDER (asociada a la tabla SORDER) añadiéndose una Propiedad nueva llamada YDEPARTAMENT. Se le asocia el código de actividad creado para ello (debe empezar por Y o Z).
Se registra y valida la Clase.
2º Paso: Creación de la nueva Propiedad en la Representación
Se añadirá la nueva Propiedad en la Representación EDISOHEM (Desarrollo>Diccionario datos>Clases>Representaciones), en el bloque “Propiedades Expuestas”. No hará falta añadirlo en el bloque “Propiedades” ya que viene directamente de la Clase madre. No olvidar indicar el Código de actividad.
Importante: poner en la columna “EDIT” el valor a SI.
Finalmente se valida la Representación.
3º Paso: Creación/Duplicación de nuevo Mapeo de Mensajes
Al cambiar el modelo de importación añadiendo un nuevo campo, se tiene que crear un nuevo Mapeo de Mensajes (EDI>Parametrización EDI>Definición de flujos>Mapeo de mensajes). Se puede duplicar del estándar SOHEDICOM; en este caso, se llamará SOHEDICOM1 y tendrá asociado el Modelo de importación YEDISOH (antes creado).
·
4º Paso: Creación/Duplicación del Fichero secuencial
Se crea un Fichero secuencial nuevo llamado SOHEDICOM1 (duplicando del estándar), asociado al mapeo de mensaje creado en el punto anterior. En este caso* se utilizará un espacio que ahora mismo tiene valor BLANK, para indicar en qué posición EDICOM envía la información (Departamento).
*Es posible no reutilizar y crear una nueva posición, tal y como se indique en EDICOM.
Para el ejemplo, se usará la posición 198 en el fichero CABPED.txt en el que se indica el Departamento de Compra.
Una vez se termine de introducir se registrará todo.
·
5º Paso: Modificación del Flujo estándar SOHEDICOM
En este paso, se puede modificar el flujo estándar existente, indicando el nuevo Fichero secuencial o crear uno nuevo, duplicándolo. Se activará y validará al final dando un uuid.
·
6º Paso: Creación del script EDISOHEM_RSTD específico
Este será el último paso. Al ser un campo existente en la Clase, se introducirá en la Pantalla a través de un Modelo de importación, llamando al final al Objeto; por tanto, no habría que realizar ninguna adaptación más (este punto se ignoraría). El nuevo campo se introduciría en Sage X3 como valor de la nueva Propiedad YDEPARTEMENT de la Clase.
Pero en el ejemplo que se está trabajando, es necesario tratar el campo que viene de EDICOM, y es necesario realizar un proceso específico. Otros ejemplos de creación de un script específico serían:
utilización de una Tabla de Transcodificación
búsqueda del valor de una tabla secundaria
la Propiedad no pertenezca a la Clase y que se haya creado sólo en la Representación
Según las buenas prácticas de programación de Sage X3 y teniendo en cuenta la política de no modificación del script estándar, se procederá en este punto a la creación de un nuevo proceso asociado a la Representación llamado EDISOHEM1_RSPE.
El nuevo script se deberá indicar en la Representación en el apartado “Scripts”, registrando y validando después todo.
*Sage X3 lo primero que hará es ejecutar el script estándar y después el específico.
Esto creará un fichero esqueleto EDISOHEM1_RSPE.src y su compilado adx con una estructura modelo vacía. Con el modelo de base EDISOHEM_RSTD mostrado a continuación, se tendrá que programar la parte de $EDICOM_RECEIPT. El proceso EDISOHEM_RSTD puede solicitarse al servicio de soporte local con el objeto de lectura pero no se permite la modificación del mismo.
# Clase EDISOHEM
#**
#* Label for coding event of CRUD
#* @param CURPTH Local Char(250), contains the class path
#* @param AEVENT Local Char(20), contains the event code
#* @return ASTATUS Local Integer
#*!
$EVENTS
Case [L]CURPTH
When ""
Case [L]AEVENT
When "AREAD_AFTER" : Gosub AREAD_AFTER
Endcase
Endcase
Return
#**
#* Label for coding action on INIT, GET, CONTROL and PROPAGATE
#* @param CURPRO Local Char(50), contains the property code
#* @param ARULE Local Char(20), contains the action code requested
#* @return ASTATUS Local Integer
#*!
$PROPERTIES
#Case [L]CURPRO
# Case [L]ARULE
# Endcase
#Endcase
Return
#**
#* Label for coding your methods
#* @param AMETHOD Local Char(20), contains the method code
#* @return ARET_VALUE (the type of the return value is declared in the method)
#*!
$METHODS
Case [L]AMETHOD
When "MET_AFTER_LOAD_REPRESENTATION" : Gosub MET_AFTER_LOAD_REPRESENTATION
Endcase
Return
####################################################################
$AREAD_AFTER
Gosub GETVALPARAMURL From TRTFUNEDI
Return
#********************************************************************
# Method MET_AFTER_LOAD_REPRESENTATION
#********************************************************************
#
#*
#* @param WCATACT
#* @param WCATCOD
#* @param WPARCOD
#* @param WDUPLICATE
#* @param WTEST
#* @param WSEPDEC #114721
#* @param WERR
#* @return [V]CST_AOK/[V]CST_AERROR
#*!
$MET_AFTER_LOAD_REPRESENTATION
Local Integer I, J
Local Integer WOK : WOK = [V]CST_AOK
Local Integer WSTATUS : WSTATUS = [V]CST_AOK
Case WCATACT
When 1 :
Case WPARCOD
When "EDICOM" : Gosub EDICOM_ISSUE
When Default : WSTATUS = [V]CST_AERROR : WERR = ""
Endcase
When 2 :
Case WPARCOD
When "EDICOM" : Gosub EDICOM_RECEIPT
When Default : WSTATUS = [V]CST_AERROR : WERR = ""
Endcase
Endcase
ARET_VALUE = WSTATUS
Return
################################################################################
$EDICOM_ISSUE
#
Return
################################################################################
$EDICOM_RECEIPT
this.SOH.YDEPARTAMENT = left$(this.SOH.YDEPARTAMENT,2)+"_"+left$(this.SOH.CPY,2)
Return
El resultado final tras la ejecución del proceso EDIRUNREC sería:
Fichero CABPED.txt inicial con Propiedad YDEPARTAMENT con valor XXXXX
Fichero resultante de importación YEDISOH, con la Propiedad tratada en el específico con valor XX_ES
Pedido de venta creado con el campo relleno.