benutzerdefinierter GUI-Status in Plantafel/Terminplanung

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Benutzeroberflächen in SAP®-Systemen.
25 Beiträge • Vorherige Seite 2 von 2 (current)
25 Beiträge Vorherige Seite 2 von 2 (current)

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Eine Instanz von CL_ISH_CORDER habe ich schon über Umwege über eine andere Klasse und Casting geladen. Die steht sauber in LR_CORDER.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
sapdepp hat geschrieben:Diese statische LOAD-Methode ist allerdings Protected. Hmm. :?
Sorry. Du brauchst natürlich die "Factory" dazu CL_ISH_FAC_CORDER=>LOAD.
sapdepp hat geschrieben:Eine Instanz von CL_ISH_CORDER habe ich schon über Umwege über eine andere Klasse und Casting geladen. Die steht sauber in LR_CORDER.
Dann nimm die. Wenn schon alles geladen ist, dann ist das besser. (Wegen der ganzen Environment-Kacke)

Fehlt jetzt noch was oder funktioniert der Ausdruck schon?
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Sorry für die späte Rückmeldung. Muss neben ABAP noch ´ne Menge anderen Mist machen.

Ich habe mal auf die Schnelle mit vorhandener Corder-Instanz das hier gemacht:

Code: Alles auswählen.

    CALL METHOD <lr_planning_grid>->GET_ENVIRONMENT
      RECEIVING
        RR_ENVIRONMENT = lr_env.

    CALL METHOD lr_corder->GET_CORDERID
      RECEIVING
        R_CORDERID = l_cordid.

    CALL METHOD CL_ISH_FAC_CORDER=>LOAD
      EXPORTING
*       I_READ_DB            = 'X'
        I_MANDT              = sy-mandt
        I_CORDERID           = l_cordid
*       IS_N1CORDER          =
        IR_ENVIRONMENT       = lr_env
*       IT_CONNECTED_OBJECTS =
      IMPORTING
        ER_INSTANCE          = lr_corder
        E_RC                 = l_rc
      CHANGING
        CR_ERRORHANDLER      = lr_err.

*    CALL METHOD <lr_prc_order>->PRINT
*      EXPORTING
*        I_PRINTTYPE     = 'PRT_CORD'
*        IR_CORDER       = lr_corder
**       IT_CORDPOS      =
**       IR_ENVIRONMENT  =
**       IR_CONFIG       =
**       IR_LOCK         =
**       I_VCODE         =
**       I_DESTROY       = ON
**       I_NO_DIALOG     = OFF
*      IMPORTING
*        E_RC            = l_rc
*      CHANGING
*        CR_ERRORHANDLER = lr_err.

    IF l_rc = 0.

      REFRESH lt_objects.
      ls_objects-object = lr_corder.
      APPEND ls_objects TO lt_objects.

      CALL METHOD CL_ISHMED_FUNCTIONS=>CALL_CLINICAL_ORDER_PRINT
        EXPORTING
          I_FCODE        = 'PRT_CORD'
          I_EINRI        = '0001'
          I_CALLER       = sy-repid
*         I_SAVE         = 'X'
*         I_COMMIT       = 'X'
*         I_ENQUEUE      = SPACE
*         I_DEQUEUE      = 'X'
          IT_OBJECTS     = lt_objects
*         IT_PARAMETER   =
        IMPORTING
          E_RC           = l_rc
*         E_FUNC_DONE    =
*         E_REFRESH      =
*         ET_EXPVALUES   =
        CHANGING
          C_ERRORHANDLER = lr_err
*         C_ENVIRONMENT  =
*         C_LOCK         =
        .

    ENDIF.
Ich komme bis zum Druckdialog, danach schmiert's mit Dump MESSAGE_TYPE_UNKNOWN ab. Muss ich mir noch anschauen. Nun kapiere ich bloß nicht, weswegen ich überhaupt

Code: Alles auswählen.

    CALL METHOD CL_ISH_FAC_CORDER=>LOAD
      EXPORTING
*       I_READ_DB            = 'X'
        I_MANDT              = sy-mandt
        I_CORDERID           = l_cordid
*       IS_N1CORDER          =
        IR_ENVIRONMENT       = lr_env
*       IT_CONNECTED_OBJECTS =
      IMPORTING
        ER_INSTANCE          = lr_corder
        E_RC                 = l_rc
      CHANGING
        CR_ERRORHANDLER      = lr_err.
mit erneutem Import von lr_corder brauche, wenn ich lr_corder ja schon habe?

Und du schreibst:
Die Methode die du brauchst lautet CL_ISH_PRC_CORDER=>PRINT. Die Instanz dazu gibts aber erst wenn der KLAT geladen wurde.
Für den Ausdruck hab ich auf die schnelle die Methode CL_ISHMED_FUNCTIONS=>CALL_CLINICAL_ORDER_PRINT gefunden.
Ich habe nur die statische Methode verwendet. Falls ich CL_ISH_PRC_CORDER=>PRINT brauche, was leider nur eine Instanzmethode ist, benötige ich vorher ´ne Referenz auf CL_ISH_PRC_CORDER, wie du schon gesagt hast. Da muss ich mir noch eine Methode suchen, die diese Instanz erzeugt. Deswegen meine Frage, ob ich die erste Methode wirklich brauche!?

VG
sapdepp

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
sapdepp hat geschrieben:Deswegen meine Frage, ob ich die erste Methode wirklich brauche!?
Kuckst du hier:
a-dead-trousers hat geschrieben:
sapdepp hat geschrieben:Eine Instanz von CL_ISH_CORDER habe ich schon über Umwege über eine andere Klasse und Casting geladen. Die steht sauber in LR_CORDER.
Dann nimm die. Wenn schon alles geladen ist, dann ist das besser. (Wegen der ganzen Environment-Kacke)
Nimm die CORDER-Instanz die du schon hast und lass das LOAD sein. War nur eine Hilfestellung falls du die Instanz eben noch nicht hast. Wie du an die CL_ISH_PRC_CORDER Instanz rankommst kannst du beispielsweise in der CL_ISHMED_FUNCTIONS=>CALL_CLINICAL_ORDER_PRINT nachschauen. Aber der Einfachheit halber kannst du gleich diese Methode verwenden und dir das mit der CL_ISH_PRC_CORDER schenken.

Meine ganzen Hinweise und Vorschläge zielen immer darauf ab, dass du dir selbst ein Bild machst wie das System aufgebaut ist. Meist sind es nur Tipps wo du mit der Suche nach passendem Coding ansetzen solltest. Für den Druck also CL_ISH_PRC_CORDER=>PRINT. Wenn man auf diese Methode den Verwendungsnachweis macht findet man den Aufruf in CL_ISHMED_FUNCTIONS=>CALL_CLINICAL_ORDER_PRINT. Fehlt nur noch eine Instanz von CL_ISH_CORDER und da war mein Hinweis die LOAD-Methode. Da diese jedoch "protected" ist, einfach nach dem Aufrufer suchen und schon findet sich die CL_ISH_FAC_CORDER=>LOAD. :wink:

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Gruß, ADT,

je mehr ich mich mit dem Thema beschäftige, umso sicherer werde ich. Leider muss ich halt noch viel anderes Zeug machen, was so gar nix mit ABAP OO zu tun hat und was trotzdem viel Zeit kostet.

Ich habe den KLAT-Ausdruck nun hinbekommen. Message-Fehler gefunden. Super Sache jetzt, und das mit wenig Coding. :up:

Den Nutzern wird's gefallen, und zwar so sehr, dass sie sicher gleich mit neuen Ideen kommen werden. :wink: To be continued ...

Ich danke dir wie immer. Und bis demnächst!

LG
sapdepp

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Huhu, ADT,

wie angedroht ...

Es gibt die Klasse CL_ISH_PRC_CORDER mit der Public-Instanz-Methode PRINT, die den KLAT druckt. Ein Parameter der Methode lautet I_NO_DIALOG. Wird er mit 'X' versorgt, so wird die Ausgabegerät-Maske übersprungen, und der Druck geht sofort raus, wenn konfiguriert. Schön. Gibt es so etwas auch für die Druckansicht? Ich will also nicht drucken, aber ohne Zwischenmaske direkt in die Druckansicht.

In der Klasse CALL_CLINICAL_ORDER_PRINT, Methode CALL_CLINICAL_ORDER_PRINT gibt's auch nichts, leider. Und den möglichen XML-Druck will ich nicht, weil die Ansicht ja an Orgmitteln hängt.

VD + vG
sapdepp

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
In der Klasse CALL_CLINICAL_ORDER_PRINT, Methode CALL_CLINICAL_ORDER_PRINT gibt's auch nichts,
Ich meine natürlich Klasse CL_ISHMED_FUNCTIONS, Methode CALL_CLINICAL_ORDER_PRINT.

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Oder sollte ich das lieber übers Orgmittel und SapScript/SmartForms lösen?

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Das weiß ich leider im Detail jetzt auch nicht. Möglich dass der Haken für den "Druckdialog" im Orgmittel bei dir gesetzt ist und deswegen die Druckerauswahl kommt. Eine andere Möglichkeit wäre, dass die automatisch Druckerfindung (Terminal-Drucker-Zuordnung) keinen Drucker finden konnte und deswegen der Dialog hochkommt. Am Besten du debuggst den Dialog und schaust von wo der aufgerufen wird. Dazu musst du dir den Call-Stack anschauen und welche Funktionsbausteine da durchlaufen wurden.
Befindest du dich beim ursprünglichen Aufruf noch im KLAT-Coding musst du dort nachschauen, was den Dialog ausgelöst hat. Wenn schon der Formularprozessor (z.B. OPEN_FORM, Smartforms-Funktionsbaustein usw.) oder der Druckfunktionsbaustein im Stack auftauchen dann ist meist die Einstellung vom Orgmittel schuld am Aufruf.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: benutzerdefinierter GUI-Status in Plantafel/Terminplanun

Beitrag von sapdepp (Specialist / 210 / 35 / 2 ) »
Besten Dank. Ich habe es etwas anders gemacht, und es klappt sogar. Es gibt die Lösung, es direkt im SmartForms zu machen an der Übergabestruktur. Oder man legt sich eine eigene Klasse an durch Kopie von CL_ISH_PRC_CORDER, klaut sich die Methode PRINT_CORDER_SSF, mach sie in der eigenen neuen Z-Klasse zu Public, versorgt sich mit den nötigen Importparametern ls_corder_details_ssf und lt_cordpos_details_ssf, zündet die Function SSF_FUNCTION_MODULE_NAME mit dem SmartForms-Name, zündet eine zweite Function mit dem Namen des importierten dynamischen SmartForms aus dem vorigen FuBa. Natürlich vorher die beiden Variablen hier so setzen, dann geht's:

Code: Alles auswählen.

* Druckdetails holen
              CALL METHOD lr_z_prc_corder->PRINT_CORDER_SSF_PUBLIC
                EXPORTING
                  GR_CORDER              = lr_corder
                IMPORTING
                  ES_CORDER_DETAILS_SSF  = ls_corder_details_ssf
                  ET_CORDPOS_DETAILS_SSF = lt_cordpos_details_ssf
                  E_RC                   = l_rc
                CHANGING
                  CR_ERRORHANDLER        = lr_err.

* SmartForm suchen
              CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
                EXPORTING
                  FORMNAME           = 'ZKC_ISH_CLINICAL_ORDER_DETAILS'
*                 VARIANT            = ' '
*                 DIRECT_CALL        = ' '
                IMPORTING
                  FM_NAME            = l_fm_name
                EXCEPTIONS
*                 NO_FORM            = 1
*                 NO_FUNCTION_MODULE = 2
                  OTHERS             = 3.

              IF SY-SUBRC EQ 0.
* eigentlichen Druck auslösen

* Anzeige only, kein Dialog
                ls_control-no_dialog = 'X'.
                ls_control-preview = 'X'.

                CALL FUNCTION l_fm_name
                  EXPORTING
                   CONTROL_PARAMETERS     = ls_control
                   OUTPUT_OPTIONS         = ls_ssfcompop
                   USER_SETTINGS          = ' '
                   RNF01                  = ls_rnf01
                   RNF19                  = ls_rnf19
                   IS_TN01                = lt_tn01
                   IS_CORDER_DETAILS_SSF  = ls_corder_details_ssf
                   IT_CORDPOS_DETAILS_SSF = lt_cordpos_details_ssf
*             I_ERBOE = l_exlerboe
*       IMPORTING
*           DOCUMENT_OUTPUT_INFO    = ''
*           JOB_OUTPUT_INFO         = ''
*           JOB_OUTPUT_OPTIONS      = ''
                 EXCEPTIONS
                    FORMATTING_ERROR = 1
                    INTERNAL_ERROR  = 2
                    SEND_ERROR      = 3
                    USER_CANCELED   = 4
                    OTHERS          = 5.
Liebe Grüße
sapdepp

Vergleichbare Themen

7
Antw.
683
Views
benutzerdefinierter CSV Ausgabepfad
von jonasx46 » 04.12.2019 10:41 • Verfasst in ABAP® für Anfänger
0
Antw.
1709
Views
3
Antw.
2803
Views
Dynamische Maßnahme/Terminplanung
von Nicole_80 » 19.11.2007 15:08 • Verfasst in Human Resources
5
Antw.
624
Views
GUI-Status
von il.ost » 10.04.2019 08:57 • Verfasst in ABAP® für Anfänger
20
Antw.
11841
Views
GUI Status
von robin1at » 01.02.2006 12:20 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 46 Minuten von msfox 2 / 34
Interne Tabelle
vor 18 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Zugriff auf Daten via Webdav
vor 46 Minuten von msfox 2 / 34
Interne Tabelle
vor 18 Stunden von sap_enthusiast 3 / 163
Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141