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

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

How to Install and Manage Sage X3 Add-Ins in Microsoft Office

When you enable an add-in, it adds custom commands and new features to Microsoft Office programs that help increase your productivity. In this blog post, we’ll review how to install the Sage X3 Add-In for MS Excel and what to do if your Sage X3 Add-In is missing. Fuente original: https://www.netatwork.com/how-to-install-and-manage-sage-x3-add-ins-in-ms-office/ How to Install the Sage X3 Add-In in Microsoft Excel Go to Administration > Utilities > Installation > Install addins for Office V11 Image:   V12 Image:   It should begin downloading the exe, open the exe Next > Install   Open Excel > File > Options   Select Add–Ins > Manage: COM Add-ins > Go   Check the “Excel AddIn for Sage” > Ok   You are now ready to export Excel-based reports/grids from Sage X3. How to troubleshoot and fix a missing Sage X3 add-in in Microsoft Excel Open the Microsoft Office product where the  Sage X3  add-in is missing. Go to Options: Se...