[ABAP] Odczyt pliku z archiwum do stringa
Posted on February 17, 2012, under SAP.
Ostatnio rozwiązywałam problem odczytu zdjęcia pracownika zapisanego w kartotece pracowniczej. Takie zdjęcie przechowywane jest w postaci Archive Linku i o ile ściągniecie go na dysk nie stanowi problemu (jest kilka modułów funkcyjnych, które do tego służą) to odczytanie go w sposób zrozumiały dla edytora tekstu, jakim jest MS Word już nie jest takie proste. Do zapisu dowolnych plików do formatu .doc korzystamy z dedykowanej aplikacji opartej na zapisie żądanego dokumentu w języku HTML (który jest bardzo zrozumiały dla MS Word), zatem problem ograniczył się do ściągnięcia zdjęcia w formacie akceptowalnym dla tagu IMG – w postaci inline. Dzięki temu nie musimy zapisywać oddzielnie obrazków, linkować ich do pliku i martwić się, czy na pewno zawsze będą w lokalizacji, w której je zapisaliśmy. W zapisie obrazka inline, nasze zdjęcie jest zapisane w postaci ciągu znaków w treści dokumentu HTML.
Konkretniej – będziemy konwertować obrazki z postaci binarnej do stringa o podstawie 64bitowej. Taką konwersję dla dowolnego pliku można zrobić np. w takim edytorze. Po wczytaniu i przekonwertowaniu obrazka w takim edytorze otrzymamy ciąg znaków, który możemy wstawić w HTMLowy tag IMG:
<img src=”data:image/jpeg;base64,CIĄG_ZNAKÓW_OBRAZKA” height=”100″ width=”100″/>
Aby powyższy ciąg znaków otrzymać dla dokumentu zapisanego w archiwum wykorzystamy cztery moduły funkcyjne:
1. Pobieramy listę dokumentów przypisanych do pracownika – wykorzystujemy do tego funkcję ARCHIV_CONNECTINFO_GET_META. Ważne, żeby w parametrze object_id podać numer pracownika i na końcu gwiazdkę (*) np. ’10000021*’
CALL FUNCTION 'ARCHIV_CONNECTINFO_GET_META'
EXPORTING
object_id = lv_objid
ar_object = ''
sap_object = 'PREL'
IMPORTING
number = lv_number_hits
TABLES
connect_info = lt_hit_table
EXCEPTIONS
OTHERS = 1.
2. Tabela lt_hit_table zawiera wszystkie dokumenty przypisane do osoby. Nas interesują zdjęcia ( pole ar_object w tabeli = HRICOLFOTO). Szukamy wybranego wpisu (ja go zapisałam do ls_hit_table) i dla niego wywołujemy kolejną funkcję – ARCHIVEOBJECT_GET_TABLE, która pobiera plik binarnie do tabelki:
doc_type = ls_hit_table-ar_object.
CALL FUNCTION 'ARCHIVOBJECT_GET_TABLE'
EXPORTING
archiv_id = ls_hit_table-archiv_id
document_type = doc_type
archiv_doc_id = ls_hit_table-arc_doc_id
TABLES
binarchivobject = binary_tab
EXCEPTIONS
error_archiv = 1
error_communicationtable = 2
error_kernel = 3
OTHERS = 4.
3. Obliczamy długość pliku (raczej mało elegancko):
length = LINES( binary_tab ). length = length * 1024.
4. Wywołujemy funkcję SCMS_BINARY_TO_XSTRING, która stworzy nam jeden ciąg bajtów w postaci xtsringa z tabelki binarnej:
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = length
first_line = 0
last_line = 0
IMPORTING
buffer = lv_pic_xstring
TABLES
binary_tab = binary_tab
EXCEPTIONS
failed = 1
OTHERS = 2.
5. Teraz wystarczy tylko zakodować wynik do postaci stringa o podstawie 64bitowej:
CALL FUNCTION 'SSFC_BASE64_ENCODE'
EXPORTING
bindata = lv_pic_xstring
IMPORTING
b64data = lv_picture
EXCEPTIONS
ssf_krn_error = 1
ssf_krn_noop = 2
ssf_krn_nomemory = 3
ssf_krn_opinv = 4
ssf_krn_input_data_error = 5
ssf_krn_invalid_par = 6
ssf_krn_invalid_parlen = 7
OTHERS = 8.
W zmiennej lv_picture mamy ciąg znaków, który możemy wkleić w tag img.
ABAP: poszukiwanie logicznej bazy danych na podstawie nazwy tabeli
For English please choose the language in the right panel –>
Wychodząc naprzeciw różnym dziwnym potrzebom ABAPerów zamieszczam poniższe.
Aby znaleźć logiczną bazę danych posiadając jedynie nazwę tabeli należy skorzystać z transakcji SE36 – edytor logicznej bazy danych. Wybieramy Dodatki -> Wykorzystanie tabeli i podajemy nazwę tabeli. Rezultatem jest lista logicznych baz danych, które z niej korzystają.
I tak np. dla tabeli PERNR otrzymujemy LDB: PNP (Dane podstawowe HR) i PNPCE (Dane podst. HR wraz z równoczesnymi etatami).
Ta wiedza może przydać np. przy eksploracji mało znanych nam modułów ERP, kiedy jednym z niewielu punktów zaczepienia, jakim dysponujemy jest jedna z tabel z danego obszaru. Quick&useful.
Pomoc wyszukiwania dla PCHOBJID w raporcie z PNP
Spotkałam się ostatnio z problemem w programie w SAP HR, konkretniej w HR-PA. Piszę aplikację, która w założeniu opiera się na bazie PNP, ale pewna jej funkcjonalność korzysta ze struktury organizacyjnej, czyli z bazy PCH. Wygenerowanie pól ekranu selekcji, takiego jak w programie opartym na bazie PCH nie stanowi większego problemu. Kłopot pojawia się dopiero, kiedy chcemy dodać pomoc wyszukiwania do pola ID obiektu – standardową dla ekranu selekcji raportu ze struktury.
(more…)
s-community-owana
Posted on November 22, 2009, under SAP, Luźne refleksje.
Społeczności internetowe – ostatnio zaczynam odkrywać potencjał drzemiący pod tym coraz częściej używanym wyrażeniem. I nie chodzi mi tutaj bynajmniej o społeczności znane i popularne, takie jak nasza-klasa, grono, facebook, nawet nie goldenline, czy linkedin. Warto przyjrzeć się tym, które wydają się być najciekawsze i są więcej niż tylko czystą rozrywką – zrzeszające developerów, programistów, konsultantów i szerokie kręgi IT.
Na początek: Microsoft Groups w wydaniu z nazego podwórka, czyli po polsku. Tak naprawdę każdy użytkownik, programista, czy też pasjonat technologii MS znajdzie tu coś dla siebie – dla każdego coś miłego. Ja zaczęłam od – jakżeby inaczej – Women in Technology i już pierwsze spotkanie, w którym miałam przyjemność uczestniczyć nastroiło mnie bardzo pozytywnie. Miło, gdy kobiety na co dzień współpracujące głównie z mężczyznami spotykają się w gronie innych kobiet mających podobne zainteresowania i problemy. Zdecydowanie popieram! I wybieram się na kolejne spotkanie.
Nie sposób nie wspomnieć także o Microsoft Developer Network, czyli po prostu o MSDN. Kopalnia wiedzy i informacji. Blogi, artykuły, pomoc, publikacje i mnóstwo innych.
Wygląda na to, że duże korporacje IT działają na wielu płaszczyznach podobnie zatem pojawia się pytanie: czy tylko gigant z Redmond przejawia takie inicjatywy? Z mojego punktu widzenia, w naturalny sposób uwaga kieruje się na SAP. Z całkiem niezłym efektem: SAP Developer Network, czyli SDN. Zbieżność nazw nie jest przypadkowa, zatem najbardziej można go porównać z Microsoft’owym MSDN’em. Co prawda brakuje między innymi typowych społeczności offline’owych, ale jak na firmę o dużo węższym spektrum produktów niż MS – jest co najmniej nieźle. Nie mówiąc o tym, że zna go każdy szanujący się developer, czy konsultant SAP.
Wygląda na to, że korporacje IT nauczyły się wspierać programistów i zaawansowanych użytkowników swoich produktów w bardzo prosty sposób – nimi samymi. Udostępniając serwisy wspomagające dzielenie się wiedzą i umiejętnościami, a także kontaktami i znajomościami. Popierając społeczności online i offline. Organizując konferencje (patrz: Microsoft TechEd oraz SAP TechEd – zbieżność nazw znowu nie wydaje się przypadkowa ;)). Oczywiście z drugiej strony, to wspaniałe pole do poszukiwania nowych, utalentowanych i w dodatku idealnych (bo kochających to, co robią) potencjalnych pracowników. Pytanie, kto tak naprawdę bardziej na tym korzysta – firma, czy programista-pasjonat – pozostaje otwarte.