Fuente origen: https://www.greytrix.com/blogs/sagex3/2012/10/10/call-screens-through-code-in-sage-x3/
Off lately, we have been exploring ways to calling pop up screens in Sage X3. Now let us add one more leaf, though bit more technical, in this series.
Although, calling up screens through action is the more preferred way, however, we came across a situation wherein a single action execution needs to be capable of calling different screens based on the data or type of the parent screen. Let me explain it in the context of the project that I am working on:
I have a developed a Screen say “XSCR0” that can be called from multiple modules viz, Sales, Purchase, Manufacturing etc. Now, there is a button (action) in this screen that again pulls up a another screen that has data (fields) relevant to the Module from which the “XSCR0” has been called. To achieve this functionality, I have created screens that have fields relevant to the modules I am working with. On the button click, I call up the required screen by using the following switch statement:
Case SOURCEMASK
When “Purchase” : Call SHOW_POINFO
When “Sales” : Call SHOW_SOINFO
When Default
Endcase
Now each case will contain following code snip function:
Subprog SHOW_ POINFO
Local Integer A_REPONSE
Global Integer GPRE_VIEW
If dim(A_WINDPREV)<=0 : Local Char A_WINDPREV(30) : Endif
Local Mask XSCR0[XSCR1] Local Inpbox “Windowname” From GFONCTION At A_STAMP With A_WINDPREV Mask [XSCR1] As [SIM_] Boxact [SIM_] Boxinp [SIM_] Using A_REPONSE
#You can also access fields on the pop up screen.
DETAILS = [M:XSCR1]FLD001
#Once the screen is closed.
Close Local Inpbox [SIM_] Close Local Mask [XSCR1] Kill GPRE_VIEW
End
When “Purchase” : Call SHOW_POINFO
When “Sales” : Call SHOW_SOINFO
When Default
Endcase
Now each case will contain following code snip function:
Subprog SHOW_ POINFO
Local Integer A_REPONSE
Global Integer GPRE_VIEW
If dim(A_WINDPREV)<=0 : Local Char A_WINDPREV(30) : Endif
Local Mask XSCR0[XSCR1] Local Inpbox “Windowname” From GFONCTION At A_STAMP With A_WINDPREV Mask [XSCR1] As [SIM_] Boxact [SIM_] Boxinp [SIM_] Using A_REPONSE
#You can also access fields on the pop up screen.
DETAILS = [M:XSCR1]FLD001
#Once the screen is closed.
Close Local Inpbox [SIM_] Close Local Mask [XSCR1] Kill GPRE_VIEW
End
I know this is a bit technical but definitely effective. I am still looking for better “no code” alternative for this scenario but as of now, this gives me what I need. Hope this might be helpful to you as well.