Ir al contenido principal

Creación nueva Propiedad módulo EDI (Importación)

 

Fuente original: SAGE
https://soporte.es.sage.com/selfservice/viewdocument.do?noCount=true&externalId=106267&sliceId=1&noCount=true&isLoadPublishedVer=&docType=kc&docTypeID=DT_Article&stateId=16322&cmd=displayKC&dialogID=724025&ViewedDocsListHelper=com.kanisa.apps.common.BaseViewedDocsListHelperImpl&openedFromSearchResults=true
Created on 08-06-2020 / Last modified on 08-06-2020

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.

Entradas populares de este blog

Valores de fstat

Fstat fstat  is a numeric status that is returned upon execution of a database operation, a sequential file operation, or a lock instruction. Syntax fstat Examples # MYTABLE is a table with a key called KEY1, that has a unique component called KEYVAL # Create a record in the table MYTABLE with they key value 1 if it doesn't exist Local File MYTABLE [MYT] Read [MYT]KEY1=1 If fstat [MYT]KEYVAL=1 : Write [MYT] If fstat MSG="The key was created in the mean time" Else MSG="Key created" Endif Else MSG="Key already exists" Endif Details fstat  is always set to '0' if the operation is successfully completed, and has a non-null value if there is an error: In a sequential read ( Getseq  and  Rdseq ),  fstat  is set to '1' at the end of the file. On  Lock ,  fstat  is set to '1' if the lock could not be performed. For a database operation ( Read ,  Look ,  Readlock ,  For ,  Write ,  Delete ,  R

3 ways to send a mail from code in Sage X3, with more attachments too

Origen Fuente:  https://en.sagedev.it/sagex3/send-mail-from-code-with-attachments-sage-x3/ Autor:  https://en.sagedev.it/category/sagex3/ In this post I’ll show you how to send a mail from adonix code in Sage X3. The points we will face are: 1) Meladx/Send introduction 2) Sending  through  meladx (the best way for me: at the end with just a single code line you send a mail!) 3) Sending  through  Workflow 4) Sending  through  ENVOI_MAIL(…) From AWRKMEL Sending mail from code in Sage X3: Send vs meladx Sage X3 has two native ways for sending mails. The first way is  meladx  executable file, that you can find in  runtime\bin  directory. The seconde one is Send instruction, that was used to send mail through an application of the client station (for more information on “Send GSERMES”  go here ). The Meladx executable Meladx send messages through SMTP/POP3 protocols by means of the mail  server  specified in the command. When sending is launched by a work

How to upload a file from the client?

You may have a need to upload a file to the server, and in the past you may have used COPSRV routine from ORDSYS. On V6 the limit that this routine had was that, you did not know the file name of the file that is getting transferred to the server, and you had to define the file name for the destination.  But things have changed on newer version. Before we get to the example review online help title "How to manage files in the storage area"  As you noted in the online help, in the new version COPSRV will copy the file to server TMP directory. So in below example I am going to use another routine MOVE from ORDSYS to move the file to my desired location. In this example, I am adding a button to Sales order, for transferring the file. Open  Development, Script dictionary, Windows. Select  OSOH  window. Add a new button.  Save  and  Validate. Open  Setup, Sales, Entry transactions, Orders. Validate  the entry transaction. Now open  Development, Scr