top of page

SAP - ABAP create note on GOS Object



SAP - ABAP create note on GOS Object


This example is creating a note on production order (CO01-CO02) via GOS Object.


Attachment list of production order
GOS object on production order

But you can do this example on any screen which has gos object on left up side of screen.



The scenario is :

Customer wants to create 3 empty notes after production order created. Each user will enter the notes section of their own department and write their own notes.


I add 3 different notes.

This notes created by Z* FM which is developed by me
Created notes with ABAP Codes

For this scenario;

I create a Z function, and use it in User-Exit.






FUNCTION zpp_fm_uretim_not_yarat.
*"----------------------------------------------------------------------
*"*"Update Function Module:
*"
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_AUFNR) TYPE  AUFNR
*"  TABLES
*"      T_NOT_TIPLERI TYPE  ZKRZ_TT_URETIM_NOT_TIPLER
*"----------------------------------------------------------------------

INCLUDE <cntn01>.


TYPES: BEGIN OF ty_message_key,
            foltp TYPE so_fol_tp,
            folyr TYPE so_fol_yr,
            folno TYPE so_fol_no,
            doctp TYPE so_doc_tp,
            docyr TYPE so_doc_yr,
            docno TYPE so_doc_no,
            fortp TYPE so_for_tp,
            foryr TYPE so_for_yr,
            forno TYPE so_for_no,
END OF ty_message_key.


DATA : lv_botype TYPE obl_s_pbor-typeid VALUE 'BUS2005',
          lv_bo_id  TYPE obl_s_pbor-instid,
          lv_docty  TYPE obl_s_pbor-typeid, "" object name
          lv_msgtyp TYPE sofm-doctp        VALUE 'RAW',
          lv_reltyp TYPE mdoblrel-reltype VALUE 'NOTE'.


DATA : lv_message_key TYPE ty_message_key.
DATA : lo_message TYPE swc_object.
DATA : lt_doc_content TYPE STANDARD TABLE OF soli-line WITH HEADER LINE.
DATA : lt_not_tipleri TYPE zkrz_tt_uretim_not_tipler.


   lt_not_tipleri[] = t_not_tipleri[].

   lv_bo_id = iv_aufnr.

SELECT * FROM srgbtbrel
WHERE instid_a EQ @lv_bo_id
AND reltype = 'NOTE'
AND typeid_a = 'BUS2005'
INTO TABLE @DATA(lt_gos_notes).

"" check is there any note created before
LOOP AT lt_gos_notes REFERENCE INTO DATA(lr_gos_notes).
DATA : ls_document_data TYPE sofolenti1.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
         document_id                = lr_gos_notes->instid_b
         filter                     = 'X'
IMPORTING
         document_data              = ls_document_data
EXCEPTIONS
         document_id_not_exist      = 1
         operation_no_authorization = 2
         x_error                    = 3
OTHERS                     = 4.

LOOP AT lt_not_tipleri REFERENCE INTO DATA(lr_notlar).

IF ls_document_data-obj_descr = lr_notlar->obj_descr.
DELETE lt_not_tipleri.
ENDIF.
ENDLOOP.

ENDLOOP.
LOOP AT lt_not_tipleri REFERENCE INTO lr_notlar.


     lv_docty = lr_notlar->obj_name.

     swc_create_object lo_message 'MESSAGE' lv_message_key.
     swc_container lt_message_container.


     swc_set_element lt_message_container 'DOCUMENTTITLE' lr_notlar->obj_descr.
     swc_set_element lt_message_container 'DOCUMENTLANGU' 'T'.
     swc_set_element lt_message_container 'NO_DIALOG'     'X'.
     swc_set_element lt_message_container 'DOCUMENTNAME' lv_docty.
     swc_set_element lt_message_container 'DOCUMENTTYPE'   lv_msgtyp.


     lt_doc_content = '  ' .
APPEND lt_doc_content.


     swc_set_element lt_message_container 'DocumentContent' lt_doc_content.
     swc_call_method lo_message 'CREATE' lt_message_container.

     swc_refresh_object lo_message.
     swc_get_object_key lo_message lv_message_key.


DATA: lo_is_object_a TYPE sibflporb.
     lo_is_object_a-instid = lv_bo_id.
     lo_is_object_a-typeid = lv_botype.
     lo_is_object_a-catid  = 'BO'.



DATA: lo_is_object_b TYPE sibflporb.
     lo_is_object_b-instid = lv_message_key.
     lo_is_object_b-typeid = 'MESSAGE'.
     lo_is_object_b-catid  = 'BO'.


CALL METHOD cl_binary_relation=>create_link
EXPORTING
         is_object_a = lo_is_object_a
*       IP_LOGSYS_A =
         is_object_b = lo_is_object_b
*       IP_LOGSYS_B =
         ip_reltype  = lv_reltyp.




*    COMMIT WORK.
ENDLOOP.


ENDFUNCTION.

This structure should be created for IMPORT parameter
Structure of T_NOT_TIPLERI

We will send document names in it.
Table type of T_NOT_TIPLERI


Then, I used this FM in PPCO0001 exit. Include is : ZXCO1U01


This FM should run in update task, because every thing about production order should be saved on DB before GOS documents creation.




DATA : lt_notlar TYPE  zkrz_tt_uretim_not_tipler.

LOOP AT header_table REFERENCE INTO DATA(lr_head).
    clear lt_notlar[].
   lt_notlar[] = VALUE #( 
      ( obj_name = 'PLANLAMA' obj_descr = 'PLANLAMA NOTU' )
      ( obj_name = 'KALITE' obj_descr = 'KALİTE NOTU' )
      ( obj_name = 'URETIM' obj_descr = 'ÜRETİM NOTU' )
                        ).


CALL FUNCTION 'ZPP_FM_URETIM_NOT_YARAT' in UPDATE TASK
EXPORTING
       iv_aufnr      = lr_head->aufnr
TABLES
       t_not_tipleri = lt_notlar.

ENDLOOP.

SAP - ABAP create note on GOS Object




19 views0 comments

Recent Posts

See All
Post: Blog2_Post
bottom of page