SAPSCRIPT TEXT-Includes in SMARTFORMS auflösen
Posted: Sat Apr 03, 2010 1:45 pm
Das Auflösen von SAPSCRIPT TEXT-Includes zur Laufzeit ist in Smartforms nicht vorgesehen.
Bei der Umstellung von Sapscript auf Smartforms, muss daher eine Lösung gefunden werden,
die das Auflösen dennoch ermöglicht, da z.B. in Belegen Include-Anweisungen in den Textbausteinen hinterlegt werden können und Diese beim Ausgeben ignoriert werden.
Beispiel für INCLUDE in Textbaustein:
Als praktikabel erwies sich das explizite Lesen des Textbausteins mit dem Funktionsbaustein READ_TEXT und anschließender Suche nach
/: INCLUDE ....
Ist eine INCLUDE Anweisung enthalten, wird dieser INCLUDE in dem "aufrufenden Text" aufgelöst.
Der vollständige Text wird über einen Textelement vom Typ DYNAMISCHER TEXT ausgegeben.
Beispiel eines "Includierten" Textes (rot gerahmt):
Um das Auflösungsverfahren global verfügbar zu gestalten, habe ich eine FORM-Routine unter
"GLOBALE DEFINITIONEN" implementiert.
und eine Globale Definition für den Text
Damit reduziert sich der Aufruf auf einen Coding-Abschnitt
und ein Textelement.
Ein Wechsel vom Typ INCLUDE-TEXT auf Typ DYNAMISCHER TEXT sollte damit auch keine Hürde mehr sein.
Die Formroutine:
das Formular/Style ist im Anhang.
Ein Druckprogramm ist hier nicht erforderlich.
frohe Ostern Tron
Bei der Umstellung von Sapscript auf Smartforms, muss daher eine Lösung gefunden werden,
die das Auflösen dennoch ermöglicht, da z.B. in Belegen Include-Anweisungen in den Textbausteinen hinterlegt werden können und Diese beim Ausgeben ignoriert werden.
Beispiel für INCLUDE in Textbaustein:
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- * Wir liefern zu folgenden Konditionen:
- GeSHi ©
Als praktikabel erwies sich das explizite Lesen des Textbausteins mit dem Funktionsbaustein READ_TEXT und anschließender Suche nach
/: INCLUDE ....
Ist eine INCLUDE Anweisung enthalten, wird dieser INCLUDE in dem "aufrufenden Text" aufgelöst.
Der vollständige Text wird über einen Textelement vom Typ DYNAMISCHER TEXT ausgegeben.
Beispiel eines "Includierten" Textes (rot gerahmt):
Um das Auflösungsverfahren global verfügbar zu gestalten, habe ich eine FORM-Routine unter
"GLOBALE DEFINITIONEN" implementiert.
und eine Globale Definition für den Text
Damit reduziert sich der Aufruf auf einen Coding-Abschnitt
und ein Textelement.
Ein Wechsel vom Typ INCLUDE-TEXT auf Typ DYNAMISCHER TEXT sollte damit auch keine Hürde mehr sein.
Die Formroutine:
- Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
- *&---------------------------------------------------------------------*
- *& Form yread_text
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * -->P_ID text
- * -->P_LANG text
- * -->P_NAME text
- * -->P_OBJ text
- * -->I_LINES text
- *----------------------------------------------------------------------*
- FORM yread_text
- USING
- p_id TYPE thead-tdid
- p_lang TYPE thead-tdspras
- p_name TYPE thead-tdname
- p_obj TYPE thead-tdobject
- CHANGING
- i_lines TYPE tsftext.
- DATA:
- t_lines TYPE TABLE OF tline,
- ls_lines TYPE tline,
- lv_tdid TYPE thead-tdid,
- lv_tdspras TYPE thead-tdspras,
- lv_tdname TYPE thead-tdname,
- lv_tdobject TYPE thead-tdobject,
- lv_tabix TYPE i,
- lv_index TYPE i,
- BEGIN OF wa OCCURS 0,
- t TYPE tdobname,
- END OF wa.
- CALL FUNCTION 'READ_TEXT'
- EXPORTING
- id = p_id
- language = p_lang
- name = p_name
- object = p_obj
- lines = i_lines
- EXCEPTIONS
- id = 1
- language = 2
- name = 3
- not_found = 4
- object = 5
- reference_check = 6
- wrong_access_to_archive = 7
- OTHERS = 8.
- ELSE.
- * Include Auflösung e.g.
- * INCLUDE YTEST_INCLUDE OBJECT TEXT ID ST LANGUAGE DE
- tdformat = '/:' AND tdline CS 'INCLUDE'.
- lv_tabix = sy-tabix + 1.
- READ TABLE wa WITH KEY t = 'INCLUDE' TRANSPORTING NO FIELDS.
- lv_index = sy-tabix + 1.
- READ TABLE wa INDEX lv_index INTO lv_tdname.
- READ TABLE wa WITH KEY t = 'OBJECT' TRANSPORTING NO FIELDS.
- lv_index = sy-tabix + 1.
- READ TABLE wa INDEX lv_index INTO lv_tdobject.
- ELSE.
- lv_tdobject = 'TEXT'.
- READ TABLE wa WITH KEY t = 'ID' TRANSPORTING NO FIELDS.
- lv_index = sy-tabix + 1.
- READ TABLE wa INDEX lv_index INTO lv_tdid.
- ELSE.
- lv_tdid = 'ST'.
- READ TABLE wa WITH KEY t = 'LANGUAGE' TRANSPORTING NO FIELDS.
- lv_index = sy-tabix + 1.
- READ TABLE wa INDEX lv_index INTO lv_tdspras.
- ELSE.
- lv_tdspras = p_lang.
- * READ TABLE wa INDEX 2 INTO lv_tdname.
- * READ TABLE wa INDEX 4 INTO lv_tdobject.
- * READ TABLE wa INDEX 6 INTO lv_tdid.
- * READ TABLE wa INDEX 8 INTO lv_tdspras.
- * IF sy-subrc NE 0.
- * lv_tdspras = p_lang.
- * ENDIF.
- CALL FUNCTION 'READ_TEXT'
- EXPORTING
- id = lv_tdid
- language = lv_tdspras
- name = lv_tdname
- object = lv_tdobject
- lines = t_lines
- EXCEPTIONS
- id = 1
- language = 2
- name = 3
- not_found = 4
- object = 5
- reference_check = 6
- wrong_access_to_archive = 7
- OTHERS = 8.
- ELSE.
- * ggf löschen aller Kommandozeilen
- * DELETE i_lines WHERE tdformat = '/:' .
- GeSHi ©
das Formular/Style ist im Anhang.
Ein Druckprogramm ist hier nicht erforderlich.
frohe Ostern Tron