Ir al contenido principal

SAGE X3 SILENT IMPORT (IMPORTSIL) WITH ERROR CATCHING

FUENTE ORIGINAL: https://pluginx3.com/en/blog/post/sage-x3-silent-import-importsil-with-error-catching.html


You already know how to manually generate a CSV file in order to import it threw a template in Sage X3.
But If you wonder how to catch detailed errors after a silent import here is the solution.
Sometimes you need to catch the incoming errors in order to alert the end-user regarding an issue.
Closed period, wrong date etc ….
Unfortunalty the standard Sage X3 silent import function doesn’t natively show the detailed errors during the import process.
Call IMPORTSIL([M:IMP2]MODIMP,[M:IMP2]NOMIMP) From GIMPOBJ
And the standard function ERR_IMPORT will only show the overall status of the importation and not the detailed errors.

IMPORTSIL function is pushing all the log data into a tracefile in order to avoid any popup on end-user screen.
So you have a log file available in order to search for errors in it.
Sage X3 runtime is using the same principals standards as any shell for loging informations

0001 = Errors output

0000 = Standard output

Let’s make an example :

1) 4GL Silent import call

    Raz [M:IMP2]

    [M:IMP2]MODIMP = YAOENAME # Import Template Name

    [M:IMP2]NOMIMP = YTMPFILE # File Location and Name

    [M:IMP2]TYPEXP = 2 # Server

 

    Call IMPORTSIL([M:IMP2]MODIMP,[M:IMP2]NOMIMP) From GIMPOBJ

    Call ERR_IMPORT([M:IMP2]STAT, YMESSAGE) From GIMPOBJ

    If [M:IMP2]STAT or GOK < 1 : YRESTA += 1   # Import Error

    Else : YRESTA = 0 : Endif                  # Import Successful

    If !GSERVEUR : Call FERME_TRACE From LECFIC : Endif

2) Log reading

 

    Openi filpath("TRA",GTRACE,"tra",0) Using [YTRA]

 

    Local Char XLINE(100)

    Repeat

      Rdseq XLINE Using [YTRA]

      If left$(XLINE,5)="<0001"                  # This is an error

        Append YMESSAGE(YRESTA), right$(XLINE,6) : YRESTA += 1

        Break

      Elsif find(left$(XLINE,11), "Création de"# This is OK

        [L]Y2_TSKNUM = right$(XLINE,13)

        Append YMESSAGE(YRESTA), [L]Y2_TSKNUM : YRESTA += 1

      Endif

    Until fstat <> 0

    Openi Using [YTRA]

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 ,  ...

Sage X3 Create a new CLOB Text

Here how to create a CLOB text Funprog F_CRELOB ( YABRFIC , YTEXTE ) Value Char YABRFIC Value Char YTEXTE Local Char XXRTFTXT ( 250 ) ( 3 ) XXRTFTXT ( 0 ) = "{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 MS Sans Serif;}}\viewkind4\uc1\pard\f0\fs17 " XXRTFTXT ( 1 ) = YTEXTE XXRTFTXT ( 2 ) = "\par}" Local Char X_RET Local Integer XXOK Local Char XCHAMPLIEN : XCHAMPLIEN = "YYYY" Global Char YYYY : YYYY = YABRFIC Local Clbfile WWCLOB Local Mask ACLOB [ M :ACL ] Setlob WWCLOB With XXRTFTXT [ M :ACL ] CLOB = WWCLOB Call CRE_CLOB_ACL ( XCHAMPLIEN , XXOK ) From TRTX3TEX Close Local Mask [ M :ACL ] X_RET = YYYY Kill YYYY End X_RET