Smartform - # zamiast nowej linii

Jeśli programujesz, administrujesz, integrujesz i masz wątpliwość lub obawę, to właśnie najlepsze miejsce dla Ciebie. Pisz śmiało...
emil
Posty: 61
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 12 times
Been thanked: 21 times

Smartform - # zamiast nowej linii

Post autor: emil »

Sądząc po ilości wątków - problem dość powszechny, jednak nie jestem w stanie przenieść na swój grunt rozwiązań proponowanych na innych forach.

Wyciągam sobie z tabeli wewnętrznej tekst (średnio około 800 znaków) pocięty na bloki po 250 znaków. Wrzucam je w pole "Element tekstowy", spajając w jedną całość (Załącznik 1).
uzasad1.png
W momencie, gdy z poziomu webdynpro odpalam generowanie pdf`a, znaki łamania linii zamieniają się w hash (załącznik 2).
uzasad2.png


Przepracowałem rozwiązania sugerowane w wątkach:
https://answers.sap.com/questions/11968 ... form-.html
https://answers.sap.com/questions/89424 ... tform.html
jednak nie jestem w stanie skutecznie wykorzystać je u siebie.

Z nieszczęsnym przypadkiem muszę sobie poradzić w dwóch miejscach:
- raz, gdy wyciągam z wewnętrznej tabeli zawartość tekstową kilku wierszy i scalić je w uzasadnienie (tabela z 1 rekordem),
- n-razy, gdy loopem wyciągam zawartość tekstową kilku wierszy scalając je w jedną opinię, ale wykonując to w loopie (opinii może być 'n' sztuk).

Najnaturalniejszym miejscem modyfikacji danych (w sensie pozbycia się hasha) wydaje mi się chwila, w której mam zebrane kompletne dane w trzech tabelach wewnętrznych, które nie będą już zmieniane i które zostaną podane do MF tworzącego PDF.
Zarówno w przypadku jednorekordowego zbioru danych, jak i opinii w kilku rekordach, typ danych (tekstowych) w strukturze na której opieram tabele wewnętrzne, widoczny jest na screenie 3.
uzasad3.png
Mogę liczyć na jakieś sugestie?
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
emil
Posty: 61
Rejestracja: pt gru 27, 2019 11:02 am
Has thanked: 12 times
Been thanked: 21 times

Re: Smartform - # zamiast nowej linii

Post autor: emil »

Może ktoś będzie się zmagał z podobnym problemem, więc oto i częściowe rozwiązanie...

ZHCM_ESS_E_REASON - pole tekstowe, 1333 znaki.
Tekst z hashami dzielę po znaku '#' (cl_abap_char_utilities=>newline) i wrzucam do et_tdline,
a następnie dodaję te linie do tabeli wewnętrznej.
Z niej w loopie składam wszystko do kupy już nie mając hashy.

Minuty rozwiązania - tracę znaki końca linii, ale w moim przypadku 'jestem gotów na to poświęcenie' ;)

Kod: Zaznacz cały

FUNCTION ZHCM_ESS_SMARTF_ENTER_HASH.
*"----------------------------------------------------------------------
*"*"Lokalny interfejs:
*"  IMPORTING
*"     REFERENCE(IM_TXT) TYPE  ZHCM_ESS_E_REASON
*"  EXPORTING
*"     REFERENCE(EX_TXT) TYPE  ZHCM_ESS_E_REASON
*"----------------------------------------------------------------------

            data: ET_TDLINE2 TYPE TABLE OF ZHCM_ESS_E_REASON.
            data: ET_TDLINEF2 TYPE TABLE OF ZHCM_ESS_E_REASON.

            DATA: wa_uzas TYPE ZHCM_ESS_ST_SMART_UZAS. 
            DATA: it_uzas TYPE ZHCM_ESS_iT_SMART_UZAS.

            data: lv_txt(1333) type c.
            data: lv_pop_txt(1333) type c. "poprzedni
            data: lv_new_txt(1333) type c. "nowy

            lv_txt = im_txt.
            SPLIT lv_txt AT cl_abap_char_utilities=>newline INTO TABLE ET_TDLINE2 .
            append LINES OF et_tdline2 to it_uzas.

            lv_txt = ''.

            loop at it_uzas into wa_uzas.
            lv_new_txt = wa_uzas-uzasadnienie.
            CONCATENATE   lv_pop_txt lv_new_txt into lv_txt SEPARATED BY ' '.
            lv_pop_txt = lv_txt.
            ENDLOOP.

            ex_txt = lv_txt.


ENDFUNCTION.