BINARY_RELATION_CREATE

Hi experts,
I would like to call function BINARY_RELATION_CREATE, can anyone help me with parameters?
relation = 'NOTE'.
obj_rola-objkey = '100030000000022005'.
obj_rola-objtype = 'BKPF'.
obj_rolb-objtype = 'MESSAGE'.
obj_rolb-objkey  = 'FOL27000000000004RAW35000000000328'.
CALL FUNCTION 'BINARY_RELATION_CREATE'
  EXPORTING
    obj_rolea            = obj_rola
    obj_roleb            = obj_rolb
    relationtype         = relation
*   FIRE_EVENTS          = 'X'
IMPORTING
   BINREL               = BINREL
* TABLES
*   BINREL_ATTRIB        = BINREL_ATTRIB
EXCEPTIONS
   NO_MODEL             = 1
   INTERNAL_ERROR       = 2
   UNKNOWN              = 3
   OTHERS               = 4
How can I create new message (obj_rolb-objtype = 'MESSAGE')?
Best regards
Paul Smuda

OFFD is used to link an object with role APPLOBJ with an object with role OFFDOC
your order should be the first and your document the second
I think it could work as-is because APPLOBJ role is now GOSAPPLOBJ and this new role is linked to all object types
see view cluster MVCSOBLBREL (with transaction SM34)

Similar Messages

  • Create attachment with BINARY_RELATION_CREATE to BUS2081

    Hello,
    I'm trying to create attachment with BINARY_RELATION_CREATE to incoming invoice. i succeed for BKPF with objtype = 'MESSAGE', but when i try to attach for BUS2081- there is no error but i can't see the document attached not in FB03 and not in MIRO. is there another objtype that goes with BUS2081.
    Thanks
    Moshe

    i've put break-point in FM 'BINARY_RELATION_CREATE' and saw that the object key in MIRO was only with BELNR and GJAHR (without BUKRS in the begining)

  • BINARY_RELATION_CREATE Relation Type

    Hi..
    I am using FM BINARY_RELATION_CREATE in which I want to Store Business Document in MIGO. I saw some relationship type which are VONA and ATTA but it is used for Quotation and Attachment respectively.
    Please help where can I find or if you know the correct RelationType for Storing Document.
    Thanks!!!
    regards,
    Roy Anthony

    OFFD is used to link an object with role APPLOBJ with an object with role OFFDOC
    your order should be the first and your document the second
    I think it could work as-is because APPLOBJ role is now GOSAPPLOBJ and this new role is linked to all object types
    see view cluster MVCSOBLBREL (with transaction SM34)

  • Services for Object (GOS) Attachement List not showing after attachment

    Hi All,
    I have created a new entry for the Generic Object Service List and this links to a copy of the CL_GOS_SRV_ATTACHMENT_CREATE class (Create attachment) with some additional logic. However, after attaching a file, the "Attachment List" does not become available until after I re-enter the transaction. The attachment list is showing the correct attachments.
    After some (understatement...) investigation, I found that even if I try and link the new service to a unchanged copy of the CL_GOS_SRV_ATTACHMENT_CREATE service in SGOSATTR, it is not working. It is attaching fine, but the "Attachment List" entry in the Services for Object Menu is still greyed out. If I attach the original class CL_GOS_SRV_ATTACHMENT_CREATE to the newly created entry it works fine. e.g. straight after I attach a file to the transaction, the menu entry becomes available.
    I can't find where the re-draw of the GOS menu happens and hence can not determine what is going wrong. Does anybody know if this is part of the Kernel or is this actually done in ABAP ?
    Am I missing something ? Debugging including system debugging for two days now and can't find it... very frustrating.
    Any help would be appreciated.
    Thanks,
    Wouter.

    Hi Wouter,
    I had originally posted to ask if you had resolved this since I was facing the same issue, but then deleted my post when I was able to get it working. Sorry, I didn't mean to initiate a flurry of activity in such an old thread.
    My scenario is I created a new GOS service entry in table SGOSATTR using transaction SGOSM. My new service uploads attachments to an external document management system via a call to a RESTful web service. The class I use in the SGOSM entry is a custom subclass of CL_GOS_SRV_URL_CREATE.
    I resolved this issue by taking a look at what CL_GOS_SRV_URL_CREATE does in its EXECUTE method. The key bits to refresh the GOS Attachment List with the new attachment are...
    raise event commit_required. " if SGOSM has the commit flag checked
    raise event service_succeeded
           exporting eo_service = me.
    These events tell any subscribers to go do their thing-- which in this case includes a refresh of the GOS Attachment List. So in the EXECUTE method of my custom subclass, after I call function BINARY_RELATION_CREATE, I raise these events...
    CALL FUNCTION 'BINARY_RELATION_CREATE'
       EXPORTING
           obj_rolea     = gs_object
           obj_roleb    = rel_doc
           relationtype = 'URL'
       EXCEPTIONS
           OTHERS       = 1.
    CASE sy-subrc.
       WHEN 0.
           MESSAGE s043(sgos_msg). " The attachment was successfully created
           RAISE EVENT commit_required.
           RAISE EVENT service_succeeded
                 EXPORTING eo_service = me.
       WHEN OTHERS.
           MESSAGE s042(sgos_msg). " The attachment has not been created
    ENDCASE.
    I hope this is helpful to you even though your initial implementation was a while back. Thanks for replying to my question though!!
    Cheers,
    Amy

  • Connect a Word document instance to Generic Object Services/BDS

    Hello all,
    how can I manage to get a word document created via the Doc_template step to a certain Business Object (like Business Partner). I tried to trace that but I got lost in generations of codes like archivelink, sap office, knowledge provider etc.) I guess it should not be that difficult as I have the key of the word doc instance and the key of the business partner instance. What I want at last is to have that word document linked via attachments/linked objects or something similar....
    Kindest regards from Germany,
    Markus

    Markus,
    Welcome to the forum!
    I have done this sometime ago at a past client site and will see if I can find the code.
    If I remember correctly, this involves converting the attachment to an SOFM object (using method CREATESOFM of BO WF_DOC) and then using function module BINARY_RELATION_CREATE to attach it to the BO. The links below will give you more info. Also Google for BINARY_RELATION_CREATE which should give you more links.
    Re: Link Workflow Document to BKPF object
    <a href="/people/rammanohar.tiwari/blog/2006/03/25/generic-object-services-gos--in-background--part-ii">Generic object services (GOS) - in Background - Part II</a>
    http://mailman.mit.edu/pipermail/sap-wug/2005-September/019547.html
    Cheers,
    Ramki Maley

  • ArchiveLink

    Hi,
    This is the scenario:
    An Incoming mail with a PDF attachment is received in SAPconnect (SMTP). The attachment to the mail is stored as a KPRO document. The physical and logical ids and the class (SOFFPHIO) can be obtained. The requirement is to create a link between the attachment (pdf) and a BOR object so that it is visible through the use of the generic object services (GOS), either as an attachment or a business document.  It is not known how to establish the link between the attachment and the generic object services. It is presumed that the document needs to be checked out or moved to a repository as defined in OAC3. An ar_object key must be obtained and an archivelink connection must be created. Can a link be established in the GOS services without having to move the attachment from where it is stored in the SAP system and if so how should this be done?
    Any pointers in the right direction will be appreciated.
    Thanks,
    Freddie

    Hi,
    We managed to resolve the issue.
    Thanks for the response.
    Solution:
    By using the function BINARY_RELATION_CREATE we are able to create a link which can then be used in GOS without having to move the file from KPRO.

  • Attachments to Notifications - using "Services for Object"

    Hi All,
    I have sucessfully created a VC application (7.0 sp13) to create a General Notification in R/3
    using the BAPI -  IQS4_CREATE_NOTIFICATION
    Our users in R/3 4.7 use the button in the Top Left Hand corner of the Screen "Services for Object"
    to attach MS Word documents to Notifcations. Using the Create Attachment option from the Services for Object toolbar that pops up when the button is clicked.
    Has anyone else tried this or have any advice on how this can be done in VC - if you can recommend a BAPI that I can try or will this be a custom ABAP BAPI.
    Thanks in advance for any advice you can offer.
    - Robert

    FUNCTION z_pm_attachment_and_url.
    *"*"Interface local:
    *"  IMPORTING
    *"     VALUE(I_QMNUM) TYPE  QMNUM OPTIONAL
    *"     VALUE(I_AUFNR) TYPE  AUFNR OPTIONAL
    *"     VALUE(I_URL) TYPE  SO_URL OPTIONAL
    *"     VALUE(I_FILE) TYPE  ZPMCT002 OPTIONAL
    *"     VALUE(I_FILENAME) TYPE  STRING OPTIONAL
    *"  TABLES
    *"      T_RETURN STRUCTURE  BAPIRET2
    * Objetos locais
      DATA:
        vl_url         TYPE so_url,
        vl_path        TYPE string,                             "#EC NEEDED
        vl_loopc       TYPE sy-loopc,
        vl_lines       TYPE sy-loopc,
        vl_filename    TYPE string,
        vl_filelength  TYPE i,
        it_url         TYPE STANDARD TABLE OF sood-objdes,
        it_obj_cont    TYPE STANDARD TABLE OF solix,
        wa_obj         TYPE borident,
        wa_obj_cont    TYPE soli,
        wa_obj_data    TYPE sood1,
        wa_folder_id   TYPE soodk,
        wa_document_id TYPE sofmk.
      DEFINE valida_retorno.
        loop at t_return into t_return.
          if t_return-type eq zgtpm_e.
            exit.
          endif.
        endloop.
        if t_return-type eq zgtpm_e.
          exit.
        endif.
      END-OF-DEFINITION.
    * === Valida parâmetros de entrada
      IF i_qmnum IS INITIAL AND i_aufnr IS INITIAL.
    *   Nenhum objeto informado: Informe Nota ou Ordem de Manutenção
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '055' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ELSEIF NOT i_qmnum IS INITIAL AND NOT i_aufnr IS INITIAL.
    *   Informe apenas um objeto: Nota ou Ordem de Manutenção
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '054' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ENDIF.
      IF  i_url IS INITIAL
      AND i_filename IS INITIAL.
    *   Informe Anexo e/ou URL
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '060' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ENDIF.
    * === Define Categoria de objeto
      IF NOT i_qmnum IS INITIAL.
        wa_obj-objkey  = i_qmnum.
        wa_obj-objtype = 'BUS2038'. " Nota PM
      ENDIF.
      IF NOT i_aufnr IS INITIAL.
        wa_obj-objkey  = i_aufnr.
        wa_obj-objtype = 'BUS2007'. " Ordem de manutenção
      ENDIF.
    * === Anexo
      IF NOT i_filename IS INITIAL.
    *   Conteúdo do arquivo
        IF NOT i_file[] IS INITIAL.
          it_obj_cont[] = i_file[].
          DESCRIBE TABLE it_obj_cont LINES vl_lines.
          READ TABLE it_obj_cont INTO wa_obj_cont INDEX vl_lines.
          vl_filelength =
            ( 255 * ( vl_lines - 1 ) ) + STRLEN( wa_obj_cont ).
        ELSE.
          CALL FUNCTION 'GUI_UPLOAD'
               EXPORTING
                    filename                = i_filename
                    filetype                = 'BIN'
               IMPORTING
                    filelength              = vl_filelength
               TABLES
                    data_tab                = it_obj_cont
               EXCEPTIONS
                    file_open_error         = 1
                    file_read_error         = 2
                    no_batch                = 3
                    gui_refuse_filetransfer = 4
                    invalid_type            = 5
                    no_authority            = 6
                    unknown_error           = 7
                    bad_data_format         = 8
                    header_not_allowed      = 9
                    separator_not_allowed   = 10
                    header_too_long         = 11
                    unknown_dp_error        = 12
                    access_denied           = 13
                    dp_out_of_memory        = 14
                    disk_full               = 15
                    dp_timeout              = 16
                    OTHERS                  = 17.
          IF sy-subrc <> 0.
            PERFORM mensagem_retorno_tab
            USING
             sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
            CHANGING
              t_return[].
            EXIT.
          ENDIF.
        ENDIF.
    *   Pasta de Destino
        PERFORM get_folder CHANGING wa_folder_id t_return[].
        valida_retorno.
    *   SAPoffice: definição do objeto, modificar atributos
        wa_obj_data-objla  = sy-langu.      " Idioma
        wa_obj_data-objsns = 'O'.           " Objeto confidencial
        wa_obj_data-objlen = vl_filelength. " Tamanho conteúdo documento
        wa_obj_data-ownnam = sy-uname.      " Nome proprietário
        CALL METHOD cl_report_viewer=>split_path_filename
        EXPORTING
          i_filename = i_filename
        IMPORTING
          e_path     = vl_path
          e_filename = vl_filename.
        SPLIT vl_filename AT '.' INTO
          wa_obj_data-objdes    " Descrição breve do conteúdo
          wa_obj_data-file_ext. " Extensão de file de uma aplicação PC
        CONDENSE wa_obj_data-file_ext NO-GAPS.
    *   Insere Objeto (Anexo)
        PERFORM object_insert
        USING
          'EXT' " Anexo
          wa_obj_data
          wa_folder_id
          it_obj_cont
        CHANGING
          wa_document_id
          t_return[].
        valida_retorno.
    *   Relacionamento Objeto PM x Anexo
        PERFORM relation_create
        USING
          'ATTA'
          wa_obj
          wa_document_id
        CHANGING
          t_return[].
        valida_retorno.
      ENDIF.
    * === URL
      IF NOT i_url IS INITIAL.
    *   Inicializa estruturas comuns a Anexo e URL
        CLEAR:
          it_obj_cont,
          wa_obj_cont,
          wa_obj_data,
          wa_folder_id,
          wa_document_id.
    *   Conteúdo da URL
        MOVE i_url TO vl_url.
        WHILE NOT vl_url IS INITIAL.
          CONCATENATE '&KEY&' vl_url(250) INTO wa_obj_cont.
          APPEND wa_obj_cont TO it_obj_cont.
          SHIFT vl_url LEFT BY 250 PLACES.
        ENDWHILE.
    *   Pasta de Destino
        PERFORM get_folder CHANGING wa_folder_id t_return[].
        valida_retorno.
    *   SAPoffice: definição do objeto, modificar atributos
        wa_obj_data-objla  = sy-langu. " Idioma
        wa_obj_data-objsns = 'O'.      " Objeto confidencial
        wa_obj_data-ownnam = sy-uname. " Nome proprietário
        SPLIT i_url AT '/' INTO TABLE it_url.
        DESCRIBE TABLE it_url LINES vl_loopc.
        READ TABLE it_url INDEX vl_loopc
        INTO wa_obj_data-objdes. " Descrição breve do conteúdo
    *   Insere Objeto (URL)
        PERFORM object_insert
        USING
          'URL'  " Link Inter/Intranet
          wa_obj_data
          wa_folder_id
          it_obj_cont
        CHANGING
          wa_document_id
          t_return[].
        valida_retorno.
    *   Relacionamento Objeto PM x URL
        PERFORM relation_create
        USING
          'URL'
          wa_obj
          wa_document_id
        CHANGING
          t_return[].
        valida_retorno.
      ENDIF.
    * === Libera objetos locais
      FREE:
        vl_url,
        vl_path,
        vl_loopc,
        vl_lines,
        vl_filename,
        vl_filelength,
        it_url,
        it_obj_cont,
        wa_obj,
        wa_obj_cont,
        wa_obj_data,
        wa_folder_id,
        wa_document_id.
    ENDFUNCTION.
    ***INCLUDE LZGPM0010F01 .
    *&      Form  mensagem_retorno_tab
      FORM mensagem_retorno_tab
      USING
        p_msgid TYPE symsgid
        p_msgty TYPE symsgty
        p_msgno TYPE symsgno
        p_msgv1 TYPE any
        p_msgv2 TYPE any
        p_msgv3 TYPE any
        p_msgv4 TYPE any
      CHANGING
        t_return TYPE ty_return.
        DATA:
          vl_msgty  TYPE symsgty,
          wa_return LIKE LINE OF t_return.
        IF p_msgty IS INITIAL.
          MOVE zgtpm_e TO vl_msgty.
        ELSE.
          MOVE p_msgty TO vl_msgty.
        ENDIF.
        IF p_msgno IS INITIAL.
          EXIT.
        ENDIF.
        MOVE p_msgid  TO wa_return-id.
        MOVE vl_msgty TO wa_return-type.
        MOVE p_msgno  TO wa_return-number.
        MOVE p_msgv1  TO wa_return-message_v1.
        MOVE p_msgv2  TO wa_return-message_v2.
        MOVE p_msgv3  TO wa_return-message_v3.
        MOVE p_msgv4  TO wa_return-message_v4.
        MESSAGE ID p_msgid TYPE vl_msgty NUMBER p_msgno
        WITH p_msgv1 p_msgv2 p_msgv3 p_msgv4
        INTO wa_return-message.
        APPEND wa_return TO t_return.
        FREE: vl_msgty, wa_return.
      ENDFORM.                    " mensagem_retorno_tab
    *&      Form  get_folder
      FORM get_folder
      CHANGING
        w_folder_id TYPE soodk
        t_return TYPE ty_return.
        CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
             EXPORTING
                  region    = 'B'  " ?
             IMPORTING
                  folder_id = w_folder_id
             EXCEPTIONS
                  OTHERS    = 1.
        IF sy-subrc <> 0.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
      ENDFORM.                    " get_folder
    *&      Form  object_insert
      FORM object_insert USING
        p_objtp     TYPE so_obj_tp
        w_obj_data  TYPE sood1
        w_folder_id TYPE soodk
        t_obj_cont  TYPE zpmct002
      CHANGING
        w_document_id TYPE sofmk
        t_return      TYPE ty_return.
    *   Objetos locais
        DATA:
          it_objcont  TYPE STANDARD TABLE OF soli,
          it_obj_head TYPE STANDARD TABLE OF soli,
          wa_obj_id   TYPE soodk,
          wa_obj_cont LIKE LINE OF t_obj_cont.
    *   RAW to CHAR
        LOOP AT t_obj_cont INTO wa_obj_cont.
          APPEND wa_obj_cont TO it_objcont.
          CLEAR wa_obj_cont.
        ENDLOOP.
    *   Insere objeto
        CALL FUNCTION 'SO_OBJECT_INSERT'
             EXPORTING
                  folder_id                  = w_folder_id
                  object_type                = p_objtp
                  object_hd_change           = w_obj_data
                  owner                      = sy-uname
             IMPORTING
                  object_id                  = wa_obj_id
             TABLES
                  objhead                    = it_obj_head
                  objcont                    = it_objcont
             EXCEPTIONS
                  active_user_not_exist      = 1
                  communication_failure      = 2
                  component_not_available    = 3
                  dl_name_exist              = 4
                  folder_not_exist           = 5
                  folder_no_authorization    = 6
                  object_type_not_exist      = 7
                  operation_no_authorization = 8
                  owner_not_exist            = 9
                  parameter_error            = 10
                  substitute_not_active      = 11
                  substitute_not_defined     = 12
                  system_failure             = 13
                  x_error                    = 14
                  OTHERS                     = 15.
        IF sy-subrc = 0.
          w_document_id-foltp = w_folder_id-objtp.
          w_document_id-folyr = w_folder_id-objyr.
          w_document_id-folno = w_folder_id-objno.
          w_document_id-doctp = wa_obj_id-objtp.
          w_document_id-docyr = wa_obj_id-objyr.
          w_document_id-docno = wa_obj_id-objno.
        ELSE.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
    *   Libera objetos locais
        FREE:it_objcont, it_obj_head, wa_obj_id, wa_obj_cont.
      ENDFORM.                    " object_insert
    *&      Form  relation_create
      FORM relation_create
      USING
        p_relationtype TYPE binreltyp
        w_obj          TYPE borident
        w_document_id  TYPE sofmk
      CHANGING
        t_return TYPE ty_return.
        DATA wa_doc TYPE borident.
        wa_doc-objtype = 'MESSAGE'.
        CASE p_relationtype.
          WHEN 'ATTA'.
            wa_doc-objkey  = w_document_id(34).
          WHEN 'URL'.
            wa_doc-objkey  = w_document_id.
          WHEN OTHERS.
        ENDCASE.
        CALL FUNCTION 'BINARY_RELATION_CREATE'
             EXPORTING
                  obj_rolea      = w_obj
                  obj_roleb      = wa_doc
                  relationtype   = p_relationtype
             EXCEPTIONS
                  no_model       = 1
                  internal_error = 2
                  unknown        = 3
                  OTHERS         = 4.
        IF sy-subrc = 0.
          COMMIT WORK AND WAIT.
          CASE p_relationtype.
            WHEN 'ATTA'.
    *         O anexo foi criado com êxito
              PERFORM mensagem_retorno_tab
              USING
                'SGOS_MSG' zgtpm_s '043' '' '' '' ''
              CHANGING
                t_return[].
            WHEN 'URL'.
    *         A URL foi criada com êxito
              PERFORM mensagem_retorno_tab
              USING
                'ZPM_PORTAL' zgtpm_s '059' '' '' '' ''
              CHANGING
                t_return[].
            WHEN OTHERS.
          ENDCASE.
        ELSE.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
        FREE wa_doc.
      ENDFORM.                    " relation_create
    Edited by: Fabrício Alves Vieira on Apr 8, 2008 3:08 PM

  • Cannot see my attached doc in file attachment list

    Hi all,
    I used the code below to attach a doc to a pernr. After attaching a PDF document to pernr 00070845, I goto transaction PA20/PA30 to see the attachment list. However, I cannot manage to see the doc in the attachment list. Idoublle check that table SOOD (SAP Office: Object Definition) contains the added entry but table SRGBTBREL(Relationship in GOS Environment) did not have the entry. What could be the problem here in the codes?
    "Construct upload structure from xstring
    This part of code is meant ONLY for .PDF file type
    IF wa_document_type = 'PDF'.
        WHILE wa_stringlength <> -1.
          CLEAR: wa_xbuf, wa_contents_hex.
          wa_stringlength = STRLEN( wa_datastring ).
          IF wa_stringlength >= 510.
            wa_xbuf = wa_datastring(510).
            wa_datastring = wa_datastring+510.
          ELSE.
            wa_xbuf = wa_datastring.
            wa_stringlength = -1. "end condition
          ENDIF.
          <contents_hex> = <xbuf>.
          APPEND wa_contents_hex TO wt_contents_hex.
        ENDWHILE.
    ENDIF.
      "Find proper folder for uploading
      CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET' DESTINATION 'NONE'
       EXPORTING
        OWNER                       = ' '
         region                      = 'B'
       IMPORTING
         folder_id                   = wa_folder_id
       EXCEPTIONS
         communication_failure       = 1
         owner_not_exist             = 2
         system_failure              = 3
         x_error                     = 4
         OTHERS                      = 5
      IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      wa_document_data-obj_name = 'MESSAGE'.
      wa_document_data-obj_descr = wa_filename.
      wa_document_data-obj_langu = 'E'.
      "Upload the document
      CALL FUNCTION 'SO_DOCUMENT_INSERT_API1' DESTINATION 'NONE'
        EXPORTING
          folder_id                        = wa_folder_id
          document_data                    = wa_document_data
          document_type                    = wa_document_type
       IMPORTING
         document_info                    = wa_document_info
       TABLES
        OBJECT_HEADER                    = wt_object_header
        OBJECT_CONTENT                   = wt_object_content
         contents_hex                     = wt_contents_hex
        OBJECT_PARA                      = wt_object_para
        OBJECT_PARB                      = wt_object_parb
       EXCEPTIONS
         folder_not_exist                 = 1
         document_type_not_exist          = 2
         operation_no_authorization       = 3
         parameter_error                  = 4
         x_error                          = 5
         enqueue_error                    = 6
         OTHERS                           = 7
      IF sy-subrc = 0.
        COMMIT WORK.
      ENDIF.
      wa_obj_rolea-objkey = lo_stru_input_param-pernr.
      wa_obj_rolea-objtype = 'BUS1065'.
      wa_obj_roleb-objkey = wa_document_info-doc_id(34).
      wa_obj_roleb-objtype = 'MESSAGE'.
      CALL FUNCTION 'BINARY_RELATION_CREATE' DESTINATION 'NONE'
        EXPORTING
          obj_rolea            = wa_obj_rolea
          obj_roleb            = wa_obj_roleb
          relationtype         = 'ATTA'
          FIRE_EVENTS          = 'X'
        IMPORTING
          BINREL               =
        TABLES
          BINREL_ATTRIB        =
       EXCEPTIONS
         no_model             = 1
         internal_error       = 2
         unknown              = 3
         OTHERS               = 4
      IF sy-subrc <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      COMMIT WORK.
    Edited by: Siong Chao on Nov 15, 2010 11:03 AM
    Edited by: Siong Chao on Nov 15, 2010 11:05 AM

    Hi Siong,
    as I remember I faced rough the same problem.
    Solution for me was to use an explicit transaction management and only one COMMIT WORK.
    Block before upload (logic from program SAPLSO33 PAI: USER_COMMAND_0100)
      DATA:
        lr_transaction_mgr   TYPE REF TO  if_os_transaction_manager,
        lr_transaction       TYPE REF TO  if_os_transaction,
        lr_os_ps             TYPE REF TO  if_os_persistency_manager
      TRY.
          CALL METHOD cl_os_system=>init_and_set_modes
            EXPORTING
              i_update_mode     = oscon_dmode_direct
              i_external_commit = oscon_false.
          lr_transaction_mgr = cl_os_system=>get_transaction_manager( ).
          lr_transaction = lr_transaction_mgr->create_transaction( ).
          TRY.
              CALL METHOD lr_transaction->start.
            CATCH cx_os_transaction_mode.
              lr_transaction->set_mode_update( oscon_dmode_update_task ).
              lr_transaction->start( ).
          ENDTRY.
        CATCH cx_os_error cx_os_system_error INTO lr_except.
          CALL METHOD lr_except->get_longtext
            EXPORTING
              preserve_newlines = abap_false
            RECEIVING
              result            = lv_except_text.
          CALL METHOD lr_except->get_source_position
            IMPORTING
              program_name = lv_except_prog
              include_name = lv_except_incl
              source_line  = lv_except_line.
          WRITE: / iv_file, lv_except_text, 'in', lv_except_prog, '/', lv_except_incl, lv_except_line.
          cv_errlvl = 1.
          RETURN.
      ENDTRY.
    Block after linking with BINARY_RELATION_CREATE:
      TRY.
          lr_os_ps = cl_os_system=>get_persistency_manager( ).
          CALL METHOD lr_os_ps->set_update_mode
            EXPORTING
              i_mode = oscon_dmode_direct.
          CALL METHOD lr_transaction->end.
        CATCH cx_os_error cx_os_system_error INTO lr_except.
          CALL METHOD lr_except->get_longtext
            EXPORTING
              preserve_newlines = abap_false
            RECEIVING
              result            = lv_except_text.
          CALL METHOD lr_except->get_source_position
            IMPORTING
              program_name = lv_except_prog
              include_name = lv_except_incl
              source_line  = lv_except_line.
          WRITE: / iv_file, lv_except_text, 'in', lv_except_prog, '/', lv_except_incl, lv_except_line.
          CALL METHOD lr_transaction->undo.
          IF cv_errlvl EQ 0.
            cv_errlvl = 1.
          ENDIF.
          RETURN.
      ENDTRY.
      COMMIT WORK.
    On undesirably sy-subrc use lr_transaction->undo.
    Regards, Hubert
    Edited by: Hubert Heitzer on Nov 15, 2010 12:40 PM

  • PM Notification Attachments via "Create Attachment" vs "Creat Ext Doc (URL)

    Uwe -
    Did you create the PM notification attachment using
    “Create Attachment”
    or “Create External Document (URL)”  ???
    Mine were created as attachments, not as external documents - that may be why your code isn't working ...
    I'm going to try to do an external document create and see if that works ...
    Dave

    FUNCTION z_pm_attachment_and_url.
    *"*"Interface local:
    *"  IMPORTING
    *"     VALUE(I_QMNUM) TYPE  QMNUM OPTIONAL
    *"     VALUE(I_AUFNR) TYPE  AUFNR OPTIONAL
    *"     VALUE(I_URL) TYPE  SO_URL OPTIONAL
    *"     VALUE(I_FILE) TYPE  ZPMCT002 OPTIONAL
    *"     VALUE(I_FILENAME) TYPE  STRING OPTIONAL
    *"  TABLES
    *"      T_RETURN STRUCTURE  BAPIRET2
    * Objetos locais
      DATA:
        vl_url         TYPE so_url,
        vl_path        TYPE string,                             "#EC NEEDED
        vl_loopc       TYPE sy-loopc,
        vl_lines       TYPE sy-loopc,
        vl_filename    TYPE string,
        vl_filelength  TYPE i,
        it_url         TYPE STANDARD TABLE OF sood-objdes,
        it_obj_cont    TYPE STANDARD TABLE OF solix,
        wa_obj         TYPE borident,
        wa_obj_cont    TYPE soli,
        wa_obj_data    TYPE sood1,
        wa_folder_id   TYPE soodk,
        wa_document_id TYPE sofmk.
      DEFINE valida_retorno.
        loop at t_return into t_return.
          if t_return-type eq zgtpm_e.
            exit.
          endif.
        endloop.
        if t_return-type eq zgtpm_e.
          exit.
        endif.
      END-OF-DEFINITION.
    * === Valida parâmetros de entrada
      IF i_qmnum IS INITIAL AND i_aufnr IS INITIAL.
    *   Nenhum objeto informado: Informe Nota ou Ordem de Manutenção
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '055' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ELSEIF NOT i_qmnum IS INITIAL AND NOT i_aufnr IS INITIAL.
    *   Informe apenas um objeto: Nota ou Ordem de Manutenção
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '054' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ENDIF.
      IF  i_url IS INITIAL
      AND i_filename IS INITIAL.
    *   Informe Anexo e/ou URL
        PERFORM mensagem_retorno_tab
        USING
          'ZPM_PORTAL' zgtpm_e '060' '' '' '' ''
        CHANGING
          t_return[].
        EXIT.
      ENDIF.
    * === Define Categoria de objeto
      IF NOT i_qmnum IS INITIAL.
        wa_obj-objkey  = i_qmnum.
        wa_obj-objtype = 'BUS2038'. " Nota PM
      ENDIF.
      IF NOT i_aufnr IS INITIAL.
        wa_obj-objkey  = i_aufnr.
        wa_obj-objtype = 'BUS2007'. " Ordem de manutenção
      ENDIF.
    * === Anexo
      IF NOT i_filename IS INITIAL.
    *   Conteúdo do arquivo
        IF NOT i_file[] IS INITIAL.
          it_obj_cont[] = i_file[].
          DESCRIBE TABLE it_obj_cont LINES vl_lines.
          READ TABLE it_obj_cont INTO wa_obj_cont INDEX vl_lines.
          vl_filelength =
            ( 255 * ( vl_lines - 1 ) ) + STRLEN( wa_obj_cont ).
        ELSE.
          CALL FUNCTION 'GUI_UPLOAD'
               EXPORTING
                    filename                = i_filename
                    filetype                = 'BIN'
               IMPORTING
                    filelength              = vl_filelength
               TABLES
                    data_tab                = it_obj_cont
               EXCEPTIONS
                    file_open_error         = 1
                    file_read_error         = 2
                    no_batch                = 3
                    gui_refuse_filetransfer = 4
                    invalid_type            = 5
                    no_authority            = 6
                    unknown_error           = 7
                    bad_data_format         = 8
                    header_not_allowed      = 9
                    separator_not_allowed   = 10
                    header_too_long         = 11
                    unknown_dp_error        = 12
                    access_denied           = 13
                    dp_out_of_memory        = 14
                    disk_full               = 15
                    dp_timeout              = 16
                    OTHERS                  = 17.
          IF sy-subrc <> 0.
            PERFORM mensagem_retorno_tab
            USING
             sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
            CHANGING
              t_return[].
            EXIT.
          ENDIF.
        ENDIF.
    *   Pasta de Destino
        PERFORM get_folder CHANGING wa_folder_id t_return[].
        valida_retorno.
    *   SAPoffice: definição do objeto, modificar atributos
        wa_obj_data-objla  = sy-langu.      " Idioma
        wa_obj_data-objsns = 'O'.           " Objeto confidencial
        wa_obj_data-objlen = vl_filelength. " Tamanho conteúdo documento
        wa_obj_data-ownnam = sy-uname.      " Nome proprietário
        CALL METHOD cl_report_viewer=>split_path_filename
        EXPORTING
          i_filename = i_filename
        IMPORTING
          e_path     = vl_path
          e_filename = vl_filename.
        SPLIT vl_filename AT '.' INTO
          wa_obj_data-objdes    " Descrição breve do conteúdo
          wa_obj_data-file_ext. " Extensão de file de uma aplicação PC
        CONDENSE wa_obj_data-file_ext NO-GAPS.
    *   Insere Objeto (Anexo)
        PERFORM object_insert
        USING
          'EXT' " Anexo
          wa_obj_data
          wa_folder_id
          it_obj_cont
        CHANGING
          wa_document_id
          t_return[].
        valida_retorno.
    *   Relacionamento Objeto PM x Anexo
        PERFORM relation_create
        USING
          'ATTA'
          wa_obj
          wa_document_id
        CHANGING
          t_return[].
        valida_retorno.
      ENDIF.
    * === URL
      IF NOT i_url IS INITIAL.
    *   Inicializa estruturas comuns a Anexo e URL
        CLEAR:
          it_obj_cont,
          wa_obj_cont,
          wa_obj_data,
          wa_folder_id,
          wa_document_id.
    *   Conteúdo da URL
        MOVE i_url TO vl_url.
        WHILE NOT vl_url IS INITIAL.
          CONCATENATE '&KEY&' vl_url(250) INTO wa_obj_cont.
          APPEND wa_obj_cont TO it_obj_cont.
          SHIFT vl_url LEFT BY 250 PLACES.
        ENDWHILE.
    *   Pasta de Destino
        PERFORM get_folder CHANGING wa_folder_id t_return[].
        valida_retorno.
    *   SAPoffice: definição do objeto, modificar atributos
        wa_obj_data-objla  = sy-langu. " Idioma
        wa_obj_data-objsns = 'O'.      " Objeto confidencial
        wa_obj_data-ownnam = sy-uname. " Nome proprietário
        SPLIT i_url AT '/' INTO TABLE it_url.
        DESCRIBE TABLE it_url LINES vl_loopc.
        READ TABLE it_url INDEX vl_loopc
        INTO wa_obj_data-objdes. " Descrição breve do conteúdo
    *   Insere Objeto (URL)
        PERFORM object_insert
        USING
          'URL'  " Link Inter/Intranet
          wa_obj_data
          wa_folder_id
          it_obj_cont
        CHANGING
          wa_document_id
          t_return[].
        valida_retorno.
    *   Relacionamento Objeto PM x URL
        PERFORM relation_create
        USING
          'URL'
          wa_obj
          wa_document_id
        CHANGING
          t_return[].
        valida_retorno.
      ENDIF.
    * === Libera objetos locais
      FREE:
        vl_url,
        vl_path,
        vl_loopc,
        vl_lines,
        vl_filename,
        vl_filelength,
        it_url,
        it_obj_cont,
        wa_obj,
        wa_obj_cont,
        wa_obj_data,
        wa_folder_id,
        wa_document_id.
    ENDFUNCTION.
    ***INCLUDE LZGPM0010F01 .
    *&      Form  mensagem_retorno_tab
      FORM mensagem_retorno_tab
      USING
        p_msgid TYPE symsgid
        p_msgty TYPE symsgty
        p_msgno TYPE symsgno
        p_msgv1 TYPE any
        p_msgv2 TYPE any
        p_msgv3 TYPE any
        p_msgv4 TYPE any
      CHANGING
        t_return TYPE ty_return.
        DATA:
          vl_msgty  TYPE symsgty,
          wa_return LIKE LINE OF t_return.
        IF p_msgty IS INITIAL.
          MOVE zgtpm_e TO vl_msgty.
        ELSE.
          MOVE p_msgty TO vl_msgty.
        ENDIF.
        IF p_msgno IS INITIAL.
          EXIT.
        ENDIF.
        MOVE p_msgid  TO wa_return-id.
        MOVE vl_msgty TO wa_return-type.
        MOVE p_msgno  TO wa_return-number.
        MOVE p_msgv1  TO wa_return-message_v1.
        MOVE p_msgv2  TO wa_return-message_v2.
        MOVE p_msgv3  TO wa_return-message_v3.
        MOVE p_msgv4  TO wa_return-message_v4.
        MESSAGE ID p_msgid TYPE vl_msgty NUMBER p_msgno
        WITH p_msgv1 p_msgv2 p_msgv3 p_msgv4
        INTO wa_return-message.
        APPEND wa_return TO t_return.
        FREE: vl_msgty, wa_return.
      ENDFORM.                    " mensagem_retorno_tab
    *&      Form  get_folder
      FORM get_folder
      CHANGING
        w_folder_id TYPE soodk
        t_return TYPE ty_return.
        CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
             EXPORTING
                  region    = 'B'  " ?
             IMPORTING
                  folder_id = w_folder_id
             EXCEPTIONS
                  OTHERS    = 1.
        IF sy-subrc <> 0.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
      ENDFORM.                    " get_folder
    *&      Form  object_insert
      FORM object_insert USING
        p_objtp     TYPE so_obj_tp
        w_obj_data  TYPE sood1
        w_folder_id TYPE soodk
        t_obj_cont  TYPE zpmct002
      CHANGING
        w_document_id TYPE sofmk
        t_return      TYPE ty_return.
    *   Objetos locais
        DATA:
          it_objcont  TYPE STANDARD TABLE OF soli,
          it_obj_head TYPE STANDARD TABLE OF soli,
          wa_obj_id   TYPE soodk,
          wa_obj_cont LIKE LINE OF t_obj_cont.
    *   RAW to CHAR
        LOOP AT t_obj_cont INTO wa_obj_cont.
          APPEND wa_obj_cont TO it_objcont.
          CLEAR wa_obj_cont.
        ENDLOOP.
    *   Insere objeto
        CALL FUNCTION 'SO_OBJECT_INSERT'
             EXPORTING
                  folder_id                  = w_folder_id
                  object_type                = p_objtp
                  object_hd_change           = w_obj_data
                  owner                      = sy-uname
             IMPORTING
                  object_id                  = wa_obj_id
             TABLES
                  objhead                    = it_obj_head
                  objcont                    = it_objcont
             EXCEPTIONS
                  active_user_not_exist      = 1
                  communication_failure      = 2
                  component_not_available    = 3
                  dl_name_exist              = 4
                  folder_not_exist           = 5
                  folder_no_authorization    = 6
                  object_type_not_exist      = 7
                  operation_no_authorization = 8
                  owner_not_exist            = 9
                  parameter_error            = 10
                  substitute_not_active      = 11
                  substitute_not_defined     = 12
                  system_failure             = 13
                  x_error                    = 14
                  OTHERS                     = 15.
        IF sy-subrc = 0.
          w_document_id-foltp = w_folder_id-objtp.
          w_document_id-folyr = w_folder_id-objyr.
          w_document_id-folno = w_folder_id-objno.
          w_document_id-doctp = wa_obj_id-objtp.
          w_document_id-docyr = wa_obj_id-objyr.
          w_document_id-docno = wa_obj_id-objno.
        ELSE.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
    *   Libera objetos locais
        FREE:it_objcont, it_obj_head, wa_obj_id, wa_obj_cont.
      ENDFORM.                    " object_insert
    *&      Form  relation_create
      FORM relation_create
      USING
        p_relationtype TYPE binreltyp
        w_obj          TYPE borident
        w_document_id  TYPE sofmk
      CHANGING
        t_return TYPE ty_return.
        DATA wa_doc TYPE borident.
        wa_doc-objtype = 'MESSAGE'.
        CASE p_relationtype.
          WHEN 'ATTA'.
            wa_doc-objkey  = w_document_id(34).
          WHEN 'URL'.
            wa_doc-objkey  = w_document_id.
          WHEN OTHERS.
        ENDCASE.
        CALL FUNCTION 'BINARY_RELATION_CREATE'
             EXPORTING
                  obj_rolea      = w_obj
                  obj_roleb      = wa_doc
                  relationtype   = p_relationtype
             EXCEPTIONS
                  no_model       = 1
                  internal_error = 2
                  unknown        = 3
                  OTHERS         = 4.
        IF sy-subrc = 0.
          COMMIT WORK AND WAIT.
          CASE p_relationtype.
            WHEN 'ATTA'.
    *         O anexo foi criado com êxito
              PERFORM mensagem_retorno_tab
              USING
                'SGOS_MSG' zgtpm_s '043' '' '' '' ''
              CHANGING
                t_return[].
            WHEN 'URL'.
    *         A URL foi criada com êxito
              PERFORM mensagem_retorno_tab
              USING
                'ZPM_PORTAL' zgtpm_s '059' '' '' '' ''
              CHANGING
                t_return[].
            WHEN OTHERS.
          ENDCASE.
        ELSE.
          PERFORM mensagem_retorno_tab
          USING
           sy-msgid sy-msgty sy-msgno sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
          CHANGING
            t_return[].
        ENDIF.
        FREE wa_doc.
      ENDFORM.                    " relation_create

  • Tnx. IW22 Change PM Notification -  Create external document (URL) posting

    Hi:
    I am in transaction IW22 i.e. Change PM Notification.  There is a 'Services for object' drop down which appears below the enter tick.  This appears in online but not in BDC.  I have tried it through the transaction SHDB i.e. Transaction Recorder also herein the 'Services for object' does not appear.  I need to post entries through 'Create external document (URL)' through the 'Services for object' drop down using BDC / BAPI / etc.
    Please advice.
    NB.

    Hi NB,
    We have similar issue for QM notification and I have used function "SO_OBJECT_INSERT".
    I am enclosing my code may be useful for you:
    FORM CREATE-URL-ATTACHMENT.
      CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
        EXPORTING
          REGION    = 'B'
        IMPORTING
          FOLDER_ID = FOLDER_ID
        EXCEPTIONS
          OTHERS    = 1.
      CLEAR: LS_OBJCONT, LT_OBJCONT, LT_OBJHEAD.
      REFRESH: LT_OBJCONT, LT_OBJHEAD.
      CONCATENATE '&KEY&' H-URL INTO LS_OBJCONT.
      APPEND LS_OBJCONT TO LT_OBJCONT.
      CLEAR: L_OBJ_DATA.
      L_OBJ_DATA-OBJSNS = 'O'.
      L_OBJ_DATA-OBJLA  = SY-LANGU.
      L_OBJ_DATA-OBJDES = 'NOTES URL'.
      CALL FUNCTION 'SO_OBJECT_INSERT'
        EXPORTING
          FOLDER_ID             = FOLDER_ID
          OBJECT_TYPE           = 'URL'
          OBJECT_HD_CHANGE      = L_OBJ_DATA
        IMPORTING
          OBJECT_ID             = L_OBJ_ID
        TABLES
          OBJHEAD               = LT_OBJHEAD
          OBJCONT               = LT_OBJCONT
        EXCEPTIONS
          ACTIVE_USER_NOT_EXIST = 35
          FOLDER_NOT_EXIST      = 6
          OBJECT_TYPE_NOT_EXIST = 17
          OWNER_NOT_EXIST       = 22
          PARAMETER_ERROR       = 23
          OTHERS                = 1000.
      CLEAR: IS_OBJECT.
      IS_OBJECT-OBJKEY = WQMNUM.
      IS_OBJECT-OBJTYPE = 'BUS2078'.
      CLEAR: REL_DOC.
      CONCATENATE FOLDER_ID L_OBJ_ID INTO REL_DOC-OBJKEY.
      REL_DOC-OBJTYPE = 'MESSAGE'.
      CALL FUNCTION 'BINARY_RELATION_CREATE'
        EXPORTING
          OBJ_ROLEA    = IS_OBJECT
          OBJ_ROLEB    = REL_DOC
          RELATIONTYPE = 'URL'
        EXCEPTIONS
          OTHERS       = 1.
      IF SY-SUBRC EQ 0.
        COMMIT WORK.
      ELSE.
        T_MESSAGE = 'Notification Attachment Add Failed'.
        APPEND T_MESSAGE.
        CLEAR: T_MESSAGE.
        T_MESSAGE = 'Reference:'.
        T_MESSAGE+11(20) = H-REF.
        APPEND T_MESSAGE.
        CLEAR: T_MESSAGE.
        T_MESSAGE = 'Notification:'.
        T_MESSAGE+14(12) = WQMNUM.
        APPEND T_MESSAGE.
        CLEAR: T_MESSAGE.
        T_MESSAGE = 'URL:'.
        T_MESSAGE+5(72) = H-URL.
        APPEND T_MESSAGE.
        PERFORM SEND-EMAIL.
      ENDIF.
    ENDFORM.                    "create-url-attachment
    Hope this may help you.
    Please reward all the useful answers.
    Regards,
    Lanka

  • FM to create external document(URL) in IE02

    Hi,
    I need to create external document(URL) for equipment master.
    We can create manually it is done by clicking a button Services for Object and then selecting option (Create External Document URL).
    I refered many links but failed to create the url in IE02.Please help me with the example.
    Regards,

    Hi,
    You will need to use function BINARY_RELATION_CREATE for this.
    Check how is it handled in function SGOS_URL_CREATE_DIALOG. Also check code in PAI of screen 2400 (subroutine create_url_doc). You will need to use that code.
    Sridhar

  • Attach PDF file in background

    hi all,
    My requirement is i need to create a PDF file of one report and attech it to 'services for Object' of CJ20N,
    in background.
    Is there any direct function module or bapi to do this.
    i tried to use FM 'SO_OBJECT_INSERT'
    and BINARY_RELATION_CREATE
    But i am not getting desired result. When i tried to attech PDF file and open atteched pdf form CJ20N it gave error that content of file cannot be read ,, i think some conversion error occured.
    If anybody can help on this issue.....
    <removed_by_moderator>
    Thanks,
    Edited by: Julius Bussche on Jun 24, 2008 9:33 PM

    Hi,
    I ran into the same issue and had to use FM SO_CONVERT_CONTENTS_BIN to convert the file data after reading it into memory. I have a feeling this affects the Unicode systems only.
    Hope this helps.

  • GOS - Cannot open .docx/.xlsx file programmatically attached to business object

    I am supporting an existing web dynpro application that allows users to attach files to a purchase requsition in SAP.  The current solution allows for a successful attachment and display of .doc and .xls files, but gives an error when displaying .docx and .xlsx files.
    The current solution follows this logic:  The code identifies the MIME type of the file to derive the file extension.  Then, it converts the document contents from a xstring type to binary via function SCMS_EXTRING_TO_BINARY.  After the conversion, it creates an initial instance of BO 'MESSAGE' and populates the message container with the required parameters.  It creates the container, refreshes the message object, and gets the key of the new message object.  Then, the code populates the BO object_a and object_b and calls the method   cl_binary_relation=>create_link to attach the file.  Lastly, a commit work statement is executed.  Based on the code samples I have seen online, this solution is logically correct.
    I am able to successfully attach .doc and .xls files from this web dynpro application, and then later open them from ME53N.  I am also able to "successfully" attach .docx and .xlsx files from the application.  If I view the attachment list in ME53N, these files are visible.  However, when I attempt to open the attachments, Word/Excel gives me an error message "The file cannot be opened because there are problems with the contents.  The file is corrupt and cannot be opened."  If I click OK to bypass the error, it gives an additional prompt "Word found unreadable content in document.  Do you want to recover the contents of this document?  If you trust the source of this document, click yes."  If I click yes, the document opens.
    .docx / .xlsx files attached via ME52N will open without issue
    .doc / .xls files attached programmatically via this web application open without issue
    these are the MIME types associated with .docx / .xlsx both in the web application and in SAP configuration:
    .docx:   application/vnd.openxmlformats-officedocument.wordprocessingml.document
    .xlsx:    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
    Does anyone have an idea why the newer document versions appear to be corrupt when opening?  Does the error from Word imply there is a data conversion issue, even though the .doc and .xls documents are readable?  Are the .docx/.xlsx file types unusable with the   cl_binary_relation=>create_link method, and should instead be used with the function 'BINARY_RELATION_CREATE'?
    Any help is greatly appreicated.  Thanks in advance!

    I replied too quickly.  This change in providing the file size DID help when I was attaching .docx files. They open succesfully now, as well as, .doc and .xls files.
    However, I'm still having the same issue when I try attaching .xlsx files.  Furthermore, now .txt files do not display correctly.  Before passing the file size correctly, they were displaying in notepad.  Now, they open in the SAP GUI and only show characters, rather then the actual text.
    It seems like this file size typo was just a coincidence for .docx files.  I'm still looking for help on this issue.  Thanks in advance.

  • Upload and Attach file to Service Notificacion through Web Dynpro

    Hi,
    I need to upload and attach a file (Word, PDF, TXT ...) to Service Notificacion (TX - IW53) through Web Dynpro.
    I have used the integration component "File Upload" to obtain the "fileName" atribute. Also, I have used the functions SO_OBJECT_UPLOAD, SO_INSERT_OBJECT and BINARY_RELATION_CREATE_COMMIT.
    But have a problem, because the function SO_OBJECT_UPLOAD use the class "cl _ gui _ frontend _ services" and that clash with Web Dynpro.
    My question is: how could I resolve that problem?
    I look forward to your response.
    Thanks

    IV_NAME     Importing     Type     STRING
    IV_CONTENT     Importing     Type     STRING
    IV_CONTENT_HEX     Importing     Type     XSTRING
    IS_LPORB     Importing     Type     SIBFLPORB
    IV_OBJTP     Importing     Type     SO_OBJ_TP
    RT_MESSAGES     Returning     Type     BAPIRETTAB
    method save.
      data ls_message type bapiret2.
      data:
        filename     type string,
        filefullname type string,
        mime_type    type string,
        size         type i,
        offset type i,
        offset_old type i,
        temp_len type i,
        objname type string,
        l_obj_type type so_obj_tp,
        hex_null type x length 1 value '20',
        l_document_title type so_text255,
        file_ext type string,
        lt_objcont type standard table of  solisti1 initial size 6,
        objcont like line of lt_objcont,
        lt_ls_doc_change type standard table of sodocchgi1,
        ls_doc_change like line of lt_ls_doc_change,
        lt_data type soli_tab,
        ls_data type soli,
        lt_xdata type solix_tab,
        ls_xdata type solix,
        l_folder_id type sofdk,
        ls_object_id type soodk,
        l_object_id_fol type so_obj_id,
        l_object_id type so_obj_id,
       l_doc_info TYPE sofolenti1,
        l_object_hd_change type sood1,
        l_tab_size type int4,
        l_retype type breltyp-reltype,
        lt_urltab  type standard table of sood-objdes.
    get foler
    l_folder_id = 'FOL29000000000004'.
      call function 'SO_FOLDER_ROOT_ID_GET'
        exporting
         owner                            = sy-uname
          region                           = 'B'
        importing
          folder_id                        = l_folder_id
       tables
         path_table                       =
      if iv_objtp = gc_type_file.
        size = xstrlen( iv_content_hex ).
    get file name and extension
        call method split_path
          exporting
            iv_path           = iv_name
          importing
         E_PATH           =
           ev_filename       = filename
         E_PSERVER        =
        call method split_file_extension
          exporting
            iv_filename_with_ext = filename
          importing
            ev_filename          = objname
            ev_extension         = file_ext.
        ls_doc_change-obj_name = objname.
        ls_doc_change-obj_descr = objname.
        ls_doc_change-obj_langu = sy-langu.
        ls_doc_change-sensitivty = 'F'.
        ls_doc_change-doc_size = size.
        offset = 0.
        while offset <= size.
          offset_old = offset.
          offset = offset + 255.
          if offset > size.
            temp_len = xstrlen( iv_content_hex+offset_old ).
            clear ls_xdata-line with hex_null in byte mode.
            ls_xdata-line = iv_content_hex+offset_old(temp_len).
          else.
            ls_xdata-line = iv_content_hex+offset_old(255).
          endif.
          append ls_xdata to lt_xdata.
        endwhile.
    set object type relation type and other header info
        l_retype = 'ATTA'.
        l_obj_type = 'EXT'.
        l_object_hd_change-objnam = ls_doc_change-obj_name.
        l_object_hd_change-objdes = ls_doc_change-obj_descr.
        l_object_hd_change-objsns = ls_doc_change-sensitivty.
        l_object_hd_change-objla  = ls_doc_change-obj_langu.
        l_object_hd_change-objlen = ls_doc_change-doc_size.
        l_object_hd_change-file_ext = file_ext.
      prepare header
        data lt_obj_header type standard table of solisti1.
        data ls_header type solisti1.
        concatenate '&SO_FILENAME=' filename into ls_header.
        append ls_header to lt_obj_header.
        clear ls_header.
        ls_header = '&SO_FORMAT=BIN'.
        append ls_header to lt_obj_header.
    change hex data to text data
        call function 'SO_SOLIXTAB_TO_SOLITAB'
          exporting
            ip_solixtab = lt_xdata
          importing
            ep_solitab  = lt_data.
      else.
    for note
        size = strlen( iv_content ).
        objname = iv_name.
        ls_doc_change-obj_descr = objname.
        ls_doc_change-sensitivty = 'O'.
        ls_doc_change-obj_langu  = sy-langu.
    put content into table
        offset = 0.
        if iv_objtp = gc_type_note.
    it's a note
          l_retype = 'NOTE'.
          l_obj_type = 'RAW'.
          l_object_hd_change-file_ext = 'TXT'.
    read note content into table
          while offset <= size.
            offset_old = offset.
            offset = offset + 255.
            if offset > size.
              temp_len = strlen( iv_content+offset_old ).
              clear ls_data-line.
              ls_data-line = iv_content+offset_old(temp_len).
            else.
              ls_data-line = iv_content+offset_old(255).
            endif.
            append ls_data to lt_data.
          endwhile.
    get title from content , if it's initial
          if objname is initial.
            read table lt_data index 1 into l_document_title.
            while l_document_title+49 <> ' '.
              shift l_document_title right.
            endwhile.
            shift l_document_title left deleting leading ' '.
            ls_doc_change-obj_descr = l_document_title.
          endif.
        else.
    it's url (not note)
          l_retype = 'URL'.
          l_obj_type = 'URL'.
          if objname is initial.
            split iv_content at '/' into table lt_urltab.
            describe table lt_urltab lines l_tab_size.
            read table lt_urltab index l_tab_size into ls_doc_change-obj_descr.
          endif.
          while offset <= size.
            offset_old = offset.
            offset = offset + 250.
            if offset > size.
              temp_len = strlen( iv_content+offset_old ).
              clear ls_data-line.
              ls_data-line = iv_content+offset_old(temp_len).
            else.
              ls_data-line = iv_content+offset_old(250).
            endif.
            concatenate '&KEY&' ls_data-line into ls_data-line.
            append ls_data to lt_data.
          endwhile.
        endif.
        ls_doc_change-doc_size = size.
       l_object_hd_change-objnam = ls_doc_change-obj_name.
        l_object_hd_change-objdes = ls_doc_change-obj_descr.
        l_object_hd_change-objsns = ls_doc_change-sensitivty.
        l_object_hd_change-objla  = ls_doc_change-obj_langu.
        l_object_hd_change-objlen = ls_doc_change-doc_size.
      endif.
    save object
      call function 'SO_OBJECT_INSERT'
           exporting
                folder_id                  = l_folder_id
               OBJECT_FL_CHANGE           = OBJECT_FL_CHANGE
                object_hd_change           = l_object_hd_change
                object_type                = l_obj_type
               ORIGINATOR_ID              = OWNER_ID
              OWNER                      = USER-USRNAM
           importing
               OBJECT_FL_DISPLAY          = OBJECT_FL_DISPLAY
               OBJECT_HD_DISPLAY          = OBJECT_HD_DISPLAY
                object_id                  = ls_object_id   "l_doc_info-object_id
           tables
                objcont                    = lt_data
                objhead                    = lt_obj_header
               OBJPARA                    = OBJECT_PARA
               OBJPARB                    = OBJECT_PARB
           exceptions
                component_not_available    = 01
                folder_not_exist           = 06
                folder_no_authorization    = 05
                object_type_not_exist      = 17
                operation_no_authorization = 21
                parameter_error            = 23
                others                     = 1000.
      if sy-subrc <> 0.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into ls_message-message.
        ls_message-type = sy-msgty.
        ls_message-id = sy-msgid.
        ls_message-number = sy-msgno.
        ls_message-message_v1 = sy-msgv1.
        ls_message-message_v2 = sy-msgv2.
        ls_message-message_v3 = sy-msgv3.
        ls_message-message_v4 = sy-msgv4.
        append ls_message to rt_messages.
        return.
      endif.
    create relation
      data l_obj_rolea type borident.
      data l_obj_roleb type borident.
    MOVE-CORRESPONDING wd_this->ms_lporb to l_obj_rolea.
      l_obj_rolea-objkey = is_lporb-instid.
      l_obj_rolea-objtype = is_lporb-typeid.
      l_obj_rolea-logsys = is_lporb-catid.
      l_object_id_fol  = l_folder_id.
      l_object_id = ls_object_id.
      concatenate l_object_id_fol l_object_id into l_obj_roleb-objkey respecting blanks.
      l_obj_roleb-objtype = 'MESSAGE'.
      clear l_obj_roleb-logsys.
      call function 'BINARY_RELATION_CREATE'
        exporting
          obj_rolea    = l_obj_rolea
          obj_roleb    = l_obj_roleb
          relationtype = l_retype
        exceptions
          others       = 1.
      if sy-subrc = 0.
        commit work and wait.
       wd_this->MV_UPDATE_FLAG = 'X'.
      else.
        message id sy-msgid type sy-msgty number sy-msgno
                with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 into ls_message-message.
        ls_message-type = sy-msgty.
        ls_message-id = sy-msgid.
        ls_message-number = sy-msgno.
        ls_message-message_v1 = sy-msgv1.
        ls_message-message_v2 = sy-msgv2.
        ls_message-message_v3 = sy-msgv3.
        ls_message-message_v4 = sy-msgv4.
        append ls_message to rt_messages.
        return.
      endif.
    endmethod.
    Edited by: Reyleene Hunt on May 26, 2009 10:05 AM

  • How to delete Services For Objects Attachments?

    How can I delete records from SOFFCONT1 selectively, to recover Database space, without corruption of Database integrity in other tables?
    Thousands of scanned images have been uploaded to SAP R3 as 'Attachments' to Financial documents, and produced massive amounts of binary data in table SOFFCONT1.  It was thought that 'Links' were being created until Basis saw the size of table SOFFCONT1.
    A new methodolgy creates 'Links' to files on a network filer instead.
    The bleeding has stopped!
    The original methodology for creating the relationship included the following:
    SO_FOLDER_ROOT_ID_GET
    SO_OBJECT_UPLOAD
    SO_SPLIT_FILE_AND_PATH
    SO_LOIO_PHIO_CREATE
    SO_OBJECT_INSERT
    BINARY_RELATION_CREATE
    New records are thereby added to the following tables:
    SOFFLOIO
    SOFFPHIO
    SOFFCONT1
    SOFFPHF
    SOOD
    SOC3
    SOFM
    SRGBTBREL
    A debug session of the transaction FB03, display attachments, and delete revealed the following function modules:
    BINARY_RELATION_DELETE
    SO_OBJECT_DELETE_IN_VB
    This only deletes the relationship records in tables:
    SOFM
    SRGBTBREL
    What I really want to do is delete all traces (records in tables) of these image/document relationships in R3 and recover the Database space.
    Is anyone experienced with this recovery process, and has a solution to this requirement?
    Any suggestions welcome.
    Thanks, Marlon

    (for the OP)
    Roger Wilmut1 wrote:
    The User Library is hidden by default but in Mavericks you can make it visible - open your Home Folder the from the Finder's View menu, choose show View Options and check Show User Library.
    or just hold Option then Finder menu  Go > Library.

Maybe you are looking for

  • Ipod not recognized by itunes with vista!!

    I (amid all of my other troubles with vista) have updated to itunes 7.2 but am not able to get itunes to recognize my 30 GB video ipod. I perused the other discussions and noticed others have had the same problem but never came across an answer. than

  • Back dated MIGO problem

    Hello, I have stock of 100 ea of material on 01.04.2008. Now i am taking receipt of 100 ea supposed on 30.04.08. Now i am issueing material of qty 200 on 15.04.08. System accepting whereas it should give an error message that deficiet stock of 100 ea

  • Grey out of component screen fields in sub contracting PO.

    Hi!!!!!!!! Sapers When i am creating subcontracting Purchase order , In this i want restrict the users to add or modify the components screen fields. what i need exactly is i want to gray out  the fields of these component screen . Is it Possiable? O

  • How durable is the ipad with retina display glass?

    How durable is the ipad with retina display glass?

  • BPELConsole error: "FlowViewer is not defined"

    Hi have you see this error, when opening the "Flow" tab? BPELConsole opens a error window displaying: Error: Internal/Bug (# 736) FlowViewer is not defined And the strange fact is it only occurs for one bpel process, the other ones I can see the flow