Ir al contenido principal

Master/detail pattern management

 

Fuente original: https://en.sagedev.it/sagex3/master-detail-pattern-management/


Sage X3 allow to create the management of a new object practically with only parameterization.

But if tou need to achieve an object with master/detail pattern you must follow a very precise procedure that requires some changes in the specific script.

Suppose we have:

  • header table: YHEAD [YHE]
  • YHEAD table keys (that will be the binding with detail table too):
    • YHEKEY1 alphanumeric
    • YHEKEY2 numeric
  • detail table: YDETAIL [YDE]
  • YDETAIL detail table fields for binding with header table:
    • YDEKEY1 alphanumeric
    • YDEKEY2 numeric
  • object linked to YHEAD table: YHD
  • header screen: YHE1
  • detail lines screen: YDE1

 

Let’s proceed like this:

Object

Open the YTD object (GESAOB function) link to YHEAD header table.
In the Environment tab  insert YDETAIL detail table.

YDETAIL detail table

In the detail table you must declare the following fields:

  • <line key> with type L and size 8
    the name can be of your choice, in this example will be YIDLINE
  • NBLIG with type ABS

Detail screen YDE1

In the detail lines screen you must declare the folllowing fields:

  • UPDFLG with type C, size 4, hidden (it’s a update flag used by system)
  • CREFLG with type C, size 4, hidden (it’s a creation flag used by system)
  • <key line> with type L, size 8, hidden (the system will insert here values multiple of 1000)
    it must match the field declared into detail table: therefore in this example it will be YIDLINE
  • NBLIG: it must be put in the column Parameter of corresponding block (General tab) of YDE1 screen (the detail lines screen)
  • NBLIG field actions to setting:
    • C DIVLINCONT (line insertion cheking)
    • After_line DIVLINNUM (number line assignment)
      these actions have a common LIG parameter LIG that must be valorized with  <line key>, in yhis example YIDLINE(nolign-1)

Attention: in the detail screen the header keys they must not be insertedotherwise in the record they will not be valorized.

 

Specific Code

In the specific script SPEYXX must be reported the following code:

####################################################################
# SAGEDEV.IT
# Code for master/detail pattern management
####################################################################
$ACTION
Case ACTION
 When "OUVRE"            : Gosub OUVRE
 When "FILTRE"           : Gosub FILTRE
 When "SETBOUT"          : Gosub SETBOUT
 When "CREATION"         : Gosub CREATION
 When "APRES_CRE"        : Gosub APRES_CRE
 When "LIENS"            : Gosub LIENS
 When "MODIF"            : Gosub MODIF
 When "APRES_MOD"        : Gosub APRES_MOD
 When "ANNULE"           : Gosub ANNULE
 When "DEFLIG"           : Gosub DEFLIG
 When "INICRE_LIG"       : Gosub INI_LIG    
 When "INIMOD_LIG"       : Gosub INI_LIG    
 When Default
Endcase
Return
####################################################################
$OUVRE
Gosub DECLARE From TABLEAUX
Return
####################################################################
$FILTRE
Default File [YHE] # Header table abbreviation
Return
####################################################################
$SETBOUT
If GREP = ""
    CHAINE+="A"
Else
    Call VIREBOUT(CHAINE,"A") From GOBJET  
Endif
Return
####################################################################
$CREATION
Gosub CREATION From TABLEAUX
If GOK < 1  Return  Endif
Return
#################################################################### 
$APRES_CRE 
# Reload of indicators UPDFLG and CREFLG 
Gosub LIENS From TABLEAUX 
Return
####################################################################
$LIENS
# lines table loading
Gosub LIENS From TABLEAUX

#at this point all LIENS_LIG events are elaborated yet
Return
####################################################################
$LIENS_LIG
        # event that trigger at loading of every line
	# let's insert here eventual call on fields
	#Call AM_YCAMPO1([M:YDE1]YCAMPO1(nolign-1))
Return
####################################################################
$MODIF
Gosub MODIF From TABLEAUX
If GOK < 1  Return  Endif
Return
#################################################################### 
$APRES_MOD 
# Reload of indicators UPDFLG and CREFLG
Gosub LIENS From TABLEAUX 
Return 
###############################################################
$ANNULE
Gosub ANNULE From TABLEAUX : # Erasing of lines
If GOK < 1  Return  Endif
Return
###############################################################
$DEFLIG
# Definition of the various detail elements  
Default Mask [YDE1]   # Detail screen abbreviation
Default File [YDE]    # Detail table abbreviation
FICLIG = "YDETAIL"    # Detail table name
ABLIG  = "YDE"        # Detail table name abbreviation
ZONLIG = "YIDLINE"    # field name of number line (key)

# CRIT variable must contain the criteria to bind detail table with header table 
# with this format (attention to apexes, with numbers they do not serve): 
#
# detail table field name = [M:header screen]header field name 
#
# with an alphanumeric field, apexes must be used,in our example like this:
# "YDEKEY1 = '"+[M:YTE1]YHEKEY1+"'"
# if the field is numeric the single quotes are not present (using num$()), in our case:
# "YDEKEY2 = "+num$([M:YTE1]YHEKEY2) 
# in case of dates: "' & YDATE1 = ["+num$([M:YHE1]YHEDATE1)+"] & YDATE2 = ["+[M:YHE1]YHEDATE2+"]"    
CRIT   = "YDEKEY1 = '"+[M:YHE1]YHEKEY1+"' & YDEKEY2 = "+num$([M:YHE1]YHEKEY2)

Return

####################################################################
$INI_LIG
    # header values insertion: the header values are copied in the detail fields
    # YDE detail table, YHE header table 
    # attention: here we are working on tables: [F] non [M]
    [F:YDE]YDEKEY1 = [F:YHE]YHEKEY1
    [F:YDE]YDEKEY2 = [F:YHE]YHEKEY2 
Return
####################################################################

I remember that in a master/detail window  using a header field as filter for records is not possible.

Good!
Once you’ve done this all is working!
Don’t forget the validation of tables, screens and window!

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

How to create an additional line text (ACLOB) on purchase orders for internal notes

Sin conexión Kyle Klinger hace 1 día Origen:  https://www.sagecity.com/support_communities/sage_erp_x3/f/sage-x3-general-discussion-forum/143870/how-to-create-an-additional-line-text-aclob-on-purchase-orders-for-internal-notes I was trying to add internal notes to the purchase orders at a line level and was thought I would share a how to.  If you have a better way, please share.     Add column to PORDERQ; YLINTEX2, Type TXC   Save and validate table This is where the ID of the text will be stored at the record level, i.e. POQ~00000007, this is similar to field LINTEX  On screen POH2 Add column YLINTEX2, to Block 1. Most likely you will want this field to be hidden. On column NBLIG add a button action ACLOB2, description "Text internal" This button action will require an action parameter "CODE2", it will not be available until after save. Set the parameter "CODE2" to [M:POH2]YLINTEX2(nolign-2), the field that was just added....

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