메뉴 건너뛰기

SAP 한국 커뮤니티

<img src=2.gif>GOS사용한 파일 attach (백그라운드)

ripencarrot 2010.07.27 03:10 조회 수 : 6736

안녕하세요.


GOS를 사용하여 최종적으로는 3rd party에서 I/F받는 파일을


구매처 마스터에 백그라운드로 첨부시키려고 하는데요.


아래와 같이 두 가지 소스를 테스트해보았는데 잘 되지 않네요.


오류 해결과 함께, PDF 뿐 아니라 XLS, TXT 등 어떤 파일을 첨부하더라도


기능이 정상적으로 실행되려면 어떤 처리가 필요한지 아시는 분은 답변 부탁드립니다.~~


 


1. GUI_UPLAOD 함수를 사용


   : 업로드 후에, 마스터의 attach된 파일을 열어보면, 확장자명이 잘못되었다는 오류가 남


2. OPEN DATASET 사용


   : 파일 내용을 읽어들이지 못함.


 


 


 


 


<source1>


 


REPORT  ZTEST003.


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 : LV_DOC_SIZE TYPE I.
DATA : L_FILE_LINES TYPE I.


DATA: P_BOTYPE LIKE OBL_S_PBOR-TYPEID VALUE 'LFA1',
           P_DOCTY LIKE OBL_S_PBOR-TYPEID VALUE 'MESSAGE',
           P_MSGTYP LIKE SOFM-DOCTP VALUE 'ATTA', "첨부파일
           P_RELTYP LIKE MDOBLREL-RELTYPE VALUE 'ATTA',
           P_DOKNR(20) VALUE '_ACNTR0101',
           P_LIFNR TYPE LIFNR VALUE '0000100063'.


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,
            DOCYT 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.


DATA: RESULT TYPE ABAP_BOOL.


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.
*ENDCASE.


SWC_CREATE_OBJECT LO_MESSAGE 'MESSAGE' LV_MESSAGE_KEY.
CONCATENATE 'C:TEMP'  P_DOKNR '.' LV_XDOCTYPE INTO LV_FILE.
CONDENSE LV_FILE NO-GAPS.


CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
  EXPORTING
    FILE   = LV_FILE
  RECEIVING
    RESULT = RESULT.
IF RESULT <> 'X'.
  EXIT.
ENDIF.


CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME   = LV_FILE
    FILETYPE   = 'BIN'
  IMPORTING
    FILELENGTH = LV_FILELENGTH
  TABLES
    DATA_TAB   = LT_DOC_CONTENT.


SWC_CONTAINER LT_MESSAGE_CONTAINER.
SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTTITLE' P_DOKNR.
SWC_SET_ELEMENT LT_MESSAGE_CONTAINER 'DOCUMENTLANGU' SY-LANGU.
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_ELEMENT 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_LIFNR.
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.


 


 


 


 


 


<source2>


 


*&---------------------------------------------------------------------*
*& Report  ZTEST005
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*


REPORT  ZTEST005.


*---------------------------------------------------------------------*
* Function   : We need to maintain links between Business Object and
*              the attachment.Attachment document is basiclally a
*              business object of type 'MESSAGE'.In order to maintain
*              links, first the attachment will be crated as Business
*              Object of type 'MESSAGE' using Message.Create method.
*
*              This program can be used to attach PC documents eg. PDF
*              ,DOC,TXT,GIF etc. to a SAP Business Object e.g Purchase
*              Order etc. You should pass the correct message type
*              [ P_MSGTYP ] as per the file extension[e.g. PDF,DOC etc].
*
*              The code below is suitable for 4.6C+, though you might
*              like to use the commented code, instead, for 4.7+
*---------------------------------------------------------------------*
* Include for BO macros
  INCLUDE : <cntn01>.


* Load class.
*  CLASS CL_BINARY_RELATION definition load.


  PARAMETERS:
*  Object_a
*   P_BOTYPE LIKE obl_s_pbor-typeid DEFAULT 'BUS2031', " e.g. 'BUS2012'
*   P_BO_ID  LIKE OBL_S_PBOR-INSTID DEFAULT '0002029816',
   P_BOTYPE LIKE borident-OBJTYPE DEFAULT 'LFA1', " e.g. 'BUS2012'
   P_BO_ID  LIKE borident-OBJKEY DEFAULT '0000100063',
                                                    " Key e.g. PO No.


*  Object_b
   P_MSGTYP LIKE SOFM-DOCTP  DEFAULT 'PDF',
   P_DOCTY  LIKE borident-OBJTYPE DEFAULT 'MESSAGE',


*  Relationship
   P_RELTYP  LIKE BRELTYP-RELTYPE DEFAULT 'ATTA',


*  File Name
   P_FNAME like rlgrap-filename Default 'C:TEMP_ACNTR0101.pdf'.


  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 SOLI-LINE
                             with header line.


*----------------------------------------------------------------------*


* First derive the Attachment's ( MESSAGE )document type.
  P_DOCTY = 'MESSAGE'.
  CASE P_RELTYP.
*   In case of URls
    WHEN 'URL'.
      P_MSGTYP = 'URL'.
*   In case of Notes / Private Notes
    WHEN 'NOTE' OR 'PNOT'.
      P_MSGTYP = 'RAW'.
    WHEN 'ATTA'.
*     Take given parameter e.g. 'DOC', 'PDF' etc.
*     P_MSGTYP = 'EXT'.
    WHEN OTHERS.
*    ....exit
    EXIT.
  ENDCASE.
*----------------------------------------------------------------*


* Create an initial instance of BO 'MESSAGE' - to call the
* instance-independent method 'Create'.
  swc_create_object LO_MESSAGE 'MESSAGE' LV_MESSAGE_KEY.


* define container to pass the parameter values to the method call
* in next step.
  swc_container LT_MESSAGE_CONTAINER.


* Populate container with parameters for method
  swc_set_element LT_MESSAGE_CONTAINER 'DOCUMENTTITLE' 'TestDocument'.
  swc_set_element LT_MESSAGE_CONTAINER 'DOCUMENTLANGU' 'E'.
  swc_set_element LT_MESSAGE_CONTAINER 'NO_DIALOG'     'X'.
  swc_set_element LT_MESSAGE_CONTAINER 'DOCUMENTNAME'   P_DOCTY.
  swc_set_element LT_MESSAGE_CONTAINER 'DOCUMENTTYPE'   P_MSGTYP.



* In case of URLs..it should be concatenated with &KEY& in the begining.
  CASE P_MSGTYP.
  WHEN 'URL'.
    LT_DOC_CONTENT = '&KEY&http://www.rmtiwari.com' .
    append LT_DOC_CONTENT.
* In case of Notes or Private Notes, get the data from files on appl
* server or from wherever(? - remember background).
  WHEN 'RAW'.
    LT_DOC_CONTENT = 'Hi How r u?' .
    append LT_DOC_CONTENT.


* In case of PC File attachments
  WHEN OTHERS.
    OPEN DATASET P_FNAME FOR INPUT in binary mode.
    IF SY-subrc EQ 0.
      DO.
        READ DATASET P_FNAME INTO LT_DOC_CONTENT.
        IF SY-subrc EQ 0.
          append LT_DOC_CONTENT.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
      CLOSE DATASET P_FNAME.
    ENDIF.
  ENDCASE.



* 'DocumentContent' is a multi-line element ( itab ).
  swc_set_table LT_MESSAGE_CONTAINER 'DocumentContent' LT_DOC_CONTENT.


* Size is required in case of File attachments
  data : LV_DOC_SIZE type i.
  data : L_FILE_LINES type i.


  DESCRIBE TABLE LT_DOC_CONTENT LINES L_FILE_LINES.


  READ TABLE LT_DOC_CONTENT INDEX L_FILE_LINES.


  LV_DOC_SIZE = ( 255 * ( L_FILE_LINES - 1 ) ) +
              STRLEN( LT_DOC_CONTENT ).


  swc_set_element LT_MESSAGE_CONTAINER 'DOCUMENTSIZE'   LV_DOC_SIZE .


* Refresh to get the reference of create 'MESSAGE' object for attachment
  swc_refresh_object LO_MESSAGE.
  swc_call_method LO_MESSAGE 'CREATE' LT_MESSAGE_CONTAINER.


* Get Key of new object
  swc_get_object_key LO_MESSAGE LV_MESSAGE_KEY.


* Now we have attachment as a business object instance. We can now
* attach it to our main business object instance.


* Create main BO object_a
* data: LO_IS_OBJECT_A type SIBFLPORB.  "type SIBFLPORB is unknown, so I
  data: LO_IS_OBJECT_A type BORIDENT.


  LO_IS_OBJECT_A-OBJKEY = P_BO_ID.
  LO_IS_OBJECT_A-OBJTYPE = P_BOTYPE.
*  LO_IS_OBJECT_A-CATID  = 'BO'.


* Create attachment BO object_b
* data: LO_IS_OBJECT_B type SIBFLPORB.    "type SIBFLPORB is unknown
  data: LO_IS_OBJECT_B type BORIDENT.


  LO_IS_OBJECT_B-OBJKEY = LV_MESSAGE_KEY.
  LO_IS_OBJECT_B-OBJTYPE = P_DOCTY.
*  LO_IS_OBJECT_B-CATID  = 'BO'.


*TRY.
*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.


call function 'BINARY_RELATION_CREATE'
  EXPORTING
    obj_rolea    = LO_IS_OBJECT_A
    obj_roleb    = LO_IS_OBJECT_B
    relationtype = P_RELTYP
  EXCEPTIONS
    others       = 1.


* Check if everything OK...who cares!!
commit work.


 


 

번호 제목 글쓴이 날짜 조회 수
5167 <img src=3.gif>Excel을 업로드하여 alv로 출력하는것에 관하여 질문입니다. [4] GuyLiAN 2010.08.10 1946
5166 <img src=1.gif>.[도와주세욤]수불부 조회시 수불기간 별 제외 자재 리스트에서 빼려고 합니다. SAP너이늠 2010.08.10 2400
5165 <img src=3.gif>EXCEL파일을 업로드하여 CHECKBOX에 체크된 것만 저장하는 기능 [7] 그저조아 2010.08.10 2067
5164 <img src=2.gif>abap 프로그램 종류중 enhancement,add-on 이 먼가요? [2] 초짜 2010.08.09 1939
5163 <img src=3.gif>클래스를 이용하는 방법 말고 alv툴바를 보이게 하는 방법을 알고싶습니다. [2] 쌔끈남 2010.08.09 1489
5162 <img src=3.gif>프로그램 조회에 대해 질문이 들어와서 이렇게 글을 올립니다~! 도와주세요~ [6] 래피드 2010.08.09 1515
5161 <img src=2.gif>대용량 데이타에서 동적으로 distinct 할 수 있는 방법문의 [1] 뽀그리 2010.08.08 1663
5160 <img src=2.gif>ALV 프린트 기능 USER_COMMAND 로 구현하는 방법 문의 합니다. [4] 은근 2010.08.07 2270
5159 <img src=3.gif><img src=1.gif>ftp 펑션을 통해 파일서버에 첨부파일을 넘기는중 bsp 화면에서 펑션을 받아 사용하려하면 beginer 2010.08.07 1758
5158 <img src=3.gif>패키지에 종속된 아밥오브젝트관련 시스템 테이블 질문입니다. [2] 아밥맨 2010.08.06 1514
5157 <img src=2.gif>스크린 페인터에서만 한글이 입력이 안 돼요... [1] 초짜 2010.08.06 1493
5156 <img src=3.gif>모듈풀 프로그램에서 screen 화면에 selection options 기능 구현 가능한가요. [5] 태사성 2010.08.06 2166
5155 <img src=2.gif>라디오 파라미터 버튼을 본문 셀렉터에 쓸 때 오류가 뜨네요 ㅠㅠ 도와주세요 ㅠㅠㅠㅠ [8] file 오렌지겅주님 2010.08.06 2004
5154 <img src=1.gif>혹시..스크린 업로드 할때 이런 에러 보신적이 있으신가요?? file 아상[vaya con dios] 2010.08.06 1805
5153 <img src=3.gif>[re] 급해요 !!! 화면에 옵션설정 하는 방법좀 알려주세요 . 옵션창이 어딨는지는 압니다. 그림첨부해요 file 특정단어 2010.08.06 1597
5152 <img src=2.gif>급해요 !!! 화면에 옵션설정 하는 방법좀 알려주세요 . 옵션창이 어딨는지는 압니다. 그림첨부해요 [12] file 오렌지겅주님 2010.08.06 4121
5151 <img src=3.gif>[엑셀업로드]Excel 파일을 ALV로 나타내게하는 방법 질문입니다. [1] 그저조아 2010.08.05 2091
5150 <img src=2.gif>타시스템(Web)에서 조회조건 입력후 RFC를 통한 프린트 [2] 워너송 2010.08.05 1553
5149 <img src=3.gif>필드안에 한글이 포함되어있을경우 포함되어있음을 알수있는지요?? [4] beginer 2010.08.05 1670
5148 <img src=3.gif>[엑셀] 질문하나 드리고자 합니다. [4] 쭈니 2010.08.05 1284