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.

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.

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.


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