2016-08-05 8 views
0

Я хотел бы получить данные SLT в нашем хранилище данных HANA. Это легкая часть, я могу перемещать данные, которые соответствуют друг другу (таблица 1). Но я хотел бы сделать его типом 2 и сохранить историю. У меня есть следующий код в преобразовании, и он не заполнит поле обновления.SAP SLT Into HANA

*&---------------------------------------------------------------------* 
*& Include   ZAUSP_SLT_TRANSFORM 
*&---------------------------------------------------------------------* 


STATICS lv_syn_name TYPE tabname. 

DATA con_name TYPE dbcon_name. 

DATA lv_timestamp TYPE timestampl. 

FIELD-SYMBOLS <lv_operation> TYPE any. 


CONCATENATE _mt_id ':R:R' INTO con_name. 

ASSIGN COMPONENT 'IUUC_OPERAT_FLAG' OF STRUCTURE <wa_s_AUSP> TO <lv_operation>. 

IF sy-subrc = 0 AND 
    <lv_operation> = 'D'. 

    IF lv_syn_name IS INITIAL. 
    CALL METHOD cl_iuuc_tab_ident_access=>get_ident 
     EXPORTING 
     iv_mt_id  = _mt_id 
     iv_tabname  = _cobj_alias 
     iv_system_type = cl_iuuc_tab_ident_access=>co_system_receiver 
     iv_ident_type = cl_iuuc_tab_ident_access=>co_ident_synonym 
     IMPORTING 
     ev_full_name = lv_syn_name. 
    IF lv_syn_name IS INITIAL. 
     allog_msg 'E' 'DMC_RT_MSG' '000' 
     'Get Synonym Error' space space space 'IL '. 
     RAISE stopped_by_rule. 
    ENDIF. 
    ENDIF. 

    GET TIME STAMP FIELD lv_timestamp. 

    UPDATE (lv_syn_name) CLIENT SPECIFIED CONNECTION (con_name) 
    SET ZDELETE_FLAG = 'X' 
     ZUPD_DATETIME = lv_timestamp 
    WHERE mandt = <wa_s_AUSP>-mandt 
     AND objek = <wa_s_AUSP>-objek 
     AND atinn = <wa_s_AUSP>-atinn 
     AND atzhl = <wa_s_AUSP>-atzhl 
     AND mafid = <wa_s_AUSP>-mafid 
     AND klart = <wa_s_AUSP>-klart 
     AND adzhl = <wa_s_AUSP>-adzhl. 


    IF sy-subrc <> 0. 
    allog_msg 'E' 'DMC_RT_MSG' '000' 
    'Update Error' space space space 'IL '. 
    RAISE stopped_by_rule. 
    ENDIF. 

    skip_record. 
ENDIF. 

"Code for timestamp outside of delete. 

IF lv_syn_name IS INITIAL. 
    CALL METHOD cl_iuuc_tab_ident_access=>get_ident 
     EXPORTING 
     iv_mt_id  = _mt_id 
     iv_tabname  = _cobj_alias 
     iv_system_type = cl_iuuc_tab_ident_access=>co_system_receiver 
     iv_ident_type = cl_iuuc_tab_ident_access=>co_ident_synonym 
     IMPORTING 
     ev_full_name = lv_syn_name. 
    IF lv_syn_name IS INITIAL. 
     allog_msg 'E' 'DMC_RT_MSG' '000' 
     'Get Synonym Error' space space space 'IL '. 
     RAISE stopped_by_rule. 
    ENDIF. 
    ENDIF. 

    GET TIME STAMP FIELD lv_timestamp. 

    UPDATE (lv_syn_name) CLIENT SPECIFIED CONNECTION (con_name) 
    SET ZUPD_DATETIME = lv_timestamp   "slt_update is the name in your slt strucure! 
    WHERE MANDT = <wa_s_AUSP>-MANDT    "key_1 = pk of your table 
    AND OBJEK = <wa_s_AUSP>-OBJEK 
    AND ATINN = <wa_s_AUSP>-ATINN 
    AND ATZHL = <wa_s_AUSP>-ATZHL 
    AND MAFID = <wa_s_AUSP>-MAFID 
    AND KLART = <wa_s_AUSP>-KLART 
    AND ADZHL = <wa_s_AUSP>-ADZHL. 

    IF sy-subrc <> 0. 
    allog_msg 'E' 'DMC_RT_MSG' '000' 
    'Update Error' space space space 'IL '. 
    RAISE stopped_by_rule. 
    ENDIF. 

Почему обновление поля времени для всех строк не вставлено в цель.

Когда я пытаюсь установить точку останова для отладки во время репликации, я получаю следующее сообщение об ошибке: enter image description here

Так я нажимаю один, и получить следующую информацию по каждому из них: enter image description here

Так я иду к SE38 и попытаться активировать каждый отдельно: enter image description here

Я не писал код в этих дополнительных программах и не понимаю, как они относятся к INCLUDE, который я написал. Я думал, что преобразование INCLUDE, которое я написал, не выполняется из-за того, что фоновые программы не активны?

+0

Есть сообщения об ошибке вы получаете? – Jagger

+0

Нет, загрузка завершается, но ничего не записывается в поле обновления. – CodeMonkey

+0

Где вы помещаете точку останова, которая дает эту ошибку «поколение»? – Suncatcher

ответ

0

Приведенный ниже код разрешил мою проблему.

& -------------------------------------------- ------------------------- * & Включить ZAUSP_SLT_TRANSFORM & ---------------- ---------------- -------------------------------------------------- --- * 10-3-2016 --- * ********************************* ***************************************

STATICS lv_syn_name TYPE tabname. 
DATA con_name TYPE dbcon_name. 
DATA lv_timestamp TYPE timestampl. 
FIELD-SYMBOLS <lv_operation> TYPE any. 

FIELD-SYMBOLS: <lt_log_tab>  TYPE table, 
       <ls_log_tab>  TYPE any, 
       <lv_primary_key_1> TYPE any, 
       <lv_primary_key_2> TYPE any, 
       <lv_primary_key_3> TYPE any, 
       <lv_primary_key_4> TYPE any. 
* 
* 
* 
** get operation flag 
ASSIGN COMPONENT 'IUUC_OPERAT_FLAG' OF STRUCTURE <wa_s_ausp> TO <lv_operation>. 
* 
* 
IF sy-subrc = 0 AND 
    <lv_operation> = 'D'. 
* 
* 
**** replication mode and record was deleted 

    IF lv_syn_name IS INITIAL. 
* get synonym name in case of multi use active 
    CALL METHOD cl_iuuc_tab_ident_access=>get_ident 
     EXPORTING 
     iv_mt_id  = _mt_id 
     iv_tabname  = _cobj_alias 
*  iv_tabname  = 'AUSP' 
     iv_system_type = cl_iuuc_tab_ident_access=>co_system_receiver 
     iv_ident_type = cl_iuuc_tab_ident_access=>co_ident_synonym 
     IMPORTING 
     ev_full_name = lv_syn_name. 
    IF lv_syn_name IS INITIAL. 
*  set message 
     allog_msg 'E' 'DMC_RT_MSG' '000' 
     'Get Synonym Error' space space space 'IL '. 
     RAISE stopped_by_rule. 
    ENDIF. 
    ENDIF. 
* 
* 
* 
**** set additional target fields 
    GET TIME STAMP FIELD lv_timestamp. 
    CONCATENATE _mt_id ':R:R' INTO con_name. 

    UPDATE (lv_syn_name) CLIENT SPECIFIED CONNECTION (con_name) 
    SET deleted = 'X' 
     delete_time = lv_timestamp 
     WHERE mandt = <wa_s_ausp>-mandt 
     AND objek = <wa_s_ausp>-objek 
     AND atinn = <wa_s_ausp>-atinn 
     AND atzhl = <wa_s_ausp>-atzhl 
     AND mafid = <wa_s_ausp>-mafid 
     AND klart = <wa_s_ausp>-klart 
     AND adzhl = <wa_s_ausp>-adzhl. 



    IF sy-subrc <> 0. 
    DATA(lc_subrc) = sy-subrc. 
    DATA lc_ausp TYPE c LENGTH 100. 
    CONCATENATE <wa_s_ausp>-mandt <wa_s_ausp>-objek <wa_s_ausp>-atinn <wa_s_ausp>-atzhl <wa_s_ausp>-mafid <wa_s_ausp>-klart <wa_s_ausp>-adzhl 
    INTO lc_ausp SEPARATED BY ','. 
* set message 
    allog_msg 'E' 'DMC_RT_MSG' '000' 
    'Update Error' space space space 'IL '. 
    allog_msg 'E' 'DMC_RT_MSG' '000' 
    'Error Details:' lv_syn_name _cobj_alias lc_subrc 'IL '. 
    allog_msg 'E' 'DMC_RT_MSG' '000' 
    'Table Details:' lc_ausp space space 'IL '. 
    RAISE stopped_by_rule. 
    ENDIF. 

**** do not replicate delete 
    skip_record. 

ELSEIF sy-subrc = 0 AND <lv_operation> = 'I'. 

    GET TIME STAMP FIELD <wa_r_ausp>-insert_time. 


ELSEIF sy-subrc = 0 AND <lv_operation> = 'U'. 

    GET TIME STAMP FIELD <wa_r_ausp>-update_time. 


ELSE. 
*Initial load branch 
    GET TIME STAMP FIELD <wa_r_ausp>-insert_time. 

ENDIF.