Code: Alles auswählen.
CASE sy-mandt.
WHEN 100.
"Parameter 1 setzen
WHEN 200.
"Paramter 2 setzen.
ENDCASE
Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
hmaxi96
OK, ich verstehe das Argument.Thanatos82 hat geschrieben:Moin,
ich glaube was ADT meinte ist, dass man Variablen leichter systemunabhängig machen kann, indem man für sie einen Parameter auf dem Selektionsbild definiert. Dann kann man sich über die Variante auf dem jeweiligen System den gewünschten Wert dort hinterlegen und muss das ganze nicht fest im Programm verdrahten.
Stell dir nur mal vor das Programm wird in eine andere Systemlandschaft migriert, dann kann es nicht 1:1 genutzt werden, es muss erst jemand den Quelltext anfassen. Und das kann man damit umgehen.
Für richtiges Coding gebe ich dir Recht. Da bleibt wenig anderes übrig als auf die SYSID abzufragen. Aber der Threadersteller will ja nur den Inhalt einer Variablen je nach System ändern. Da ist ADT's Vorschlag doch der bessere finde ich.Unit605 hat geschrieben:OK, ich verstehe das Argument.Thanatos82 hat geschrieben:Moin,
ich glaube was ADT meinte ist, dass man Variablen leichter systemunabhängig machen kann, indem man für sie einen Parameter auf dem Selektionsbild definiert. Dann kann man sich über die Variante auf dem jeweiligen System den gewünschten Wert dort hinterlegen und muss das ganze nicht fest im Programm verdrahten.
Stell dir nur mal vor das Programm wird in eine andere Systemlandschaft migriert, dann kann es nicht 1:1 genutzt werden, es muss erst jemand den Quelltext anfassen. Und das kann man damit umgehen.
Bei mir was es, wenn es mal zur Abfrage des Systems via SY-SYSID kam, aber immer so, dass genau fuer dieses eine System extra Coding eingefuegt/geandert wurde.
D.h., das Coding, das gerade fuer diese exakte System eingefuegt wurde, wuerde sowieso in keiner anderen Systemlandschaft einen Sinn ergeben und soll dort auch nirgendwo durchlaufen werden.
Code: Alles auswählen.
CASE sy-sysid.
WHEN 'C01'.
p_logname = 'Z_RLPLAT00_DEV'.
WHEN 'CQ1'.
p_logname = 'Z_RLPLAT00_QUAL'.
WHEN 'C02'.
p_logname = 'Z_RLPLAT00'.
When others.
clear p_logname.
message 'Programm fuer dieses System nicht geeignet' type 'E'.
" Programm abbrechen, nicht ausfuehren lassen.
endcase.
Was waere jetzt genau in diesem konkreten Fall die konkrete Loesung von a-dead-trousers?Kleine Empfehlung:
Eine Mandanten/System-Abfrage im Code ist NIE gut!
Besser ist es, dafür immer eine Tabelle oder irgendeine andere Form von Konfigurationsmöglichkeit vorzusehen.
Bei einem Report und wenn man nicht eine eigene Tabelle anlegen möchte, könnte man sich zum Beispiel mit unterschiedlichen Varianten je System behelfen.
Eine saubere Lösung wäre eine Paramter-Customizingtabelle z.B. ZMYPARAMETERS mit den Feldern: MANDT, PARAMETER, SYSID, VALUE.Unit605 hat geschrieben: Was waere jetzt genau in diesem konkreten Fall die konkrete Loesung von a-dead-trousers?
Wuerde mich wirklich interessieren.
Code: Alles auswählen.
METHOD get_parameter.
DATA lv_sysid TYPE sysysid.
CLEAR: rv_value, lv_sysid.
SELECT SINGLE value INTO rv_value
FROM zmyparameters
WHERE parameter = iv_param
AND sysid = sy-sysid.
IF sy-subrc <> 0. "no specific parameter for sid
SELECT SINGLE value INTO rv_value
FROM zmyparameters
WHERE parameter = iv_param
AND sysid = lv_sysid.
ENDIF.
ENDMETHOD.
Code: Alles auswählen.
CONSTANTS gc_param_logname TYPE zmyparameters-parameter VALUE 'LOGNAME'.
p_logname = zmyclass=>get_parameter( gc_param_logname ).
Da von INITIALIZATION die Rede war, nehme ich einen Report an.Unit605 hat geschrieben: Dann kam die Aussage von a-dead-trousersWas waere jetzt genau in diesem konkreten Fall die konkrete Loesung von a-dead-trousers?Kleine Empfehlung:
Eine Mandanten/System-Abfrage im Code ist NIE gut!
Besser ist es, dafür immer eine Tabelle oder irgendeine andere Form von Konfigurationsmöglichkeit vorzusehen.
Bei einem Report und wenn man nicht eine eigene Tabelle anlegen möchte, könnte man sich zum Beispiel mit unterschiedlichen Varianten je System behelfen.
Wuerde mich wirklich interessieren.