홈 · 개발 참고자료

개발 참고자료

[파워빌더] 파워빌더에서 SAP RFC 호출하가...RFC 호출

작성자
왕희복
작성일
2015-09-23
조회
11340
분류
파워빌더
DW의 속성을 이용하여 조상단에서


RFC 이름과 같은 기본정보를 인스턴스 변수로 저장해두고


유저오브젝트로 자동 호출하도록 만들어 둔다.


쿼리의 컬럼이름은 RFC 의 항목이름으로 맞춰서 사용하게 되면 DW를 만드는 것만으로도


RFC호출을 하게 만들수 있다.




DW조상단을 하나 만들어서


인스턴스 변수로 호출할 RFC 이름을 저장해 둔다.


ex : adw.is_sap_rfc_name_process 이런식으로 호출해서 사용할 것임




eZsap 라는 유저오브젝트를 만들어서 사용한다.




아래 스크립트는 사용중이 스크립트에서 가져온거라 그대로 사용하면 에러가 사방에서....


그냥 이런방식도 있다라고 참조만 하심이




Boolean lb_Receive
String args_cols[], args_datas[]
String rs_ev_type, rs_ev_msg


args_cols[1] = 'IV_ARBPL_F'
args_cols[2] = 'IV_ARBPL_T'
args_cols[3] = 'IV_WKDAT_F'
args_cols[4] = 'IV_WKDAT_T'
args_cols[5] = 'IV_AUFNR_F'
args_cols[6] = 'IV_AUFNR_T'
args_cols[7] = 'IV_TYPE'




args_datas[1] = ls_arbpl
args_datas[2] = ls_arbpl
args_datas[3] = ls_sdt
args_datas[4] = ls_edt
args_datas[5] = ls_aufnr
args_datas[6] = ls_aufnr
args_datas[7] = ls_gubun




/*


args_cols[] : 이거슨 RFC 파라메타의 이름


args_datas[] : 이거슨 RFC로 넘길 실제 데이터


rs_ev_type : 리턴 타입 ( S:성공 , E:오류)


rs_ev_msg : 리턴 메시지


*/


lb_Receive = eZsap.rfc_call_dw( dw_list, args_cols[], args_datas[], rs_ev_type, rs_ev_msg )




/*************/


eZsap.rfc_call_dw


/*************/




/*
DW 하나 보낼때 사용한다.
args_cols[] : 이거슨 RFC 파라메타의 이름
args_datas[] : 이거슨 RFC로 넘길 실제 데이터
rs_ev_type : 리턴 타입 ( S:성공 , E:오류)
rs_ev_msg : 리턴 메시지
*/




Oleobject SAP_Rfc
Oleobject SAP_Table[]


Boolean lb_Return = true
Boolean lb_SAP_Rfc_CALL = false
Long mnp, increase, ll_args, ll_DwCnt
Long ll_Rcnt[]
String ls_data, ls_tblNm, ls_RfcNm, ls_tbl_log, ls_Exception




ls_RfcNm = adw.is_sap_rfc_name_process


/* RFC 이름 셋팅 */
SAP_Rfc = Sap_OLE.Add( ls_RfcNm )




ll_args = UpperBound( args_cols[] )
for mnp = 1 to ll_args
//SAP_Rfc.exports("IV_AUFNR", "20000269")
SAP_Rfc.exports(args_cols[MNP], args_datas[MNP])
next


any la_call[]




/* SEND */
if lb_Return then


Try
lb_SAP_Rfc_CALL = SAP_Rfc.CALL

Catch (RuntimeError Re)
ls_Exception = Re.GetMessage()

End Try



if lb_SAP_Rfc_CALL = true then

rs_ev_type = func.nvl(SAP_Rfc.imports("EV_TYPE").VALUE, 'S')
rs_ev_msg = SAP_Rfc.imports("EV_MSG").VALUE


if rs_ev_type <> 'S' then
Messagebox("SAP 오류 메시지 :: EV_TYPE :: " + rs_ev_type, rs_ev_msg)
lb_Return = false
else
/* MNAIN */
increase++
ls_tblNm = adw.getsap_tbl_name_process_all()
is_TableS[UpperBound(is_TableS[]) + 1] = ls_tblNm
SAP_Table[increase] = SAP_Rfc.TABLES.Item( ls_tblNm )
ll_Rcnt[increase] = SAP_Table[increase].Rowcount
if ll_Rcnt[increase] >= 1 then
this.rfc_call_dw_setitem( SAP_Table[increase], adw, ls_tbl_log )
end if
end if
else
Messagebox("SAP_Rfc.CALL 오류", "RFC 실행 오류 ~r~n~r~n" + ls_Exception + "~r~n~r~n" + String(SAP_Rfc.Exception) )
end if
end if






Long ll_Cnt
ll_Cnt = UpperBound(SAP_Table[])
for mnp = 1 to ll_cnt
Destroy SAP_Table[MNP]
next
if isValid(SAP_Rfc) then Destroy SAP_Rfc




/***********************************/


함수 : rfc_call_dw_setitem


/***********************************/


Boolean lb_Return = true
Long i, Row, mnp, ll_Rcnt, ll_colCnt
Dec ld_data
String ls_ColNm, ls_data, ls_temp, ls_txtNm, ls_Type


ll_Rcnt = SAP_Table.Rowcount
ll_colCnt = Long(adw.Describe("DataWindow.Column.Count"))
ls_temp = adw.Classname()


adw.Reset()


for Row = 1 to ll_Rcnt
MNP = adw.insertRow(0)
for i = 1 to ll_colCnt
ls_ColNm = Upper(adw.Describe("#"+String(i)+".Name"))
choose case ls_ColNm
case 'DEV_END_DEV'
/* 여기에서 입력을 멈춘다. */
exit
end choose

ls_Type = adw.Describe(ls_ColNm+".ColType")
Choose Case ls_Type
Case "number"
ld_data = Long(SAP_Table.cell(Row, ls_ColNm))
adw.setitem( MNP, i, ld_data)
Case Else
if Mid(ls_Type, 1, 4) = "char" then
ls_data = func.n2b(SAP_Table.cell(Row, ls_ColNm))
adw.setitem( MNP, i, ls_data)

elseif left(ls_Type,7) = "decimal" or left(ls_Type,4) = "long" then


ld_data = Long(SAP_Table.cell(Row, ls_ColNm))
adw.setitem( MNP, i, ld_data)
else
ls_data = func.n2b(SAP_Table.cell(Row, ls_ColNm))
adw.setitem( MNP, i, ls_data)
end if
End Choose


ls_txtNm = adw.Describe(ls_colNm + "_t.Text")
if ls_txtNm = '!' or ls_colNm = '?' or ls_colNm = '' then
ls_txtNm = ls_colNm
end if

rs_Rfc_txt += String(today(), "yyyy:mm:dd") + " " + String(now()) + " :: ["+ ls_colNm +"] ==== [" + ls_data + "] :: " + ls_txtNm + " ~r~n"

next
next


Return lb_Return