검색결과 리스트
전체에 해당되는 글 125건
- 2017.12.19 ABAP Editor se38 or se37 edit 못하게 control
- 2017.12.05 SAP Object Type Description
- 2017.12.01 SAP PO Multi 시 Ack 값 받아오기
- 2017.12.01 SCI check 항목 Level 조정
- 2017.11.27 abap sci tool setting
- 2017.11.23 Internal table에서 중복 데이타 찾기
- 2017.11.22 Internal table data to xml
- 2017.11.22 XML을 Internal table로 보내기
- 2017.11.21 Non Unicode system에서 받은 한글 파일 작업시
- 2017.11.20 GUI Status 생성시 덤프 발생하는 경우
글
ABAP Editor se38 or se37 edit 못하게 control
SE38
Function Group : XSEU
User-Exit exit_sapls38e_001
se24
BADI : CLIF_TOGGLE_DISPEDIT 클래스 작성기에서 조회모드와 변경모드간 교환
se11
SEDD0001 ABAP/4 Dictionary에서 고객종료
EXIT_SAPLSEDD_001
EXIT_SAPDSAHD_010 Exit in Program Attributes (Call: Create Program; Display, Change Attr.)
EXIT_SAPLEDITOR_001 User Exit for $$ Editor (Dynamic Pattern)
EXIT_SAPLEDITOR_002 User's Own Function Codes for $$ Editor: Special Case for ABAP Editor
EXIT_SAPLLOCAL_EDT1_001 User Exit for Editor (Dynamic Pattern)
EXIT_SAPLLOCAL_EDT1_002 User's Own Function Code in ABAP Editor
EXIT_SAPLS38E_001 Exit for ABAP Editor
EXIT_SAPLSEDD_001 Exit for ABAP Dictionary
EXIT_SAPLSEDTATTR_010 Exit in Program Attributes Release 4 (on Create Program,Disp./Chg. Attrs.)
EXIT_SAPLSEU0_001 Exit Menu Painter (Invisible Call)
EXIT_SAPLSEUK_001 Exit Transaction Code Maintenance (Invisible Call)
EXIT_SAPLSEUK_002 Exit Transaction Code Maintenance
EXIT_SAPLSMPE_001 Exit Menu Painter
EXIT_SAPLSMPE_002 Exit Menu Painter (Invisible Call)
EXIT_SAPLWBABAP_010 Function Exit on Initial Screen of ABAP Editor (New Version of Workbench)
EXIT_SAPLWBSCREEN_001 Screen Painter Exit (New Version of Workbench)
EXIT_SAPLWBSCREEN_002 User's Own Function Codes in Screen Painter (New Version of Workbench)
EXIT_SAPMS38E_010 Function Exit on Intial Screen of ABAP Editor (Old Workbench)
EXIT_SAPMS38L_001 Function Builder Exit
EXIT_SAPMS38L_002 User's Own Function Code in the Function Builder
EXIT_SAPMSEDT_001 User Exit for Editor (Dynamic Pattern)
EXIT_SAPMSEDT_002 User's Own Function Code in ABAP Editor
EXIT_SAPMSEU0_100 Exit Object Browser
EXIT_SAPMSEUS_001 Screen Painter Exit (Old Workbench)
EXIT_SAPMSEUS_002 User's Own Function Code in Screen Painter (Old Workbench)
EXIT_SAPMSMPE_001 Exit Menu Painter (Function)
'SAP Program > ABAP' 카테고리의 다른 글
USER Role PFCG 관련 BAPI & 권한 관련 (0) | 2017.12.27 |
---|---|
User exit & BADI 찾기 (0) | 2017.12.19 |
SAP Object Type Description (0) | 2017.12.05 |
SAP PO Multi 시 Ack 값 받아오기 (0) | 2017.12.01 |
SCI check 항목 Level 조정 (0) | 2017.12.01 |
글
SAP Object Type Description
Function Module : TRINT_OBJECT_TABLE
PERFORM get_system_types TABLES st_system_types.
Include file : LTR_OBJECTSF02
그외의 Local Object type 은 OBJT Table 에서 가져옴.
'SAP Program > ABAP' 카테고리의 다른 글
User exit & BADI 찾기 (0) | 2017.12.19 |
---|---|
ABAP Editor se38 or se37 edit 못하게 control (0) | 2017.12.19 |
SAP PO Multi 시 Ack 값 받아오기 (0) | 2017.12.01 |
SCI check 항목 Level 조정 (0) | 2017.12.01 |
abap sci tool setting (0) | 2017.11.27 |
글
SAP PO Multi 시 Ack 값 받아오기
FUNCTION z_qm_if_lims_insp_type.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(I_DATE) TYPE TAB_ISUR_DATUM OPTIONAL
*" VALUE(I_SYSID) TYPE STRING
*" EXPORTING
*" VALUE(E_RET) TYPE ZIF_STATUS
*" VALUE(E_MSG) TYPE CHAR100
*" VALUE(E_SCNT) TYPE SATC_D_JOB_LIMIT_UPPER
*" VALUE(E_ECNT) TYPE SATC_D_JOB_LIMIT_UPPER
*" TABLES
*" LT_Z045 STRUCTURE ZQMT_045
*" LT_WERKS STRUCTURE WERKS_RANG OPTIONAL
*"----------------------------------------------------------------------
DATA : lt_callstack TYPE sys_callst,
ls_callstack LIKE LINE OF lt_callstack,
lv_func_name TYPE dbglevent.
* 현재 function name 가져오기 시작
*** Get Stack
CALL FUNCTION 'SYSTEM_CALLSTACK'
EXPORTING
max_level = 0
IMPORTING
et_callstack = lt_callstack.
LOOP AT lt_callstack INTO ls_callstack
WHERE eventtype = 'FUNC'. " Get Last FUNC Call
EXIT.
ENDLOOP.
*** Set Function Name
lv_func_name = ls_callstack-eventname.
* 현재 function name 가져오기 종료
DATA: ls_z045 LIKE LINE OF lt_z045,
lv_werks_set TYPE zqmt_045-werks,
lv_werks TYPE t001w-werks,
ls_date LIKE LINE OF i_date.
DATA: BEGIN OF ls_cdhdr.
DATA:
tabkey TYPE cdpos-tabkey,
objectid TYPE cdpos-objectid,
udate TYPE cdhdr-udate,
mpdau TYPE qmat-mpdau.
DATA: END OF ls_cdhdr,
lt_cdhdr LIKE TABLE OF ls_cdhdr.
DATA: BEGIN OF ls_coll.
DATA: art TYPE qals-art,
matnr TYPE qals-matnr,
werks TYPE qals-werk,
aktiv TYPE qmat-aktiv,
mpdau TYPE qmat-mpdau,
aedat TYPE cdhdr-udate.
DATA: END OF ls_coll,
lt_coll LIKE TABLE OF ls_coll.
DATA: gt_qmat TYPE TABLE OF zcl_dt_qm00820_serp_gt_qmat,
gs_qmat LIKE LINE OF gt_qmat.
DATA: werks_sql TYPE string.
IF lt_werks[] IS NOT INITIAL.
READ TABLE lt_werks INDEX 1.
CONCATENATE 'pos~tabkey like ''' lt_werks-low '%''' INTO werks_sql.
lv_werks_set = lt_werks-low.
ENDIF.
* Get Code Group
SELECT pos~tabkey,
pos~objectid,
hdr~udate
INTO CORRESPONDING FIELDS OF TABLE @lt_cdhdr
FROM cdhdr AS hdr
INNER JOIN cdpos AS pos
ON pos~objectclas = hdr~objectclas
AND pos~objectid = hdr~objectid
AND pos~changenr = hdr~changenr
WHERE (werks_sql)
AND hdr~objectclas = 'MATERIAL'
AND hdr~udate IN @i_date
AND pos~tabname = 'DQMAT'
GROUP BY pos~tabkey, pos~objectid, hdr~udate.
LOOP AT lt_cdhdr INTO ls_cdhdr.
ls_coll-art = ls_cdhdr-tabkey+4(4).
ls_coll-matnr = ls_cdhdr-objectid.
ls_coll-werks = ls_cdhdr-tabkey+0(4).
ls_coll-aedat = ls_cdhdr-udate.
SELECT SINGLE aktiv, mpdau
INTO (@ls_coll-aktiv, @ls_coll-mpdau)
FROM qmat
WHERE art = @ls_coll-art
AND matnr = @ls_coll-matnr
AND werks = @ls_coll-werks.
COLLECT ls_coll INTO lt_coll.
CLEAR ls_coll.
ENDLOOP.
loop at lt_coll into ls_coll.
MOVE-CORRESPONDING ls_coll to gs_qmat.
append gs_qmat to gt_qmat.
clear gs_qmat.
ENDLOOP.
READ TABLE i_date INTO ls_date INDEX 1.
IF gt_qmat[] IS INITIAL.
ls_z045-i_object = lv_func_name.
ls_z045-werks = lv_werks_set.
ls_z045-idate_fr = ls_date-low.
ls_z045-idate_to = ls_date-high.
ls_z045-i_sysid = i_sysid.
ls_z045-e_ret = 'E'.
ls_z045-e_scnt = 0.
ls_z045-e_ecnt = 0.
ls_z045-e_msg = 'No Data'.
ls_z045-ernam = sy-uname.
ls_z045-erdat = sy-datlo.
ls_z045-erzet = sy-timlo.
APPEND ls_z045 TO lt_z045.
e_msg = ls_z045-e_msg.
e_ret = 'E'.
EXIT.
ENDIF.
DATA: ev_ret TYPE char1,
ev_msg TYPE zmesse,
lv_date TYPE sy-datlo,
lv_time TYPE sy-timlo.
DATA : lt_sysid TYPE TABLE OF string,
ls_sysid TYPE string,
lv_sys_cnt TYPE i,
lv_sel_cnt TYPE i.
SPLIT i_sysid AT ',' INTO TABLE lt_sysid.
LOOP AT lt_sysid INTO ls_sysid.
IF ls_sysid IS INITIAL.
DELETE lt_sysid.
ENDIF.
ENDLOOP.
"전송하게 될 system 수량 계산
lv_sys_cnt = lines( lt_sysid ).
DATA: lv_cnt1 TYPE i,
lv_cnt2 TYPE i,
lv_fr_num TYPE i,
lv_to_num TYPE i,
lv_total TYPE i,
lv_ava_cnt TYPE i,
lv_xnum TYPE i,
lv_do_time TYPE i.
* DATA: lo_proxy_lims TYPE REF TO zcl_co_qm00820_serp_ao.
* DATA: lo_fault TYPE REF TO cx_ai_system_fault,
* lv_emsg TYPE string.
* DATA: ls_proxy_out TYPE zcl_mt_qm00820_serp,
* lv_cnt1 TYPE i,
* lv_cnt2 TYPE i,
* lv_fr_num TYPE i,
* lv_to_num TYPE i,
* lv_total TYPE i,
* lv_ava_cnt TYPE i,
* lv_xnum TYPE i,
* lv_do_time TYPE i.
CONSTANTS:
gc_max_size TYPE i VALUE '3072000',
gc_size1 TYPE i VALUE '64'.
lv_cnt1 = lines( gt_qmat ).
"전송되는 Table size 계산
lv_total = lv_cnt1 * gc_size1.
"1번에 send 가능한 size 계산
lv_ava_cnt = gc_max_size / gc_size1.
"나누어 전송해야 하는 Count 계산
lv_do_time = lv_total / gc_max_size + 1.
* IF gc_max_size < lv_total.
*
* ENDIF.
"Code group 과 code를 LIMS에 전송
CLEAR: e_scnt, e_ecnt.
"처음에 Success로 setting 한 뒤
"한번이라도 Error가 발생하면 Error로 setting
e_ret = 'S'.
DATA: lo_client_proxy TYPE REF TO zcl_co_qm00820_serp_ao,
ls_proxy_out TYPE zcl_mt_qm00820_serp.
DATA: lv_cs_root TYPE REF TO cx_root,
lo_fault TYPE REF TO cx_ai_system_fault,
lo_ai_application_fault TYPE REF TO cx_ai_application_fault,
lv_send_emsg TYPE string,
lv_emsg TYPE string.
DATA: lo_msg_protocol TYPE REF TO if_wsprotocol_message_id,
l_msg_id TYPE sxmsmguid,
lo_ack TYPE REF TO if_ws_acknowledgment,
l_ack_status_simple TYPE prx_ack_status,
l_ack_status_detail TYPE prx_ack_status_detail_table.
DATA: lo_async_messaging TYPE REF TO if_wsprotocol_async_messaging,
lv_ack_request TYPE prx_ack_request_details.
CREATE OBJECT lo_client_proxy.
lv_date = sy-datlo.
lv_time = sy-timlo.
lv_fr_num = 1.
DO lv_do_time TIMES.
CLEAR ls_proxy_out.
ls_proxy_out-mt_qm00820_serp-xnums = lv_xnum.
ls_proxy_out-mt_qm00820_serp-xdate = lv_date.
ls_proxy_out-mt_qm00820_serp-xtime = lv_time.
ls_proxy_out-mt_qm00820_serp-xsysid = i_sysid.
lv_to_num = lv_to_num + lv_ava_cnt.
CLEAR: ls_proxy_out-mt_qm00820_serp-gt_qmat[], gs_qmat.
LOOP AT gt_qmat INTO gs_qmat FROM lv_fr_num TO lv_to_num.
CONDENSE gs_qmat-mpdau.
APPEND gs_qmat TO ls_proxy_out-mt_qm00820_serp-gt_qmat.
CLEAR gs_qmat.
ENDLOOP.
lv_cnt1 = lines( ls_proxy_out-mt_qm00820_serp-gt_qmat ).
ls_proxy_out-mt_qm00820_serp-xrows = lv_cnt1.
CONDENSE ls_proxy_out-mt_qm00820_serp-xnums.
CONDENSE ls_proxy_out-mt_qm00820_serp-xrows.
TRY.
CLEAR: lv_emsg, lv_send_emsg.
* get protocol for asynchronous messaging
lo_async_messaging ?=
lo_client_proxy->get_protocol( if_wsprotocol=>async_messaging ).
* Ask for transport acknowledgment
CLEAR lv_ack_request.
lv_ack_request =
if_wsprotocol_async_messaging=>co_transport_acknowledgment.
lo_async_messaging->set_acknowledgment_requested( lv_ack_request ).
CATCH cx_ai_system_fault cx_ai_application_fault INTO lv_cs_root.
CALL METHOD lv_cs_root->if_message~get_text
RECEIVING
result = lv_send_emsg.
ENDTRY.
TRY.
CALL METHOD lo_client_proxy->qm00820_serp_ao
EXPORTING
output = ls_proxy_out.
COMMIT WORK AND WAIT.
CATCH cx_ai_system_fault cx_ai_application_fault INTO lv_cs_root.
CALL METHOD lv_cs_root->if_message~get_text
RECEIVING
result = lv_send_emsg.
ENDTRY.
TRY.
* Ack Message 읽어오기
lo_msg_protocol ?=
lo_client_proxy->get_protocol( if_wsprotocol=>message_id ).
l_msg_id = lo_msg_protocol->get_message_id( ).
DO 10 TIMES.
CLEAR: ls_z045.
SELECT SINGLE st~msgguid,
st~ack_state,
CASE st~ack_state
WHEN '072' THEN 'S'
WHEN '077' THEN 'S'
WHEN '080' THEN 'A'
WHEN '000' THEN 'W'
ELSE 'E'
END,
err~errtxt
INTO (@ls_z045-ifkey, @ls_z045-ack_state,
@ls_z045-e_ret, @ls_z045-e_msg)
FROM sxmspmast AS st
LEFT OUTER JOIN sxmsperror AS err
ON err~msgguid = st~msgguid
WHERE st~msgguid = @l_msg_id.
IF ls_z045-ack_state <> '000' AND
ls_z045-ack_state <> '071'.
EXIT.
ENDIF.
"ack_state 값이 늦게 들어오는 경우가 있어서 Wait 함
IF ls_z045-ack_state = '000' OR
ls_z045-ack_state = '071'.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
* lo_ack = cl_proxy_access=>get_acknowledgment( l_msg_id ).
* l_ack_status_simple = lo_ack->get_status( ).
"Ack Message가 여러개의 sub msg를 가지고 있는 경우
"sxmspmast에서 sub msg의 ack status를 읽어서 처리함
IF ls_z045-ack_state = '080'.
DO 10 TIMES.
CLEAR: ls_z045, lt_z045.
SELECT st~msgguid AS ifkey,
st~ack_state,
CASE st~ack_state
WHEN '072' THEN 'S'
WHEN '077' THEN 'S'
WHEN '080' THEN 'A'
WHEN '000' THEN 'W'
ELSE 'E'
END AS e_ret,
CASE mas~ob_system "PO xsysid 값이 있는 필드
WHEN 'ILIM_COM_D' THEN 'LM0'
WHEN 'ALIM_TJN_D' THEN 'LMC'
WHEN 'ALIM_DGN_D' THEN 'LMD'
WHEN 'ALIM_HUN_D' THEN 'LMH'
WHEN 'ALIM_MEX_D' THEN 'LMM'
WHEN 'ALIM_VNM_D' THEN 'LMV'
END AS i_sysid,
err~errtxt AS e_msg
INTO CORRESPONDING FIELDS OF TABLE @lt_z045
* INTO (@ls_z045-ifkey, @ls_z045-ack_state,
* @ls_z045-e_ret, @ls_z045-i_sysid,
* @ls_z045-e_msg)
FROM sxmspmast AS st
INNER JOIN sxmspemas AS mas
ON mas~msgguid = st~msgguid
LEFT OUTER JOIN sxmsperror AS err
ON err~msgguid = mas~msgguid
WHERE st~parentmsg = @l_msg_id.
LOOP AT lt_z045 INTO ls_z045.
ls_z045-i_object = lv_func_name.
ls_z045-werks = lv_werks_set.
ls_z045-idate_fr = ls_date-low.
ls_z045-idate_to = ls_date-high.
IF ls_z045-e_ret = 'S'.
ls_z045-e_scnt = lv_cnt1.
ELSE.
ls_z045-e_ecnt = lv_cnt1.
ENDIF.
ls_z045-ernam = sy-uname.
ls_z045-erdat = lv_date.
ls_z045-erzet = lv_time.
MODIFY lt_z045 FROM ls_z045 INDEX sy-tabix.
ENDLOOP.
lv_sel_cnt = lines( lt_z045 ).
"ack_state 값이 늦게 들어오는 경우가 있어서 Wait 함
IF sy-subrc <> 0 OR
ls_z045-ack_state = '000' OR
ls_z045-ack_state = '071' OR
"insert 가 늦게 되어서 전송한 system 전체 값이 나오지
"않는 경우가 발생하여 전송한 count 와 비교함
lv_sel_cnt < lv_sys_cnt.
WAIT UP TO 1 SECONDS.
CONTINUE.
ENDIF.
IF sy-subrc = 0 AND
* ls_z045-ack_state <> '000' AND
ls_z045-ack_state <> '071'.
EXIT.
ENDIF.
ENDDO.
"1개의 system에 전송한 경우
ELSE.
ls_z045-i_object = lv_func_name.
ls_z045-werks = lv_werks_set.
ls_z045-idate_fr = ls_date-low.
ls_z045-idate_to = ls_date-high.
ls_z045-i_sysid = i_sysid.
IF ls_z045-e_ret = 'S'.
ls_z045-e_scnt = lv_cnt1.
ELSE.
ls_z045-e_ecnt = lv_cnt1.
ENDIF.
* ls_z045-e_msg = e_msg.
ls_z045-ernam = sy-uname.
ls_z045-erdat = lv_date.
ls_z045-erzet = lv_time.
APPEND ls_z045 TO lt_z045.
* lo_ack->get_status_detail( IMPORTING ack_status_detail_table = l_ack_status_detail ).
ENDIF.
CATCH cx_ai_system_fault cx_ai_application_fault INTO lv_cs_root.
CALL METHOD lv_cs_root->if_message~get_text
RECEIVING
result = lv_send_emsg.
ENDTRY.
ADD 1 TO lv_xnum.
lv_fr_num = lv_to_num + 1.
IF lv_send_emsg IS INITIAL.
e_ret = ls_z045-e_ret.
IF ls_z045-e_ret = 'S'.
e_scnt = e_scnt + lv_cnt1.
ELSE.
e_ecnt = e_ecnt + lv_cnt1.
ENDIF.
ELSE.
ls_z045-i_object = lv_func_name.
ls_z045-werks = lv_werks_set.
ls_z045-i_sysid = i_sysid.
ls_z045-idate_fr = ls_date-low.
ls_z045-idate_to = ls_date-high.
ls_z045-e_ret = 'E'.
ls_z045-e_ecnt = lv_cnt1.
ls_z045-e_msg = lv_send_emsg.
ls_z045-ernam = sy-uname.
ls_z045-erdat = lv_date.
ls_z045-erzet = lv_time.
APPEND ls_z045 TO lt_z045.
e_msg = lv_emsg.
"처음에 Success로 setting 한 뒤
"한번이라도 Error가 발생하면 Error로 setting
e_ret = 'F'.
e_ecnt = e_ecnt + lv_cnt1.
ENDIF.
ENDDO.
ENDFUNCTION.
'SAP Program > ABAP' 카테고리의 다른 글
ABAP Editor se38 or se37 edit 못하게 control (0) | 2017.12.19 |
---|---|
SAP Object Type Description (0) | 2017.12.05 |
SCI check 항목 Level 조정 (0) | 2017.12.01 |
abap sci tool setting (0) | 2017.11.27 |
Internal table에서 중복 데이타 찾기 (0) | 2017.11.23 |
글
SCI check 항목 Level 조정
'SAP Program > ABAP' 카테고리의 다른 글
SAP Object Type Description (0) | 2017.12.05 |
---|---|
SAP PO Multi 시 Ack 값 받아오기 (0) | 2017.12.01 |
abap sci tool setting (0) | 2017.11.27 |
Internal table에서 중복 데이타 찾기 (0) | 2017.11.23 |
Internal table data to xml (0) | 2017.11.22 |
글
abap sci tool setting
'SAP Program > ABAP' 카테고리의 다른 글
SAP PO Multi 시 Ack 값 받아오기 (0) | 2017.12.01 |
---|---|
SCI check 항목 Level 조정 (0) | 2017.12.01 |
Internal table에서 중복 데이타 찾기 (0) | 2017.11.23 |
Internal table data to xml (0) | 2017.11.22 |
XML을 Internal table로 보내기 (0) | 2017.11.22 |
글
Internal table에서 중복 데이타 찾기
REPORT y_dupl_find MESSAGE-ID zmc_qm001.
DATA: gt_mseg TYPE TABLE OF mseg,
gs_mseg LIKE LINE OF gt_mseg,
cp_mseg LIKE LINE OF gt_mseg.
SELECT mblnr
mjahr
zeile
bwart
xauto
matnr
werks
lgort
charg
insmk
zusch
zustd
sobkz
lifnr
kunnr
kdauf
kdpos
INTO CORRESPONDING FIELDS OF TABLE gt_mseg
FROM mseg
UP TO 500 ROWS
WHERE budat_mkpf = '20170501'
order by PRIMARY KEY.
gs_mseg-mblnr = '4910157785'.
gs_mseg-mjahr = '2017'.
gs_mseg-zeile = '0002'.
append gs_mseg to gt_mseg.
gs_mseg-mblnr = '4910157956'.
gs_mseg-mjahr = '2017'.
gs_mseg-zeile = '0003'.
append gs_mseg to gt_mseg.
SORT gt_mseg BY mblnr mjahr zeile.
DATA: all_cnt TYPE i,
chk_cnt TYPE i.
LOOP AT gt_mseg INTO gs_mseg.
cp_mseg = gs_mseg.
ADD 1 TO all_cnt.
AT NEW zeile.
ADD 1 TO chk_cnt.
IF chk_cnt <> all_cnt.
"바로 이전 데이타에서 중복 발생
WRITE:/ cp_mseg-mblnr, AT 20 cp_mseg-mjahr, AT 30 cp_mseg-zeile.
all_cnt = all_cnt - 1.
ENDIF.
ENDAT.
ENDLOOP.
단순하게 중복된 데이타가 있는지만 check 하고자 할때는
IT_ERR[] = ITBA[].
DELETE ADJACENT DUPLICATES FROM IT_ERR.
if sy-subrc = 0.
Message E123(ZK_MSGCLS).
endif.
'SAP Program > ABAP' 카테고리의 다른 글
SCI check 항목 Level 조정 (0) | 2017.12.01 |
---|---|
abap sci tool setting (0) | 2017.11.27 |
Internal table data to xml (0) | 2017.11.22 |
XML을 Internal table로 보내기 (0) | 2017.11.22 |
GUI Status 생성시 덤프 발생하는 경우 (0) | 2017.11.20 |
글
Internal table data to xml
REPORT y_itab_to_xml.
*----------------------------------------------------------------------*
* PANTALLA SELECCION *
PARAMETERS: gk_ruta TYPE rlgrap-filename.
* PANTALLA SELECCION *
*----------------------------------------------------------------------*
DATA: lt_y042 TYPE TABLE OF yqmt_042.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* START OF SELECTION *
START-OF-SELECTION.
PERFORM llena_accesos.
PERFORM descarga_xml.
END-OF-SELECTION.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* FORM LLENA_ACCESOS *
FORM llena_accesos.
SELECT * FROM yqmt_042
INTO CORRESPONDING FIELDS OF TABLE lt_y042.
ENDFORM.
* FORM LLENA_ACCESOS *
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
* FORM DESCARGA_XML *
FORM descarga_xml.
DATA: l_dom TYPE REF TO if_ixml_element,
m_document TYPE REF TO if_ixml_document,
g_ixml TYPE REF TO if_ixml,
w_string TYPE xstring,
w_size TYPE i,
w_result TYPE i,
w_line TYPE string,
it_xml TYPE dcxmllines,
s_xml LIKE LINE OF it_xml,
w_rc LIKE sy-subrc.
DATA: xml TYPE dcxmllines.
DATA: rc TYPE sy-subrc,
BEGIN OF xml_tab OCCURS 0,
d LIKE LINE OF xml,
END OF xml_tab.
CLASS cl_ixml DEFINITION LOAD.
g_ixml = cl_ixml=>create( ).
CHECK NOT g_ixml IS INITIAL.
m_document = g_ixml->create_document( ).
CHECK NOT m_document IS INITIAL.
WRITE: / 'Converting DATA TO DOM 1:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
* name = 'ACCESOS'
* dataobject = accesos[]
name = 'LT_Y042'
dataobject = lt_y042[]
IMPORTING
data_as_dom = l_dom
CHANGING
document = m_document
EXCEPTIONS
illegal_name = 1
OTHERS = 2.
IF sy-subrc = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
sy-subrc.
ENDIF.
CHECK NOT l_dom IS INITIAL.
w_rc = m_document->append_child( new_child = l_dom ).
IF w_rc IS INITIAL.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
w_rc.
ENDIF.
CALL FUNCTION 'SDIXML_DOM_TO_XML'
EXPORTING
document = m_document
IMPORTING
xml_as_string = w_string
size = w_size
TABLES
xml_as_table = it_xml
EXCEPTIONS
no_document = 1
OTHERS = 2.
IF sy-subrc = 0.
WRITE 'Ok'.
ELSE.
WRITE: 'Err =',
sy-subrc.
ENDIF.
LOOP AT it_xml INTO xml_tab-d.
APPEND xml_tab.
ENDLOOP.
DATA: lv_filename TYPE string.
lv_filename = gk_ruta.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = lv_filename
CHANGING
data_tab = xml_tab[]
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
'SAP Program > ABAP' 카테고리의 다른 글
abap sci tool setting (0) | 2017.11.27 |
---|---|
Internal table에서 중복 데이타 찾기 (0) | 2017.11.23 |
XML을 Internal table로 보내기 (0) | 2017.11.22 |
GUI Status 생성시 덤프 발생하는 경우 (0) | 2017.11.20 |
BADI 생성/조회 t-code (0) | 2017.11.03 |
글
XML을 Internal table로 보내기
REPORT y_test_xml MESSAGE-ID zmc_qm001.
PARAMETERS: p_filnam TYPE localfile OBLIGATORY
DEFAULT 'C:\test_xml4.xml'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filnam.
DATA: l_v_fieldname TYPE dynfnam.
l_v_fieldname = p_filnam.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = l_v_fieldname
IMPORTING
file_name = p_filnam.
START-OF-SELECTION.
TYPES:
BEGIN OF ty_tab,
name TYPE string,
value TYPE string,
depth TYPE i,
END OF ty_tab.
DATA:
lcl_xml_doc TYPE REF TO cl_xml_document,
v_subrc TYPE sysubrc,
v_node TYPE REF TO if_ixml_node,
v_child_node TYPE REF TO if_ixml_node,
v_root TYPE REF TO if_ixml_node,
v_iterator TYPE REF TO if_ixml_node_iterator,
v_nodemap TYPE REF TO if_ixml_named_node_map,
v_count TYPE i,
v_index TYPE i,
v_attr TYPE REF TO if_ixml_node,
v_name TYPE string,
v_prefix TYPE string,
v_value TYPE string,
v_depth TYPE i,
v_char TYPE char2.
DATA:
itab TYPE STANDARD TABLE OF ty_tab,
wa TYPE ty_tab.
CREATE OBJECT lcl_xml_doc.
CALL METHOD lcl_xml_doc->import_from_file
EXPORTING
filename = p_filnam
RECEIVING
retcode = v_subrc.
CHECK v_subrc = 0.
v_node = lcl_xml_doc->m_document.
CHECK NOT v_node IS INITIAL.
v_iterator = v_node->create_iterator( ).
v_node = v_iterator->get_next( ).
WHILE NOT v_node IS INITIAL.
CASE v_node->get_type( ).
WHEN if_ixml_node=>co_node_element.
v_name = v_node->get_name( ).
v_nodemap = v_node->get_attributes( ).
v_depth = v_node->get_depth( ).
IF NOT v_nodemap IS INITIAL.
* attributes
v_count = v_nodemap->get_length( ).
DO v_count TIMES.
v_index = sy-index - 1.
v_attr = v_nodemap->get_item( v_index ).
v_name = v_attr->get_name( ).
v_prefix = v_attr->get_namespace_prefix( ).
v_value = v_attr->get_value( ).
* v_depth = v_node->get_depth( ).
ENDDO.
ENDIF.
WHEN if_ixml_node=>co_node_text OR
if_ixml_node=>co_node_cdata_section.
* text node
v_value = v_node->get_value( ).
* v_depth = v_node->get_depth( ).
MOVE v_value TO v_char.
IF v_char <> cl_abap_char_utilities=>cr_lf.
wa-name = v_name.
wa-value = v_value.
wa-depth = v_depth.
APPEND wa TO itab.
CLEAR wa.
ENDIF.
ENDCASE.
* advance to next node
v_node = v_iterator->get_next( ).
ENDWHILE.
LOOP AT itab INTO wa.
WRITE: / 'Name :', wa-name, AT 30 'Valeu:', wa-value, AT 60 'Depth:', wa-depth.
ENDLOOP.
'SAP Program > ABAP' 카테고리의 다른 글
Internal table에서 중복 데이타 찾기 (0) | 2017.11.23 |
---|---|
Internal table data to xml (0) | 2017.11.22 |
GUI Status 생성시 덤프 발생하는 경우 (0) | 2017.11.20 |
BADI 생성/조회 t-code (0) | 2017.11.03 |
BP Relation Table (0) | 2017.11.02 |
글
Non Unicode system에서 받은 한글 파일 작업시
Non Unicode System에서 한글(2Byte 한글)이 포함된 Text File을
Unicode SAP System에서 읽을때 한글을 1Byte 씩 읽게되면 문제가 발생하는데
이를 해결하는 방법
DATA: BEGIN OF GT_DATA OCCURS 0,
PONO(6) TYPE C,
ZEVT_DTTM(19) TYPE C,
ZBFEVT(3) TYPE C,
ZAFEVT(3) TYPE C,
EVT(3) TYPE C,
ZFAULT(630) TYPE C,
END OF GT_DATA.
DATA: BEGIN OF GT_REC OCCURS 0,
TDATA(999) TYPE C,
END OF GT_REC.
DATA:GT_TEST LIKE TABLE OF GT_REC WITH HEADER LINE.
DATA: W_DSN(500) TYPE C,
W_FILEPATH(500) TYPE C,
W_REC(999) TYPE C,
W_CNV(999) TYPE C.
FORM DATA_UPLOAD USING U_FILENM.
DATA: LW_FILENM TYPE STRING.
DATA: W_STR TYPE STRING.
DATA: CP_TAB TYPE NLS_LANGU_CP_TAB,
L_WA TYPE NLS_LANGU_CP_LINE,
CC TYPE REF TO CL_NLS_STRUC_CONTAINER.
DATA: BEGIN OF HEAD OCCURS 0,
H_STR(1056),
END OF HEAD.
W_DSN = U_FILENM.
PERFORM OPEN_DATASET.
IF G_ERR2 IS INITIAL.
PERFORM READ_DATASET.
ENDIF.
PERFORM CLOSE_DATASET.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DATA_UPLOAD
FORM OPEN_DATASET .
DATA MESS TYPE STRING.
CLEAR : G_ERR2.
OPEN DATASET W_DSN FOR INPUT IN LEGACY TEXT MODE CODE PAGE '8500'.
IF SY-SUBRC = 8.
MESSAGE S000 WITH 'File not exists'.
G_ERR2 = 'X'.
EXIT.
ENDIF.
IF SY-SUBRC <> 0.
MESSAGE S000 WITH 'File not exists'.
G_ERR2 = 'X'.
EXIT.
ENDIF.
ENDFORM. " OPEN_DATASET
FORM READ_DATASET .
DATA: CP_TAB TYPE NLS_LANGU_CP_TAB,
L_WA TYPE NLS_LANGU_CP_LINE,
L_CODEPAGE TYPE CPCODEPAGE,
CC TYPE REF TO CL_NLS_STRUC_CONTAINER,
L_BUF(999) TYPE C.
CLEAR : GT_DATA, GT_DATA[].
* NON UNICODE(한글 2바이트로 인식)
DO.
CLEAR W_REC.
READ DATASET W_DSN INTO W_REC.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
GT_REC = W_REC.
APPEND GT_REC.
ENDDO.
LOOP AT GT_REC.
L_WA-LANGU = '3'.
L_WA-CODEPAGE = '8500'.
INSERT L_WA INTO TABLE CP_TAB.
CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).
TRY.
CALL METHOD CC->STRUC_TO_CONT
EXPORTING
STRUC = GT_REC
LANGU = '3'
IMPORTING
CONT = GT_TEST-TDATA.
CATCH CX_SY_CONVERSION_CODEPAGE .
CATCH CX_PARAMETER_INVALID_RANGE .
ENDTRY.
CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).
TRY.
CALL METHOD CC->CONT_TO_STRUC
EXPORTING
CONT = GT_TEST-TDATA
LANGU = '3'
IMPORTING
STRUC = GT_DATA.
CATCH CX_SY_CONVERSION_CODEPAGE .
CATCH CX_PARAMETER_INVALID_RANGE .
ENDTRY.
APPEND GT_DATA.
ENDLOOP.
ENDFORM. " READ_DATASET
글
GUI Status 생성시 덤프 발생하는 경우
GUI Status 생성시 덤프 발생하는 경우 조치 방법
LSMPEF30의 847 Line의
new_adm-actcode 에 X 값을 지워준다.
'SAP Program > ABAP' 카테고리의 다른 글
Internal table data to xml (0) | 2017.11.22 |
---|---|
XML을 Internal table로 보내기 (0) | 2017.11.22 |
BADI 생성/조회 t-code (0) | 2017.11.03 |
BP Relation Table (0) | 2017.11.02 |
MCHBH LFGJA LFMON Max 값 select (0) | 2017.10.26 |