Validation for Attatchments (Services for Object) in ME51N

Hi Experts,
                   Actually i will attatch any documents in Service for Objects when i create ME51n, Before it creates  i need to throw error message if i didnt attatch any documents(*service for objects*)  .I am unable to find this , kindly suggest any Badi or Enhancement spot for it.
Regards
Deepak Gonuru
Edited by: deepakg on Dec 31, 2011 9:59 AM

Hi ,
you need to search for BADI/EHN SPOT from where you can get class instance of cl_gos_manager ...
in ME51N program...search for GOS_MANAGER....
regards
Prabhu

Similar Messages

  • ME51N services for object- How to collective list attachment by Requisition

    Hello!!
    When create ME51N or Change ME52N a puechase requisition, the users use the Service for Object to attach some word, excel, pictures files as attachements.
    There is away to see in a table or in a report what documents have an attachemnt and what not have it?

    Hi
    There is no standard report for attachment list. But for a particular document you can view attachment by selecting services for object and view attachement lists.
    Regards
    M P D Kamath

  • Creating Activity object for a Service Request object...

    <b>[This thread was migrated from the On Demand Developer Forum in the old Siebel Community] </b>
    drangineni
    New Contributor
    Ho do we use Activity object of a Service Request object. I am trying to
    create an Activity object for a existing Service Request object.
    I am looking for some sample code.
    I greatly appreciate your help.
    Product: CRM OnDemand
    11-26-2006 12:40 PM
    Re: Creating Activity object for a Service Request object...
    BigSlick
    Valued Contributor
    drangineni, What programming language are you using?
    BS
    12-04-2006 10:56 AM
    Re: Creating Activity object for a Service Request object...
    drangineni
    New Contributor
    Hi, I am using C# .
    12-04-2006 07:40 PM
    Re: Creating Activity object for a Service Request object...
    BigSlick
    Valued Contributor
    drangineni, assuming you know the service requestid or externalId of the
    Sr you are dealin gwith you would first set that value.
    ServiceRequest1[] objSRList =new ServiceRequest1[1];
    objSRList[0] = new ServiceRequest1();
    objSRList[0].ServiceRequestId = <YourSRId>;
    Then you create an array of activities and initialize the first one:
    objSRList[0].ListOfActivity = new Activity[1];
    objSRList[0].ListOfActivity[0] = new Activity();
    Now set the data fields
    objSRList[0].ListOfActivity[0].Subject ="My Subject";
    objSRList[0].ListOfActivity[0].Description ="My Description";
    objSRList[0].ListOfActivity[0].Display = "Task"; //valid values are either
    "Task" or "Appointment"
    Then call the ServiceREquestInsertOrUpdate method on the ServiceRequest
    WebService and pass in the above variable.
    BS
    12-06-2006 12:36 PM
    Re: Creating Activity object for a Service Request object...
    drangineni
    New Contributor
    Thank you BigSlick.
    The following error is thrown when I use the
    ServiceRequestInsertOrUpdate(objInput)
    "No user key can be used for the Integration Component instance 'Service <br/>
    Request_Action'.(SBL-EAI-04397)"
    When I use the prxySrvcRequest.ServiceRequestInsert(objInput), no error is
    thrown and the Activity gets added, but a new Service Request object is
    created, but the Activity gets added to an existing Service Request
    object. I greatly appreciate your help.
    The following is the code:
    int ActivityLength = 0;
    WSOD_ServiceRequest.ServiceRequest1[] ServiceRequest = new
    WSOD_ServiceRequest.ServiceRequest1[1];
    ServiceRequest[0] = new WSOD_ServiceRequest.ServiceRequest1();
    ServiceRequest[0].ServiceRequestId = this.Request.QueryString["id"];
    ServiceRequest[0].ListOfActivity = new
    WebSelfService.WSOD_ServiceRequest.Activity[ActivityLength + 1];
    ServiceRequest[0].ListOfActivity[0] = new WSOD_ServiceRequest.Activity();
    ServiceRequest[0].ListOfActivity[ActivityLength].Description =
    this.txtDescription.Text;
    ServiceRequest[0].ListOfActivity[ActivityLength].Display = "Task";
    ServiceRequest[0].ListOfActivity[ActivityLength].Subject = "My Subject";
    WSOD_ServiceRequest.ServiceRequest prxySrvcRequest = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequest();
    WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Input
    objInput = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Input();
    WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Output
    objOutput = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Output();
    objInput.ListOfServiceRequest = ServiceRequest;
    Session objSession;
    objSession = (Session) Application["Session"];
    prxySrvcRequest.Url = objSession.GetURL();
    try
    objOutput = prxySrvcRequest.ServiceRequestInsertOrUpdate(objInput);
    catch(Exception e)
    12-09-2006 09:53 AM
    Re: Creating Activity object for a Service Request object...
    drangineni
    New Contributor
    Thank you BigSlick.
    The following error is thrown when I use the
    ServiceRequestInsertOrUpdate(objInput)
    "No user key can be used for the Integration Component instance 'Service <br/>
    Request_Action'.(SBL-EAI-04397)"
    When I use the prxySrvcRequest.ServiceRequestInsert(objInput), no error is
    thrown and the Activity gets added, but a new Service Request object is
    created, but the Activity gets added to an existing Service Request
    object. I greatly appreciate your help.
    The following is the code:
    int ActivityLength = 0;
    WSOD_ServiceRequest.ServiceRequest1[] ServiceRequest = new
    WSOD_ServiceRequest.ServiceRequest1[1];
    ServiceRequest[0] = new WSOD_ServiceRequest.ServiceRequest1();
    ServiceRequest[0].ServiceRequestId = this.Request.QueryString["id"];
    ServiceRequest[0].ListOfActivity = new
    WebSelfService.WSOD_ServiceRequest.Activity[ActivityLength + 1];
    ServiceRequest[0].ListOfActivity[0] = new WSOD_ServiceRequest.Activity();
    ServiceRequest[0].ListOfActivity[ActivityLength].Description =
    this.txtDescription.Text;
    ServiceRequest[0].ListOfActivity[ActivityLength].Display = "Task";
    ServiceRequest[0].ListOfActivity[ActivityLength].Subject = "My Subject";
    WSOD_ServiceRequest.ServiceRequest prxySrvcRequest = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequest();
    WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Input
    objInput = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Input();
    WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Output
    objOutput = new
    WebSelfService.WSOD_ServiceRequest.ServiceRequestWS_ServiceRequestInsertOrUpdate_Output();
    objInput.ListOfServiceRequest = ServiceRequest;
    Session objSession;
    objSession = (Session) Application["Session"];
    prxySrvcRequest.Url = objSession.GetURL();
    try
    objOutput = prxySrvcRequest.ServiceRequestInsertOrUpdate(objInput);
    catch(Exception e)
    12-10-2006 08:49 AM
    Re: Creating Activity object for a Service Request object...
    BigSlick
    Valued Contributor
    Ah yes, I forgot you also need to specify a unquie Id for the activity.
    It's kinda strange.
    Try adding this:
    ServiceRequest[0].ListOfActivity[ActivityLength].ActivityId = "DummyId";
    //OD will overwrite this with a real Id
    Or if you have a unquie ID for your Activities you can use:
    ServiceRequest[0].ListOfActivity[ActivityLength].ExternalSystemId = <Your
    Unique Value>;
    Hope that helps,
    BS
    12-11-2006 10:52 AM
    Re: Creating Activity object for a Service Request object...
    surgientweb
    New Contributor
    Hi all,
    I have a similar problem, but mine is returning a message that field
    "Display" is required. Looking at this post and the documentation it is
    obvious that Display is a required field, but my WSDL did not include a
    field called "Display", so my proxy did not generate one.
    I tried adding a field called Display to the WSDL and the proxy class, but
    I get a different error... I figure I maybe cannot add it manually like
    that - but I think the bigger problem is it is not part of the WSDL that
    Siebel OD generates for me in my admin account.
    On top of that Display is not shown in the list of fields for Activity
    through the admin interface.. is it possible my account is bugged? Am I
    missing something simple here? BigSlick, I see you mention a .Display in
    your code sample so I thought you might understand what is wrong. Here is
    my code (I am trying to add a activity to a lead).
    Thanks for any insight into this!
    private void InsertLeadActivity(Session session, NameValueCollection data,
    string leadID)
    try
    if (blnDebug)
    Response.Write("Setting up Activity<br>";
    // instantiate the proxy service
    Activity_Service.Activity activityProxy = new Activity_Service.Activity();
    // set up the target URL
    activityProxy.Url = session.GetURL();
    activityProxy.CookieContainer = session.GetCookieContainer();
    // set up input argument
    ActivityNWS_Activity_Insert_Input input = new
    ActivityNWS_Activity_Insert_Input();
    input.ListOfActivity = new Activity1[1];
    input.ListOfActivity[0] = new Activity1();
    if (blnDebug)
    Response.Write("Getting Data<br>";
    // dg note: name value
    // input.ListOfActivity[0].MrMrs = data["MrMrs"];
    input.ListOfActivity[0].LeadId = leadID.ToString();
    input.ListOfActivity[0].Description = DataToString(data);
    input.ListOfActivity[0].Subject = "Website Submission Activity";
    input.ListOfActivity[0].Priority = "3-Low";
    //input.ListOfActivity[0].DueDate =
    DateTime.Now.AddDays(7).ToShortDateString();
    input.ListOfActivity[0].Owner = this.defaultLeadOwner;
    input.ListOfActivity[0].Type = "Call";
    //input.ListOfActivity[0].Display = "Task";
    input.ListOfActivity[0].ActivityId = "DummyId";
    input.ListOfActivity[0].ExternalSystemId = "web";
    activityProxy.Activity_Insert(input);
    catch (Exception exInsertActivity1)
    if (blnDebug)
    Response.Write("<br>Error inserting activity.<br><br>" +
    exInsertActivity1.ToString() + "<br>";
    01-06-2007 05:05 PM
    Re: Creating Activity object for a Service Request object...
    surgientweb
    New Contributor
    Figured it out.. the field "Display" is also known as "Activity"........
    Here are some notes for other people.. good luck and feel free to write me
    at raskawa-at-gmail-com if you want a code sample.
    Some unpublished nice to knows for Siebel On Demand Activities....
    In summary:
    - .Activity is also known as Display in documentation and on the error
    messages coming back from the WS. Also, it appears based on these boards
    some people actually have a .Display field. Maybe different accounts
    generate different WSDL's.... buggy.
    - If a error message is thrown saying "Description is required" it really
    means "Subject is required" (make sure .Subject has a value)
    - If a error message is thrown complaining that ActionType is not right..
    that is really .Type.. make sure it's lookup value is valid for the
    dropdown values in your CRM OD system.
    My code/values that worked..
    input.ListOfActivity[0].LeadId = leadID.ToString();
    input.ListOfActivity[0].Description = DataToString(data);
    input.ListOfActivity[0].Subject = "Website Submission Activity";
    input.ListOfActivity[0].Priority = "3-Low";
    //input.ListOfActivity[0].DueDate =
    DateTime.Now.AddDays(7).ToShortDateString();
    input.ListOfActivity[0].Owner = this.defaultLeadOwner;
    input.ListOfActivity[0].Type = "Call";
    input.ListOfActivity[0].ActivityId = "DummyId";
    input.ListOfActivity[0].ExternalSystemId = "web";
    //input.ListOfActivity[0].Display = "Task"; //doesn't work
    input.ListOfActivity[0].Activity = "Task"; //does work.
    01-06-2007 05:17 PM
    Re: Creating Activity object for a Service Request object...
    raskawa
    First Time Contributor
    Hi,
    This is surgientweb (under my own login now..)
    Anyway, I wanted to add that I figured out that there are two ways to add
    a Activity to a Lead. Via the Lead object (by getting a ListOfActivities)
    OR by creating a Activity directly and just adding your "LeadID" to it (or
    you can also add a "ContactID" to relate the activity to a Contact.)
    Feel free to email me for a code example (raskawa....at....gmail)
    -David
    01-09-2007 02:58 PM

    Hi Stephane,
    You can definitely read the categories using Tables in CRM. The logic is a bit complicated though.
    Use the following steps to retrieve Categories using Std. CRM Tables:
    1. Pass transaction GUID in field GUID of table CRMV_REPORT_SUBJ and get KATALOGART, CODEGRUPPE and CODE field values in lv_catalog, lv_codegrp and lv_code.
    2. Now you need to concatenate these 3 fields values carefully like this:
    CONCATENATE lv_catelog lv_codegrp '    ' lv_code into lv_category1.
    Remember there are 4 spaces between lv_codegrp and lv_code.
    3. Now pass this lv_category1 in field OBJEXT in table CRMC_ERMS_CAT_OK and get OBJGUID in field lv_objguid.
    4. Pass this lv_objguid in field OBJ_GUID and LNK_TYPE = 'IS_CODE' in table CRMC_ERMS_CAT_LN and get value of CAT_GUID in lv_cat_guid.
    5. Pass this lv_cat_guid in field CAT_GUID in table CRMC_ERMS_CAT_CA and get value of CAT_ID in field lv_cat_text.
    Remember this lv_cat_text is the text value of your last level of category of transaction.
    6. To get its upper cateogry level value, simply use table CRMC_ERMS_CAT_HI and get parent guid value and pass this as CAT_GUID again in table CRMC_ERMS_CAT_CA to get its text.
    Alternatively, you can also use class method cl_crm_ml_category_util=>get_parse_all to get all levels of categories.
    Hope this helps.
    Thanks
    Vishal

  • I am unable to use services for objects  while creating a PO

    Hi All,
    I am unable to use services for objects  while creating a PO ie in me21n / Me22n .
    Our client wants to attach some doucument along with the PO, we want to use services for object for this. I use this services for objects in admin level , but unable to use this at user level. 
    System gives the following message
    No service available
    Message no. SGOS_MSG002
    Regards
    Gsg

    Hi,
    Refer the following OSS notes 552127, 598073
    For getting Object for services icon in ME21N and ME51N refer OSS note 913251

  • Services for Object - Store Business Documents (issue with XLSX files)

    Hi,
    We are using the Services for Object > Store Business Document to be able to drag and drop files into (for example) Sales Inquiry, Sales Order, Sales Quotations etc.
    Within OAC2 we have set up the global document types and these have been linked to the relevant Object Types and Content Repositories in OAC3.  We have also set up the Content Repository as Document Area 'ARCHLINK'.
    The ArhciveLink Basic Settings in OAG1 have the 'Always Copy Document Class from Document Type' set under Storage Settings.
    The issue we are having is with XLSX document types.  When we drag and drop the XLSX documen type using the Store Business Document the file is stored against the Sales Order but when you come to view the attachments MS Excel opens but an error message appears saying 'Excel cannot open the file '******' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file'?
    We have reviewed SAP notes 1925897, 1739026 and 1145885 however non appear to give me a clear answer as to why this is happening?
    I have found that if we unselect the option 'Always Copy Document Class from Document Type' in OAG1 then we can open the XLSX files.
    As we have a significant amount of documents attached to various objects, what would be the implications of making this change agianst existing records and new records?
    Any advice on this issue would be greatly appreciated.
    Gary B

    Hi David,
    No joy I'm afraid!!
    I added entry 'xlslx' with the relevant MIME Type, Application and Description into table TOADD for the ArchiveLink settings and also this entry was already in tables SDOKMIME and SDOKFEXT for KPro.
    I then following the process via the Services for Object within VA12 (Change Inquiry) to then Create > Store Business document > Select the relevant Document Type > Drag and Drop the XLSX file into the empty box.
    I then saved the record and tried to view the attachement but I am still getting the same message  'Excel cannot open the file '******' because the file format or file extension is not valid. Verify that the file has not been corrupted and that the file extension matches the format of the file'?
    Our client is on componet SAP_BASIS release 701 Support Level 0014 and Support Package SAPKB70114 and I can see that note 1237688 is for SAPKB70112?
    Regards
    Gary

  • 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

  • "Services for Object" in my own transaction

    Hi everybody,
    In MM02 you see the button for the toolbar "Services for Object" in the titlebar.
    I want to add that same functionality in my own transaction. Does anybody know how to do this?
    Thanks,
    Tim van Steenbergen.

    Sure,  you can do that.  Something like this.  You will have to use a valid object and key.  The example uses a maintenance notification.
    report zrich_0001 .
    parameters: p_check type c.
    at selection-screen output.
      call function 'SWU_OBJECT_PUBLISH'
        exporting
          objtype                 = 'BUS2038'
          objkey                  = '000010004288'
    *     CREATOR                 = ' '
    *     METHOD                  = ' '
    *   TABLES
    *     CONTAINER               =
       exceptions
         objtype_not_found       = 1
         others                  = 2.
    start-of-selection.
    Regards,
    Rich Heilman

  • Services for Object  Icon not in ME21N

    Hello Experts:
    Does anyone know the reason why the Services for Object icon exist in ME22N but not in ME21N?
    Thanks in advance for your help!!
    -Edgar

    hi buddy
    The Generic Object Services do not appear in the Enjoy Create Trasactions ME21N and ME51N. This functionality is not provided until now. Please do the below manual activities and then apply the code change.
    Other terms
    GOS, Generic Object Services, ME21N, ME51N
    Reason and Prerequisites
    New functionality
    Solution
    Step 1:
    Create a new Method in the CLASS CL_PO_HEADER_HANDLE_MM.
    1. Go to SE24 and enter CL_PO_HEADER_HANDLE_MM.
    2. enter the below details,
    Method name :GET_GOS_MANAGER
    Level: Instance Method
    Visiblity: Public
    Description:  Get Generic Object Services Manager
    3. Now Select the Method and add the parameters
    Parameter :RE_MANAGER
    Type: Returning
    Pass value : Select the Checkbox
    Typing Method : Type Ref To
    Associated Type : CL_GOS_MANAGER
    Save the method and activate it.
    Step 2:
    Modify the Method PO_READ
    1. Go to SE24 and enter CL_PO_HEADER_HANDLE_MM.
    2. Select the Method PO_READ
    3. Add a Parameter as below,
    Parameter :IM_GOS
    Type: Importing
    Optional : Select the Checkbox
    Typing Method : Type Ref To
    Associated Type : CL_GOS_MANAGER
    Save and activate the method.
    Step 3:
    Add a attribute to the Class CL_PO_HEADER_HANDLE_MM
    1. Go to SE24 and enter CL_PO_HEADER_HANDLE_MM.
    2. Fill the below values,
    Attribute : MY_GOS_MANAGER
    Level: Instance Attribute
    Visiblity: Private
    Typing: Type Ref To
    Associated type: CL_GOS_MANAGER
    Step 4:
    Modify the Method SET_PO_NUMBER
    1. Go to SE24 and enter CL_PO_HEADER_HANDLE_MM.
    2. Select the Method SET_PO_NUMBER
    3. Add a Parameter as below,
    Parameter :IM_GOS
    Type: Importing
    Optional value : Select the Checkbox
    Typing Method : Type Ref To
    Associated Type : CL_GOS_MANAGER
    Save and activate the method.
    Step 5:
    1. Go to SE24 and enter IF_PURCHASE_REQ_FACTORY.
    2. Select the method CREATE_HEADER and add the parameter.
    3. Fill the below values,
    Parameter :IM_GOS
    Type: Importing
    Optional : Select the CheckBox
    Typing Method :Type Ref To
    Associated Type : CL_GOS_MANAGER
    try this but the patch from sol manager will be recomended
    reward if useful

  • The method getBean() is not valid for metadata object /ex/model/remittance/client/common/bc4j.xcfg

    Hi,
    I am getting bellow error when i am running my application. I am using JDeveloper 11.1.2.3
    <Nov 6, 2013 9:52:57 AM AST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STANDBY>
    <Nov 6, 2013 9:52:57 AM AST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
    <BC4JConfigLifeCycleCallBack> <contextInitialized> MDS-01702: The method getBean() is not valid for metadata object /ex/model/remittance/client/common/bc4j.xcfg - it is allowed on only bean metadata objects.
    oracle.mds.exception.MDSRuntimeException: MDS-01702: The method getBean() is not valid for metadata object /ex/model/remittance/client/common/bc4j.xcfg - it is allowed on only bean metadata objects.
      at oracle.mds.core.MetadataObject.getBean(MetadataObject.java:327)
      at oracle.adf.share.jndi.MDSBackingStore.getMOBean(MDSBackingStore.java:558)
      at oracle.bc4j.mbean.RuntimeMXBeanImpl.init(RuntimeMXBeanImpl.java:120)
      at oracle.bc4j.mbean.RuntimeMXBeanImpl.<init>(RuntimeMXBeanImpl.java:110)
      at oracle.bc4j.mbean.RuntimeMXBeanImpl.<init>(RuntimeMXBeanImpl.java:101)
      at oracle.bc4j.mbean.BC4JConfigLifeCycleCallBack.contextInitialized(BC4JConfigLifeCycleCallBack.java:114)
      at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
      at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
      at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
      at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
      at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1872)
      at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
      at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
      at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
      at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
      at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
      at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
      at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
      at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
      at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
      at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
      at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
      at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
      at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
      at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
      at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
      at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:184)
      at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:361)
      at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51)
      at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200)
      at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30)
      at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240)
      at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169)
      at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123)
      at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:180)
      at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:96)
      at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
      at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
      at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    <Nov 6, 2013 9:53:11 AM AST> <Notice> <LoggingService> <BEA-320400> <The log file C:\Users\maroof\AppData\Roaming\JDeveloper\system11.1.2.3.39.62.76.1\DefaultDomain\servers\DefaultServer\logs\DefaultDomain.log will be rotated. Reop
    I seen oracle docs solution
    MDS-01702: The method getBean() is not valid for metadata object {0} - it is allowed on only bean metadata objects.
    Cause: An attempt was made to access the metadata object using the bean API but the metadata object was not a bean metadata object. The schema for the root element may not have been registered with MDS, or the beans were not available on the classpath.
    Action: Regenerate the beans from the schema definitions and ensure that the correct versions are on the classpath. Check that the schemas are registered with the MDS instance.
    Level: 1
    Type: ERROR
    Impact: Configuration
    But i am not getting what i do in my application for removing this error.
    Maroof

    Do you use MDS in your application?
    It's possible that you see a leftover of an earlier deployment.
    Do you get the same error if you only start the integrated server (application server navigator->integrated server->debug or run)?
    IF you don't get it when you only start the server without running your application, the problem is somewhere in your app. If you get the error it's probably an old deployment or a configuration error of your server. In this case stop jdev, rename the DefaultDomain folder C:\Users\maroof\AppData\Roaming\JDeveloper\system11.1.2.3.39.62.76.1\DefaultDomain tp C:\Users\maroof\AppData\Roaming\JDeveloper\system11.1.2.3.39.62.76.1\xxxDefaultDomain and start jdev again. Then use hte application server navigator to create a new integrated server (you should see this option as the DefaultDomain folder is not present) and once the new integrated server is created test again.
    Timo

  • Re: Services for Object Icon

    Hi,
    Is there a way i can configure the Service Object icon to be available durinng PR (ME51n) and PO (ME21N) creation to appear?
    At the moment, this icon can only be use during change/display mode of PR and PO...
    .the services for object icon is the one use when we want to attached document,link,sent notes etc..
    Pls.help. Thanks
    She

    Hi She,
    The object services require a unique identifier for the object        
    processed. And this unique identifier of the document                 
    is only created at the moment of save. Exist SAP Note 913251 to enable the 
    linkage of attachments in the enjoy transactions ME51N and ME21N,  but
    only from 4.7 onwards.   
    Regards,
    Mauro

  • Cannot view workflow log via Services for Object Workflow Overview

    We recently had an upgrade of R3/ECC and discovered a new issue.  For some reason we can no longer view workflow log via Services for Object > Workflow Overview for Material Master (transaction MM03).  We get the message "There are no workflows that have already worked with this object".  However, we have confirmed via SWEL and other t-codes that the workflow and log do exist.  This seems to be the only object we have this issue for after the upgrade.
    Anyone know what issue is and how to fix?   Or at least path to config in SPRO for "generic object services" where we can see if anything changed via upgrade for this object?
    Thanks,
    Matt
    Edited by: Matthew Huth on Apr 22, 2008 9:23 PM

    Found the solution.  See OSS note 553246.  This has been tested and works for us.   -Matt
    Note 553246
    Summary
    Symptom
    In the material master, the system no longer displays the attachments for the material or workflow items in the Generic Object Services.
    Other terms
    MM01, MM02, MM03
    Reason and Prerequisites
    As of Release 4.6B, business object BUS1001006 is valid for the material master. Until you have implemented Note 452424, the Generic Object Services is still published for the old BUS1001 business object. After implementing the note, all attachments, relationships, notes and workflow items that are assigned to business object BUS1001 are no longer displayed.
    Instead, all new attachments are assigned to business object BUS1001006. As a result, attachments cannot exist for both systems.
    For workflow items, the assignment to the business object occurs in the respective tasks. It may be very time consuming to convert the business object, depending on whether an individual subtype (assigned to BUS1001) is created.
    In other words, after you implement the note, the workflow items for business object BUS1001 can no longer be displayed in the material master.
    Solution
    With the following correction you can call the Generic Object Services for both business objects. When it is called, the system displays a dialog box in which you can choose the required business object, that is, BUS1001 ('Material') or BUS1001006 ('Standard material').
    This correction is delivered as a modification supported by SAP only. This is because the additional option means that attachments can be maintained as required in either of the business objects and users may therefore require extra training.
    However, the corrections enable you to display attachments and workflow items for both business objects without the need for a major conversion; this means that you do not get the impression that these have been lost.
    Alternatively, as of Release 4.70 (or Basis 6.20) you can, without making a modification, implement method ADD_OBJECTS of BAdI GOS_MULT_PUBLISH for filter attribute WF_OVERVIEW ('Workflow overview'), SRELATIONS ('Relationships') and VIEW_ATTA ('Attachment list'). The implementation should be similar to the following:
    METHOD if_ex_gos_mult_publish~add_objects .
      DATA:
        ls_lporb TYPE sibflporb.
      READ TABLE ct_lporb INTO ls_lporb INDEX 1.
      if ls_lporb-typeid = 'BUS1001006'.
        ls_lporb-typeid = 'BUS1001'.
        append ls_lporb to ct_lporb.
      endif.
    endmethod.

  • Accessing attachments from 'services for object'

    I have been tasked with extracting data from external attachments from the 'services for object' button. I am working in an sap ecc 6.0  environment. I have not found any tips on how to do this from google searches.
    Here is an example. If you look at most of the major documents (purchase order, invoice, delivery, etc.) there will be a little dropdown icon in the upper left corner of the screen
    That icon is the 'Services for Object' button. Clicking on it will display a small popup window with several options including one for attached documents.
    If an attachment (could be word, excel, pdf, URL, etc.) exists it will show up and can be viewed by double clicking on it. Does anyone know how to access
    that attachment programatically?
    Thank you very much in advance.
    deepak

    Hi,
    Create a subroutine in your program and call the FM: SWU_OBJECT_PUBLISH as below:
    CALL FUNCTION 'SWU_OBJECT_PUBLISH'
        EXPORTING
          objtype           = gc_businessobj
          objkey            = gw_header-vbeln
        EXCEPTIONS
          objtype_not_found = 1
          OTHERS            = 2.
    This will automatically display your Services for Object ICON on your report. Here in the FM, gc_businessobj is a global business object = BUS2031(defined as a constant inside the pgm) and gw_header-vbeln can be any valid document no like a sale order, inquiry, quotation etc.
    Use this code snippet and this will work.
    Regards,
    JLN

  • Entity Object validation for "Date" type

    I am trying to use the Entity Object validation for a Date field type, it is a required field.
    I am using the format: MM/dd/yy HH:mm:ss
    It is a simple validation where the date value must be less than or equal to the current date/time.
    I tried using "Query Result" validation where the date is LESS THAN the query SELECT SYSDATE FROM dual.
    This throws an error:
    JBO-27011: Attribute set with value 2006-07-09 14:05:53.0 for LksrSurveyDte in LCFSReportService.LeakDetailView1 failed.
    I have be unable to find help on validating dates using validation for an Entity Object and need some help.
    Thanks in advance.

    In your case you can implement a service method in the VO to check if any other reservation overlaps with the new one (which is not inserted in the db).
    I would use a an other VO (e.g. VODateCheck) for this. This VO has it's query build to check if a given roomid and a given startdate(time?) overlaps any other record for the roomid
    select * from ReservationRoom where RoomId=:bindRoomId and ReservationEnd>=:bindReservationStartIf this query returns one or more rows you have an overlapping in the schedule and throw an error.
    You call this VODateCheck from your service method in the other module before inserting the record. Set the bind variables in the VODateCheck and execute the query.
    Timo

  • In Attachement List Services for Objects White Screen when I Display a Note

    Hi Expert,
    Need your assistance.
    I am trying to view a note in Vendor Master data but no information provided and I can only see white screen. Below are the steps that I performed:
    1. Go to FK03
    2. Open a Vendor
    3. Click the Services for Objects
    4. Attachement List
    5. Select a Note
    4. Display it
    5. Pop up window appreared and no information occurred. Only White screen
    Is there's a missing configuration, plugin, or data in my SAP system/workstation?
    I tried to login to other PC and it worked.
    Just wondering what is missing on my computer.
    Your response will be helpful.

    Hey,
    I have the exact same problem as you have described. I also used my ipod as a watch but starting from today, whenever I unlock it the screen turns white until a reset is done. Even a factory reset through itunes didn't fix it.
    Have you found any solution?
    Bah, this is annoying.
    //Gubbar

  • Display GOS without click on 'Service for Object' button

    Please try the following step to figure out.
    1) VA03
    2) At header of report (on the left hand side of 'Display S/O SysB SDI xxxxxxxxx:Overview' ) has a button called 'Services for Object' (GOS)
    3) Click on that then it will popup icon menu set.  <--- Want this to be displayed when access VA03 by no need to click the button in 2)
    My requirement is I want this popup to be displayed suddenly after I access VA03 (no need to click on the Services for Object button anymore).
    <b>
    Could you please provide me any solution, function, example, similar case, etc. (based on 4.6c)?</b>
    Thank you all expert in advance.. I'll be here to provide you more information that need.

    I found the solution yet. Let me drop a note to be a memorandum.
    (1) Insert code into the last line of form <u>USEREXIT_READ_DOCUMENT</u> within report <u>MV45AFZZ</u>
    PERFORM UNITEXIT_READ_DOCUMENT.
    <b>*{   INSERT
    *[Display Attachment Service Automatically]
        DATA: lo_myobject  TYPE REF TO cl_gos_manager,
              lo_container TYPE REF TO cl_gui_custom_container,
              ls_object    TYPE borident.  "BOR Identifier
          ls_object-objkey  = vbak-vbeln.
          ls_object-objtype = 'BUS2032'.
          CREATE OBJECT lo_myobject.
          CALL METHOD lo_myobject->start_service_direct
                      EXPORTING ip_service   = 'VIEW_ATTA'
                                is_object    = ls_object
                                io_container = lo_container
                      EXCEPTIONS OTHERS          = 2.
    *[Display Toolbox]
        CALL METHOD lo_myobject->DISPLAY_TOOLBOX
                    EXPORTING  is_object       = ls_object
                               io_container    = lo_container
                    EXCEPTIONS OTHERS          = 2.
    *}   INSERT</b>
    ENDFORM.
    (2) Try open VA03 and insert attachment at Service for Object.
    (3) Reopen VA03, attachment list displayed suddenly.
    <i>Reference Source# SAP Library, search 'Starting Only One Service Directly'.</i>
    <b>NOTE:</b> You can use another relevant object by SE24 -> CL_GOS_MANAGER

Maybe you are looking for