lunedì 24 dicembre 2018

Modifica a standard: Pop-up cercare variante.



In tutti i programmi di tipo report è possibile salvarsi delle varianti di lancio che poi possono essere richiamate premendo l'apposita icona.

Per esempio nella lista materiali MM60,

si preme


e si apre una finestra dove è possibile selezionare la variante di lancio da cui popolare i campi di input.


Se però ci sono più di 10 varianti salvate, allora il sistema apre una finestra di ricerca varianti


tra l'altro con precompilato lo username per cui, se si vuole ricercare tra tutte le varianti, si deve:
  • cancellare il nome utente
  • premere l'icona "Eseguire" (il tanto ENTER non funziona!)
per poi ricevere la lista delle varianti e poter selezionare quella desiderata.

Tutto questo è abbastanza seccante poichè l'utente si trova a dover eseguire, magari molte volte al giorno, operazioni che non servono a nulla.

Ho provato a cercare se il limite di 10 si poteva in qualche modo modificare tramite customizing o altro.

Purtroppo questo valore è hard-coded nel codice standard e non c'è modo di poterlo modificare. Francamente lo trovo assurdo anche perchè 10 è un valore molto basso e una lista di selezione, per qualche decina di valori, è comunque molto agevole, ma così è!

Questa la parte di codice coinvolta.

Premendo il tasto di scelta variante viene chiamato il Function Module RS_VARIANT_CATALOG, viene caricata una tabella interna con la lista di tutte le varianti (VARIANT_TABLE) e poi:

  DESCRIBE TABLE VARIANT_TABLE LINES SY-TFILL.
* Sind überhaupt Varianten vorhanden
  IF SY-TFILL EQ 0.
    MESSAGE S260 RAISING NO_VARIANTS.
    EXIT.
  ELSEIF SY-TFILL GT C_VARILIST AND POP_UP EQ 'X'
     and sy-binpt is initial. " and sy-uname ne 'KSCHMIDT'.
    CALL SELECTION-SCREEN 100 STARTING AT 10 10
                          USING SELECTION-SET 'SAP&1'.

Evidenziato in azzurro il punto dove si controlla se esistono più di 10 varianti, C_VARILIST è una costante definita all'interno della LSVARTOP

CONSTANTS: C_PDLIST_WIDTH TYPE I VALUE '24',
           C_VARILIST     TYPE I VALUE '10'.

C'è anche una nota (540779) dove al punto 4 indica esattamente come si dovrebbe modificare:

4. Question: Why does the system display an additional selection dialog box for the variants on the selection screen with the 'Get variant' function?

Answer: As of Release 4. 5, the system does not immediately display the list of variants when there are more than 10 selection screen variants. Instead, the system first displays a dialog box with selection options for the variants and the name of the creator is prefilled with the user name. This is defined in the source code. Therefore, the only way to change this behavior is by modifying the corresponding points in the source code . However, this affects all selection screens in the system.
You can modify one of the two following places:

The number that determines how many variants are displayed in an additional dialog box:
Include LSVARTOP, change value at flagged position, for example, to '9999':
CONSTANTS: C_PDLIST_WIDTH TYPE I VALUE '24',
C_VARILIST TYPE I VALUE '10'. <-----
Hiding the default name in the dialog box:
Include LSVARE01 / AT SELECTION-SCREEN OUTPUT, turn the flagged lines into a comment:
if l_flag_first eq space or l_report ne rsvar-report.
l_flag_first = 'X'.
l_report = rsvar-report.
ename-sign = 'I'. <-----
ename-option = 'EQ'. <-----
ename-low = sy-uname. collect ename. <-----
endif.

Ad ogni modo questa modifica allo standard risponde ai requisiti che mi sono dato io:

  • modifica delimitata in un punto preciso del programma e non "invasiva"
  • molto ben documentata
  • che porta benefici significativi alla funzionalità
  • che, se disattivata, non comporta particolari problemi

soprattutto l'ultimo punto: se anche dovesse andare perduta non c'è praticamente nessun impatto (si torna a dover cercare le varianti se sono più di 10).

Ho quindi deciso di modificare lo standard cambiando la definizione della costante nella include LSVARTOP, ho dovuto richiedere il rilascio della Registration Key per l'oggetto R3TR FUGR SVAR.

Questa la modifica:

CONSTANTS: C_PDLIST_WIDTH TYPE I VALUE '24',
*{   REPLACE                                        1
*\           C_VARILIST     TYPE I VALUE '10'.
* F.G. 18/12/2018: Aumento numero massimo varianti prima di aprire la
* pop-up "Find Variant" (vedi punto 4 nota 540779).
           C_VARILIST     TYPE I VALUE '99'.
*}   REPLACE

Nessun commento:

Posta un commento