안녕하세요. 요것때문에 삽질좀 하고있어서 도움좀 부탁드릴까 합니다.
저희회사는 SAP에서 입고시에 RFID 태그인쇄를 하게되어있는데요.
RFID 태그인쇄는 C# Winfrom 프로그램으로 만들어서 SAP에서 호출해서 사용하게 되어있습니다.
이번에 프린트 장비가 바뀌어서 C# 프로그램을 새로운 DLL 컴포넌트를 참조해서 개발 하였습니다.
SAP프로그램에서 호출형태는 바뀐 부분이 없습니다.
그런데 문제는 SAP에서 호출해서 실행할때는 프린트가 안되는데 C#으로 만들어진 실행파일을 실행할때는 된다는 것입니다.
(Thread..Process..등의 여러문제를 생각하고 별짓(?) 다해봤습니다)
아래는 SAP에서 프린트 프로그램 호출 형태입니다. 간단합니다.
c#으로 만들어진 exe파일 실행하면서 argument 넘겨주는게 전부입니다. 물론 데이타는 정상적으로 넘어갑니다.
==========================================================
* --> RFID PROGRAM 구동
* gl_argument 는 계약번호/차수/플랜트 형태로 들어갑니다.
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
commandline = gl_argument
program = 'C:TagPrint.exe'
EXCEPTIONS
frontend_error = 1
no_batch = 2
prog_not_found = 3
illegal_option = 4
gui_refuse_execute = 5
OTHERS = 6.
===========================================================
C#에서 만들어진 소스도 너무 간단해서 보여드립니다.
USB로 연결되어진 프린터에 출력할 데이타 양식에 넣고 쓰레드 돌리면서 넘깁니다.
===========================================================
TagPrint_DLL.setPrintPort("USB");
Thread thPrint = new Thread(new ThreadStart(PrintThread_EMPTY));
thPrint.Start();
TagPrint_DLL.setFileName(@"tagPrint_data태그발행.txt");
sTagData = "";
sTagData = matno + "!!"; //자재번호
sTagData += zserial + "!!"; //일련번호
sTagData += mname + "!!"; //품명
sTagData += unit + "!!"; //단위
sTagData += qg + "!!"; //품질등급
sTagData += sg + "!!"; //저장등급
sTagData += findate + "!!"; //입고일
sTagData += pono + "!!"; //PO번호
sTagData += spyname + "!!"; //공급자
sTagData += mblnr + "!!"; //입고문서
sTagData += reqman + "!!"; //관리자
sTagData += epc_code + "!!"; //태그번호(Writing)
sTagData += "rn";
TagPrint_DLL.setTagDts(sTagData);
StringBuilder sb = new StringBuilder(512);
int iResult = TagPrint_DLL.TagPrint(sb);
===========================================================
요놈이 직접 exe파일을 실행할때는 인쇄도 잘되는데 SAP에서 호출할때는 그냥 먹통입니다.
그래서 결론을 봤습니다. "WS_EXECUTE" 호출 펑션을 바꿔보자..
그래서 바꿧습니다. 아래와 같이..
CALL METHOD cl_gui_frontend_services=>execute
EXPORTING
application = lc_prog
parameter = lc_param
synchronous = 'X'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
OTHERS = 8
위와같은 메소드로 바꿧지요. 그래도 현상은 똑같습니다.
sap에서 혹시 Legacy 시스템을 호출해서 프린트를 한다던지 유사한 사례가 있으신분의
칼날같은 댓글을 기다려 봅니다.
해결했습니다.
원인은 SAP에서 Legacy 시스템을 호출할경우,
Legacy시스템에서 상대경로(@(rfidrfid.exe) 로 해두었던 경로들은 인식을 하지못하더군요.
혹시 SAP에서 Legacy시스템을 호출해서 쓰는경우 Legacy시스템내에 경로는 반드시 절대경로(C:rfidrfid.exe)를 사용하시기 바랍니다.
저와같이 삽질하지 마세요 ㅠㅠ