čtvrtek 27. června 2013

Generování a zpracování vlastního IDOC v SAPu

Standardní použití komunikace IDOC je koncipováno jako přenos dat mezi různými SAP i nonSAP systémy.

Tento příspěvek ale popisuje netradiční problém, kdy je potřeba v klientu systému SAP vytvořit IDOC a následně ho v tom samém klientu systému zpracovat. Toto řešení může být použitelné tam, kde chceme zachovat stávající vžité rozhraní ALE monitoringu (transakce WE02, BD87 atd.) i u jiných dat zpracovávaných v systému.

Tento příspěvek vychází z tutoriálu Step-by-step guide to ALE and IDOCs, který však popisuje komunikaci mezi dvěma klienty SAPu. Základním prvkem je použití funkčního modulu IDOC_INBOUND_ASYNCHRONOUS, který ze zadaných dat vytvoří inbound(vstupní) IDOC do systému. Tento IDOC je pak na vstupu zpracován funkčním modulem, který data z IDOCu  zapíše do databázové tabulky.

Nebudu znovu popisovat kroky uvedené ve zmíněném tutoriálu, ale pouze rozdíly, které vedou ke zpracování IDOCu ve stejném systému v jakém se IDOC i vytvořil.

Základem je program pro generování IDOCu v systému, který využívá funkční modul IDOC_INBOUND_ASYNCHRONOUS. Program pracuje s předem založeným message type, idoc type, segment (vše podle tutoriálu).
Dále je idoc naplněn aplikačními a po té řídícími daty. Aby mohl být IDOC vytvořen a zároveň zpracován ve stejném systému, je nutné uvést stejné hodnoty v Recipient a Sender information (Port, Partner number a Partner Type).
Následně je v programu už jen zavolán funkční modul IDOC_INBOUND_ASYNCHRONOUS.

&---------------------------------------------------------------------*
*& Report  Z_IDOC_TEST_ASYNCHRONOUS*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT  Z_IDOC_TEST_ASYNCHRONOUS.
DATA:     ltb_edidc LIKE edi_dc40 OCCURS 10 WITH HEADER LINE, "řídící data IDOCu     ltb_edidd TYPE TABLE OF edi_dd40 WITH HEADER LINE,  "aplikační data IDOCu     S_ZSHSTUSEG LIKE ZSHSTUSEG. " struktura, která je stejná jako definice segmentu IDOCu z WE31 - plní se do ní aplikační dataPARAMETERS: P_NAME LIKE ZSHSTUSEG-ZSNAME. "vstupní parametr     ltb_edidd-segnam 'ZSHSTUSEG'. "název segmentu IDOCu     ltb_edidd-segnum 000001. "pořádové číslo segmentu v IDOCu - mohu jich dát více za sebou a přenášet několik záznamů v jednom IDOCu     s_ZSHSTUSEG-ZSTUID SY-TIMLO. "jako pořadové číslo vkládám aktuální čas - špatně jsem si navrhl tabulku     s_ZSHSTUSEG-ZSNAME P_NAME.   "plním jmeno ze vstupního parametru do struktury     ltb_edidd-sdata S_ZSHSTUSEG. "strukturu s daty plním do tabulky? IDOCu     APPEND ltb_edidd.
* Hlavička IDocu - posílám to localhostu do localhostu     CLEAR ltb_edidc.
    REFRESH: ltb_edidc.
    ltb_edidc-direct 2.     ltb_edidc-mestyp 'ZSTUDMESTYPE'." message type - WE81, WE82     ltb_edidc-idoctyp 'ZSHSTUDDOCS'." idoc type - WE30*    ltb_edidc-rcvpfc = ''.     ltb_edidc-sndpor 'SAPNSP'."tRFC port - SAPNSP je automatický port, který nemusím vytvářet (SID)     ltb_edidc-sndprn 'T90CLNT090'."sender port - WE20     ltb_edidc-sndprt 'LS'."partner type - WE20     ltb_edidc-rcvpor 'SAPNSP'."tRFC port - SAPNSP je automatický port, který nemusím vytvářet (SID)     ltb_edidc-rcvprn 'T90CLNT090'."receiver port - WE20     ltb_edidc-rcvprt 'LS'."partner type - WE20     ltb_edidc-tabnam 'EDI_DC40'.     APPEND ltb_edidc.
* Vytvoření IDocu     CALL FUNCTION 'IDOC_INBOUND_ASYNCHRONOUS' " funkční modul, který ze zadaných dat (ltb_edidc, ltb_edidd) vytvoří IDOC       TABLES                                  " dále však musí existovat logika,která vstupní IDOC zpracuje  (funkční modul-SE37, přiřazení-WE57, input method-BD51, creating process code WE42, generating partner profile BD64-process code-WE20) )         idoc_control_rec_40 ltb_edidc[]     " popsáno zde - http://saptechnical.com/Tutorials/ALE/Guide/Index.htm         idoc_data_rec_40    ltb_edidd[]
      EXCEPTIONS         OTHERS              1.     IF sy-subrc NE 0.       ROLLBACK WORK.       MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.* Výmaz nebo kopírování importovaných souborů* funkce pro kopírování: PFL_COPY_OS_FILE*      IF delfile NE space AND server NE space.*        DELETE DATASET piv_pathfile.*      ENDIF.       COMMIT WORK.     ENDIF.* Výmaz dat pro příští soubor     REFRESH:       ltb_edidd.


Výše zmíněný postup by sice IDOC vytvořil, ale ten by skončil s některým z chybných statusů zpracování. Pro korektní zpracování IDOCu je nutné nastavit několik dalších věcí.

V transakci WE20 je nutné nastavit námi použitý Message type do Inbound parameters.


Po rozkliknutí tohoto message type je potřeba určit, který Process code se použije při zpracování příchozího IDOCu.


Použijeme vlastní Process code, který si vytvoříme v transakci WE42 a přiřadíme mu Identification, což je v tomto případě zákaznický funkční modul.


Ve stejné transakci na záložce Logical message přiřadíme Message type.


Zde je uvedený kód funkčního modulu, který se stará o konečné zpracování dat příchozího IDOCu. Funkční modul přijatá data zapíše do tabulky ZSTUDENTS viz. tutoriál.

FUNCTION ZSTUDMESTYPE.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
*"     REFERENCE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
*"  EXPORTING
*"     VALUE(WORKFLOW_RESULT) LIKE  BDWF_PARAM-RESULT
*"     VALUE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR
*"     VALUE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK
*"     VALUE(CALL_TRANSACTION_DONE) LIKE  BDWFAP_PAR-CALLTRANS
*"  TABLES
*"      IDOC_CONTRL STRUCTURE  EDIDC
*"      IDOC_DATA STRUCTURE  EDIDD
*"      IDOC_STATUS STRUCTURE  BDIDOCSTAT
*"      RETURN_VARIABLES STRUCTURE  BDWFRETVAR
*"      SERIALIZATION_INFO STRUCTURE  BDI_SER
*"  EXCEPTIONS
*"      WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------

* Include File containing ALE constants
INCLUDE MBDCONWF.
*TABLES : ZSTUDENTS.
DATA : W_ZSHSTUSEG LIKE ZSHSTUSEG.
  DATA : T_ZSTUDENTS LIKE ZSTUDENTS OCCURS WITH HEADER LINE.
  WORKFLOW_RESULT C_WF_RESULT_OK.
  LOOP AT IDOC_CONTRL.
    IF IDOC_CONTRL-MESTYP NE 'ZSTUDMESTYPE'.
      RAISE WRONG_FUNCTION_CALLED.
    ENDIF.
*  Before reading a new entry, clear application buffer
    LOOP AT IDOC_DATA WHERE DOCNUM EQ IDOC_CONTRL-DOCNUM.
          W_ZSHSTUSEG IDOC_DATA-SDATA.
          MOVE-CORRESPONDING W_ZSHSTUSEG TO T_ZSTUDENTS.
          INSERT INTO ZSTUDENTS VALUES T_ZSTUDENTS.
    ENDLOOP.
    UPDATE ZSTUDENTS FROM T_ZSTUDENTS.
    IF SY-SUBRC EQ 0.
      IDOC_STATUS-DOCNUM IDOC_CONTRL-DOCNUM.
      IDOC_STATUS-STATUS '53'.
      IDOC_STATUS-MSGTY 'I'.
      IDOC_STATUS-MSGID 'YM'.
      IDOC_STATUS-MSGNO '004'.
      IDOC_STATUS-MSGV1 T_ZSTUDENTS-ZSTUID.
      APPEND IDOC_STATUS.
      CLEAR IDOC_STATUS.
    ELSE.
      IDOC_STATUS-DOCNUM IDOC_CONTRL-DOCNUM.
      IDOC_STATUS-STATUS '51'.
      IDOC_STATUS-MSGTY 'E'.
      IDOC_STATUS-MSGID 'YM'.
      IDOC_STATUS-MSGNO '005'.
      IDOC_STATUS-MSGV1 T_ZSTUDENTS-ZSTUID.
      APPEND IDOC_STATUS.
      CLEAR IDOC_STATUS.
      WORKFLOW_RESULT C_WF_RESULT_ERROR.
      RETURN_VARIABLES-WF_PARAM 'Error_Idocs'.
      RETURN_VARIABLES-DOC_NUMBER IDOC_CONTRL-DOCNUM.
      APPEND RETURN_VARIABLES.
      CLEAR RETURN_VARIABLES.
    ENDIF.
 ENDLOOP.

ENDFUNCTION.

Dále je potřeba ještě v transakci WE57 potřeba přiřadit Basic Idoc Type a Message Type k funkčnímu modulu.

Po spuštění programu v SE38 zkontrolujeme v transakci WE02 správné zpracování IDOCu.



středa 13. února 2013

Monitoring SAP (2)

RSMO - Data Load Monitor Start

Tato kontrola je relevantní v případě BI systému SAP. Monitoruje stav požadavků na "load" dat z jiných systémů.


SMGW - Gateway Monitor

SAP Gateway řídí CPI-C services, které jsou založeny na TCP/IP protokolu. Tyto services umožňují vzájemnou komunikaci SAPu a externích programů. Také RFC je založeno na CPI-C, tj. všechny RFC spojení jdou přes SAP Gateway. U SMGW kontrolujeme log soubor.


BWCCMS - CCMS Monitor for BW

Relevantní pro kontrolu BI systémů. Kontrolujeme zde především stav PROCESS CHAINů, což jsou datové toky v SAP BW. Pro detailnější analýzu pak použijeme transakci RSPC.


SM21 - Online System Log Analysis

Kontrola systémového logu je velice důležitá kontrola, kterou lze zjistit mnoho informací.



SOST - SAPconnect Send Request

Monitor SAP komunikace. Především se zde kontrolují odeslané emaily ze systému a analyzují příčiny chyb.



SPAD - Spool Administration

V této transakci lze zkontrolovat konzistenci SPOOLu tj. tiskového výstupu.

SP01 - Output controler

Zobrazuje obsah SPOOLu, tj. můžete si zde prohlédnout výstupy posílané na tiskárny, PDF atd.

ST03N - Workload and Performance Statistics

Zobrazuje aktuální a historickou zátěž systému. Důležitá transakce pro ladění systému a hledání úzkých hrdel.


SM66 - Systemwide Work Process Overview

Zobrazuje aktivní workprocessy napříč všemi instancemi.


SM51 - List of SAP Systems

Transakce zobrazí všechny instance a po rozkliknutí uvidíme všechny workprocessy na dané instanci.

  

SM12 - Display and Delete Locks

Zobrazuje zámky tabulek databáze. Pomocí této transakce je možné zámek ručně uvolnit.


STMS - Transport Management System

Kontrola transportních požadavků importovaných do systému.

SM13 - Administrate Update Records

Kotntrola update požadavků do databáze. 


SM04 - User List

Seznam přihlášených uživatelů v systému. Touto transakcí je lze i odhlásit.


SMQ1, SMQ2 - qRFC Monitor Outbound, Inbound

qRFC narozdíl od tRFC posílá data v pevně daném pořadí tak, jak byla vytvořena nebo odeslána. Tyto transakce umožňují monitoring qRFC front. V případě, že se některá qRFC zpráva zasekne, všechna navazující data zůstávají stát a čekají na opravu. 

 

SM58 - Asynchronous RFC Error Log

Monitoring pro tRFC frontu.


pondělí 11. února 2013

Monitoring SAP (1)

Monitorovat SAP potřebujeme především ve chvíli, kdy nastane nějaký problém a my potřebujeme zjistit jeho příčinu. Velice užitečný je i tzv. proaktivní monitoring, který se snaží těmto událostem předcházet a zajistit nápravu ještě před tím, než dojde k závažnějšímu problému. Proaktivní monitoring je dobré provádět každý den a může to orientačně zabrat půl až hodinu denně na systém podle množství chyb. V podstatě si stačí ve složce FAVORITES v SAP GUI vytvořit seznam transakcí k monitoringu a ty každý den projít.



Na větších systémech se monitoring provádí ze samostatného systému SAP Solution manager. Tento centralizovaný monitorovací systém sbírá data od agentů z ostatních SAP i nonSAP systémů. Zároveň se na něm vytváří i jakýsi seznam kontrol (transakce DSWP) pro každý systém. Po vykonání dané kontroly si položku "odfajfkujete" a  po ukončení kontrol vygenerujete report. 

ST22 - Abap Dump Analysis



Tato transakce zobrazuje a analyzuje short dumpy, které vzniknou za běhu systému. Short dump je v řeči SAPu jakýsi error běhu programu. Může vzniknout chybným kódem jak na straně SAPu, tak na straně vlastního vývoje, dále systémovými vlivy jako je výpadek napájení, nedostatek místa v databázi, výpadek síťového spojení atd.

Po rozkliknutí jednoho dumpu se objeví jeho sáhodlouhá analýza. Obecně se dá říct, že pokud programy které způsobily chybu začínají na Z nebo Y, jedná se o chybu vlastního vývoje. Pokud ne, tak doporučuji hledat příčinu na portálu service.sap.com. Přístup do něj mají však jen zákazníci a konzultanti partnerských firem. Něco se dá najít přes google i na jiných webech, ale úspěšnost není příliš velká.


SM37 - Job Overview

Tato transakce slouží pro kontrolu jobů na pozadí. Job je v SAPu chápán jako naplánovaná úloha, která běží na pozadí systému s předem definovaným vstupem a výstupem např. do souboru, spoolu atd. Po rozkliknutí problémového jobu lze zjistit kým a kdy byl naplánován, jak často má běžet, jaký program spouští a přečíst výstup daného běhu. Tím lze zjistit problém - chybné oprávnění, neplatné vstupní parametry, chyba programu atd.


SM35 - Batch Input Monitor

Batch input je jedna z možností jak do SAPu může uživatel hromadně zadávat data. Tyto akce je dobré monitorovat pro případ, kdy by se přenos nezdařil a uživatel nezajistil nápravu. 


ST02 - Setups/Tune Buffers

Transakce pro monitoring SAP bufferů, které zabírají část operační paměti. Jsou v nich uložena často používaná data proto, aby se omezil počet databázových přístupů a tím zrychlil běh systému. V případě nedostatku místa v bufferech dojde ke swapování tj. k odložení části dat na pevný disk, což naopak výrazně zpomalí práci systému. Je tedy žádoucí co nejvíc omezit počet swapů optimalizací velikosti bufferů.


SM12 - TemSe Administration

TemSe je úložiště pro dočasné objekty, které se v systému neukládají dlouhodobě. TemSe využívá např. spool system (tisk). Touto transakcí můžete kontrolovat konzistenci TemSe úložiště.

SM13 - DBA Planning Calendar

Přehled naplánovaných databázových úloh. Liší se podle použité databáze, ale obecně lze přes tuto transakci provádět zálohy databáze, zálohy redologů a jiné databázové úlohy.


DBACOCKPIT - transakce pro Oracle

SAP je možné použít v kombinaci s několika databázemi - Oracle, MS SQL, IBM DB2, MaxDB, IBM Informix. Podle použité databáze se liší transakce pro její správu. Pro často používanou databázi Oracle, zastřešuje množství transakcí pro správu DBACOCKPIT. Touto transakcí lze monitorovat veškeré dění na databázi Oracle - např. informace o tablespaces, indexech, zálohách, redologs atd. Za zmínku ještě stojí, že většina úprav na databázi (přidání tablespace, recovery atd.) se provádí z nástroje BR*TOOLS, což je konzolová aplikace vyvinutá SAPem pro snadnější správu databáze.


SMICM - ICM Monitor

Internet Communication Manager zajišťuje komunikaci mezi SAPem a okolním světem přes protokoly HTTP, HTTPS a SMTP. Je to vlastně server, který přijímá požadavky z internetu a dále je předává SAPu ke zpracování. Transakce SMICM slouží k jeho správě. 


RZ04 - Maintain SAP instances

Slouží k údržbě a kontrole SAP instancí. Doporučuji kontrolovat Instances/Profiles - Consistency check. Tato kontrola projde nastavení profilů všech instancí daného systému a upozorní na případné chyby a vzájemné rozdíly. Dále je zde možno udržovat operační módy SAPu.


SMMS - Message Server Monitor

SAP Message Server zajišťuje komunikaci mezi jednotlivými instancemi SAPu. Jeho činnost a log můžeme monitorovat transakcí SMMS. 


ST06N - Operating System Monitor

Transakce slouží pro monitorování operačního systému - CPU, RAM, HDD atd.