SAPSCRIPT TEXT-Includes in SMARTFORMS auflösen

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!

SAPSCRIPT TEXT-Includes in SMARTFORMS auflösen

Postby Tron » 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:
Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. *  Wir liefern zu folgenden Konditionen:
  2. /: INCLUDE YTEST_INCLUDE OBJECT TEXT ID ST LANGUAGE DE
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):
Image

Image

Um das Auflösungsverfahren global verfügbar zu gestalten, habe ich eine FORM-Routine unter
"GLOBALE DEFINITIONEN" implementiert.

Image

und eine Globale Definition für den Text

Image

Damit reduziert sich der Aufruf auf einen Coding-Abschnitt

Image

Image

und ein Textelement.

Image

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)
  1. *&---------------------------------------------------------------------*
  2. *&      Form  yread_text
  3. *&---------------------------------------------------------------------*
  4. *       text
  5. *----------------------------------------------------------------------*
  6. *      -->P_ID       text
  7. *      -->P_LANG     text
  8. *      -->P_NAME     text
  9. *      -->P_OBJ      text
  10. *      -->I_LINES    text
  11. *----------------------------------------------------------------------*
  12. FORM yread_text
  13. USING
  14.       p_id TYPE thead-tdid
  15.       p_lang TYPE thead-tdspras
  16.       p_name TYPE thead-tdname
  17.       p_obj TYPE thead-tdobject
  18. CHANGING
  19.       i_lines TYPE tsftext.
  20.  
  21.   DATA:
  22.   t_lines TYPE TABLE OF tline,
  23.   ls_lines TYPE tline,
  24.   lv_tdid TYPE thead-tdid,
  25.   lv_tdspras TYPE thead-tdspras,
  26.   lv_tdname TYPE thead-tdname,
  27.   lv_tdobject TYPE thead-tdobject,
  28.   lv_tabix TYPE i,
  29.   lv_index TYPE i,
  30.  
  31.   BEGIN OF wa OCCURS 0,
  32.          t TYPE tdobname,
  33.   END OF wa.
  34.  
  35.   CALL FUNCTION 'READ_TEXT'
  36.     EXPORTING
  37.       id                      = p_id
  38.       language                = p_lang
  39.       name                    = p_name
  40.       object                  = p_obj
  41.     TABLES
  42.       lines                   = i_lines
  43.     EXCEPTIONS
  44.       id                      = 1
  45.       language                = 2
  46.       name                    = 3
  47.       not_found               = 4
  48.       object                  = 5
  49.       reference_check         = 6
  50.       wrong_access_to_archive = 7
  51.       OTHERS                  = 8.
  52.  
  53.   IF sy-subrc <> 0.
  54.   ELSE.
  55.  
  56. * Include Auflösung e.g.
  57. * INCLUDE YTEST_INCLUDE OBJECT TEXT ID ST LANGUAGE DE
  58.  
  59.     LOOP AT i_lines INTO ls_lines WHERE
  60.     tdformat = '/:' AND tdline CS 'INCLUDE'.
  61.       lv_tabix = sy-tabix + 1.
  62.  
  63.       SPLIT ls_lines-tdline AT space INTO TABLE wa.
  64.       DELETE wa WHERE t  = space . " del empty lines
  65.  
  66.       READ TABLE wa WITH KEY t = 'INCLUDE' TRANSPORTING NO FIELDS.
  67.       IF sy-subrc = 0.
  68.         lv_index = sy-tabix + 1.
  69.         READ TABLE wa INDEX lv_index INTO lv_tdname.
  70.       ENDIF.
  71.  
  72.       READ TABLE wa WITH KEY t = 'OBJECT' TRANSPORTING NO FIELDS.
  73.       IF sy-subrc = 0.
  74.         lv_index = sy-tabix + 1.
  75.         READ TABLE wa INDEX lv_index INTO lv_tdobject.
  76.       ELSE.
  77.         lv_tdobject = 'TEXT'.
  78.       ENDIF.
  79.  
  80.       READ TABLE wa WITH KEY t = 'ID' TRANSPORTING NO FIELDS.
  81.       IF sy-subrc = 0.
  82.         lv_index = sy-tabix + 1.
  83.         READ TABLE wa INDEX lv_index INTO lv_tdid.
  84.       ELSE.
  85.         lv_tdid = 'ST'.
  86.       ENDIF.
  87.  
  88.       READ TABLE wa WITH KEY t = 'LANGUAGE' TRANSPORTING NO FIELDS.
  89.       IF sy-subrc = 0.
  90.         lv_index = sy-tabix + 1.
  91.         READ TABLE wa INDEX lv_index INTO lv_tdspras.
  92.       ELSE.
  93.         lv_tdspras = p_lang.
  94.       ENDIF.
  95.  
  96.  
  97. *      READ TABLE wa INDEX 2 INTO lv_tdname.
  98. *      READ TABLE wa INDEX 4 INTO lv_tdobject.
  99. *      READ TABLE wa INDEX 6 INTO lv_tdid.
  100. *      READ TABLE wa INDEX 8 INTO lv_tdspras.
  101. *      IF sy-subrc NE 0.
  102. *        lv_tdspras = p_lang.
  103. *      ENDIF.
  104.  
  105.       CALL FUNCTION 'READ_TEXT'
  106.         EXPORTING
  107.           id                      = lv_tdid
  108.           language                = lv_tdspras
  109.           name                    = lv_tdname
  110.           object                  = lv_tdobject
  111.         TABLES
  112.           lines                   = t_lines
  113.         EXCEPTIONS
  114.           id                      = 1
  115.           language                = 2
  116.           name                    = 3
  117.           not_found               = 4
  118.           object                  = 5
  119.           reference_check         = 6
  120.           wrong_access_to_archive = 7
  121.           OTHERS                  = 8.
  122.  
  123.       IF sy-subrc <> 0.
  124.       ELSE.
  125.         INSERT LINES OF t_lines INTO i_lines INDEX lv_tabix.
  126.       ENDIF.
  127.  
  128.     ENDLOOP.
  129.  
  130. *   ggf löschen aller Kommandozeilen
  131. *   DELETE i_lines WHERE tdformat = '/:' .
  132.  
  133.   ENDIF.
  134. ENDFORM.                    "yread_text
  135.  
GeSHi ©

das Formular/Style ist im Anhang.
Ein Druckprogramm ist hier nicht erforderlich.

frohe Ostern Tron
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Neue Version Smartform + Style

Postby Tron » Tue Apr 06, 2010 5:43 pm

Neue Version Smartform + Style
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm

Postby Carolina216 » Tue Jun 29, 2010 9:35 am

Der FuBa Text_include_Replace tuts auch ^^
Carolina216
..
..
 
Posts: 10
Joined: Thu Feb 09, 2006 10:16 am

Re: SAPSCRIPT TEXT-Includes in SMARTFORMS auflösen

Postby Amalia3120 » Tue Jan 29, 2013 9:23 am

Erstmal danke für diese Lösung!
Ich denke, zu sagen ist noch FUBA TEXT_INCLUDE_REPLACE tut's nicht nur einfach auch, sondern hat noch folgende Vorteile:
1. löst korrekt auf, wenn Textname ein Leerzeichen enthält (dann wird nämlich der Textname in Hochkommata includiert).
2. Kann mehrere Stufen, löst also auch ein Include im Include-Text auf (ALL_LEVEL = 'X')

Ich habe das ganze im Include LSTXBRF01 in der Form "read_include_text" als impliziten Enhancement eingebaut, so zieht es gleich bei allen Smartforms.
Amalia3120
.
.
 
Posts: 1
Joined: Tue Jan 29, 2013 9:23 am

Re: SAPSCRIPT TEXT-Includes in SMARTFORMS auflösen

Postby Tron » Tue Jan 29, 2013 6:09 pm

Sehr gut.
Fügt man noch viewtopic.php?f=3&t=14793 dazu,
könnte man fast resumieren :
Siehste... man kann in jeder Formularsprache Sapscript Formulare schreiben. :wink:

gruß Jens
PS.Was passiert eigentlich, wenn man Textincludes rekursiv verschachtelt ?
Nichts, oder nichts Gutes ?
Tron
.....
.....
 
Posts: 1112
Joined: Sat Aug 04, 2007 10:21 pm


Return to Tips + Tricks & FAQs

Who is online

Users browsing this forum: No registered users and 4 guests

cron