GOS – In Background GOS(Generic Object Services) – In Backgroud a. 구매요청(Tcode: ME51N) 시 GOS를 이용하여 첨부파일이나 제품의 도면을 Backgroud로 첨부할 수 있는 예제를 소개합니다. b. 도면뿐만 아니라 구매요청 시 관련 문서를 첨부할 수도 있습니다. 상품코드와 도면번호를 DMS(Tcode: CV01N)에서 연결하면 프로그램을 이용하여 자동으로 첨부할 수 있습니다. c. 관련테이블 - SRGBTBREL : Relationships in GOS Environment - SOOD : SAPoffice: Object definition d. 참고 사이트 http://friendlyabaper.blogspot.com/2008/07/oh-my-gos.html http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/2519 http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/3399 ☞ 구매요청에 도면 파일이 첨부된 예 4
☞ GOS를 이용하여 Background 작업으로 파일을 첨부하는 예제( Subroutine으로 생성함) 인터널 테이블에서 LOOP를 이용하여 작업하여 여러 건의 구매요청에 도면첨부 가능 FORM ATTCH_FILE_TO_GOS USING P_BANFN P_DOKNR CHANGING P_ATTCH P_INSTID. INCLUDE : <CNTN01>. CLASS CL_BINARY_RELATION DEFINITION LOAD. CLASS CL_OBL_OBJECT DEFINITION LOAD. DATA: LV_FILE TYPE STRING, LV_FILELENGTH TYPE I, LV_XFNAME(255), LV_XDOCTYPE TYPE C LENGTH 3 VALUE 'pdf'. DATA: LV_FULLNAME LIKE RLGRAP-FILENAME, LV_FILEPATH LIKE RLGRAP-FILENAME. DATA: P_BOTYPE LIKE OBL_S_PBOR-TYPEID VALUE 'BUS2105', " e.g. ‘구매요청' P_DOCTY LIKE OBL_S_PBOR-TYPEID VALUE 'MESSAGE', P_MSGTYP LIKE SOFM-DOCTP VALUE 'ATTA', “첨부파일 P_RELTYP LIKE MDOBLREL-RELTYPE VALUE 'ATTA'. TYPES: BEGIN OF TY_MESSAGE_KEY, FOLTP TYPE SO_FOL_TP, FOLYR TYPE SO_FOL_YR, FOLNO TYPE SO_FOL_NO, DOCTP TYPE SO_DOC_TP, DOCYR TYPE SO_DOC_YR, DOCNO TYPE SO_DOC_NO, FORTP TYPE SO_FOR_TP, FORYR TYPE SO_FOR_YR, FORNO TYPE SO_FOR_NO, END OF TY_MESSAGE_KEY. DATA : LV_MESSAGE_KEY TYPE TY_MESSAGE_KEY. DATA : LO_MESSAGE TYPE SWC_OBJECT. DATA : LT_DOC_CONTENT TYPE STANDARD TABLE OF SOLIX WITH HEADER LINE.
SWC_CREATE_OBJECT LO_MESSAGE 'MESSAGE' LV_MESSAGE_KEY. 예제 P_DOCTY = 'MESSAGE'. CASE P_RELTYP. WHEN 'URL'. P_MSGTYP = 'URL'. WHEN 'NOTE' OR 'PNOT'. P_MSGTYP = 'RAW'. WHEN 'ATTA'. “파일첨부 P_MSGTYP = 'EXT'. WHEN OTHERS. EXIT. ENDCASE. SWC_CREATE_OBJECT LO_MESSAGE 'MESSAGE' LV_MESSAGE_KEY. CONCATENATE 'C:\PSGOSUPLOAD\' P_DOKNR '.pdf' INTO LV_FILE. CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST EXPORTING FILE = LV_FILE RECEIVING RESULT = RESULT. IF RESULT <> 'X'. "파일이 없으면 넘어감 ENDIF. CALL FUNCTION 'GUI_UPLOAD‘ “PC에서 업로드 FILENAME = LV_FILE FILETYPE = 'BIN' IMPORTING FILELENGTH = LV_FILELENGTH TABLES DATA_TAB = LT_DOC_CONTENT.
SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTTITLE' P_DOKNR. “첨부문서명 예제 SWC_CONTAINER LT_MESSAGE_CONTAINER. SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTTITLE' P_DOKNR. “첨부문서명 SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTLANGU' '3'. SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'NO_DIALOG' 'X'. SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTNAME' '메시지'. SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTTYPE' LV_XDOCTYPE. SWC_SET_TABLE LT_MESSAGE_CONTAINER 'CONTENT_HEX' LT_DOC_CONTENT. SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTSIZE' LV_FILELENGTH. SWC_CALL_METHOD LO_MESSAGE 'CREATE' LT_MESSAGE_CONTAINER. SWC_REFRESH_OBJECT LO_MESSAGE. SWC_GET_OBJECT_KEY LO_MESSAGE LV_MESSAGE_KEY. DATA: LO_IS_OBJECT_A TYPE SIBFLPORB. LO_IS_OBJECT_A-INSTID = P_BANFN. LO_IS_OBJECT_A-TYPEID = P_BOTYPE. LO_IS_OBJECT_A-CATID = 'BO'. DATA: LO_IS_OBJECT_B TYPE SIBFLPORB. LO_IS_OBJECT_B-INSTID = LV_MESSAGE_KEY. LO_IS_OBJECT_B-TYPEID = P_DOCTY. LO_IS_OBJECT_B-CATID = 'BO'. CALL METHOD CL_BINARY_RELATION=>CREATE_LINK EXPORTING IS_OBJECT_A = LO_IS_OBJECT_A IS_OBJECT_B = LO_IS_OBJECT_B IP_RELTYPE = P_RELTYP. COMMIT WORK. P_ATTCH = '첨부완료'. P_INSTID(46) = LV_MESSAGE_KEY(46). ENDFORM. " ATTCH_FILE_TO_GOS
2. GOS(Generic Object Services) – 구매요청 시 GOS 테이블 사용 결과 확인 a. SOOD 테이블 - SAPoffice: 오브젝트 정의 - 문서 클래스 코드(OBJTP): EXT – PC문서 - KPRO(Knowledge Provider) 의 참조 :SAP Note 904711 - SAPoffice: Where are documents physically stored? b. SRGBTBREL 테이블 - GOS 환경의 관계 구매요청번호 첨부파일명 저장방법 (KPRO를 사용)