You are on page 1of 145

***** Implementation of object type MESSAGE *****

INCLUDE <OBJECT>.
BEGIN_DATA OBJECT. " Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
begin of private,
CHANGED_OBJECTS(255) OCCURS 0,
* Diese Tabelle vereinigt die 3 alten Tabellen:
* DEL_RECIPS, DEL_OBJ, NEW_OBJ
* Das BOR war nicht in der Lage, 3 private Tabellenattribute
* zu verwalten. Daher diese Notlsung.
* Zeichen 1-7:
* Typ des Eintrags, also 'DEL_RCP', 'DEL_APL', 'NEW_APL'
* Zeichen 8-255:
* Wert, also LIKE SOMGK oder LIKE SOMG-USED_BY
* Bemerkung: Diese Einschrnkung ex. nicht mehr, aber zuviel
* Aufwand, dies erneut umzustellen
* del_recips like somgk occurs 0,
* del_obj like somgk occurs 0,
* new_obj like somg-used_by occurs 0,
* deleted_recipients like somgk occurs 0,
* Flag that this object was changed
CHANGED LIKE SONV-FLAG,
* Flag that this object was enqueued
ENQUEUED LIKE SONV-FLAG,
* Flags that document attributes has been changed
DOC_CHANGED LIKE SONV-FLAG,
PROC_GENERAL_CHANGED LIKE SONV-FLAG,
PROC_MEMID_CHANGED LIKE SONV-FLAG,
PROC_PARA_CHANGED LIKE SONV-FLAG,
PROC_PARB_CHANGED LIKE SONV-FLAG,
OBJCONT_CHANGED LIKE SONV-FLAG,
SENSITIVITY_CHANGED LIKE SONV-FLAG,
MODIF_CHANGED LIKE SONV-FLAG,
DESC_CHANGED LIKE SONV-FLAG,
* SOMG key of this message object
SOMG_KEY LIKE SOMGK,
PERSIST_CHECKED LIKE SONV-FLAG,
OBJCONT LIKE SOLI OCCURS 0,
DESCRIPTION LIKE SOOD-OBJDES,
GENERAL_NOTE LIKE SOLI OCCURS 0, "TR280598 B40K011880
end of private,
BEGIN OF KEY,
FOLDERTYPE LIKE SOFM-FOLTP,
FOLDERYEAR LIKE SOFM-FOLYR,
FOLDERNUMBER LIKE SOFM-FOLNO,
TYPE LIKE SOFM-DOCTP,
YEAR LIKE SOFM-DOCYR,
NUMBER LIKE SOFM-DOCNO,
FORWARDERNAME LIKE SOUB-USRNAM,
END OF KEY,
RECIPIENTS TYPE SWC_OBJECT OCCURS 0,
ASYNCHRON TYPE SOMG-ASYNCHRON,
OUTBOXFLAG TYPE SOMG-OUTBOX,
LINKFOLDERTYPE TYPE SOODK-OBJTP,
LINKFOLDERYEAR TYPE SOODK-OBJYR,
LINKFOLDERNUMBER TYPE SOODK-OBJNO,
APPLOBJECTIDS TYPE SOMG-USED_BY OCCURS 0,
GENERALNOTETYPE TYPE SOMG-GEN_NOTTP,
GENERALNOTEYEAR TYPE SOMG-GEN_NOTYR,
GENERALNOTENUMBER TYPE SOMG-GEN_NOTNO,
NEXTSENDER TYPE SOMG-SENDER,
PROCESSTYPE TYPE SOOD-VMTYP,
PROCESSELEMENT TYPE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN TYPE SOOD-SKIPS,
PROCMEMORYID TYPE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
SENSITIVITY TYPE SOOD-OBJSNS,
MODIFIABLE TYPE SOOD-OBJCP.
END_DATA OBJECT. " Do not change.. DATA is generated
* Constants
CONSTANTS IDX TYPE I VALUE 999999999.
* Tables
TABLES SOS01.
* Type pools
TYPE-POOLS: SO.
GET_PROPERTY APPLOBJECTIDS CHANGING CONTAINER.
SWC_SET_TABLE CONTAINER 'ApplObjectIDs' OBJECT-APPLOBJECTIDS.
END_PROPERTY.
GET_PROPERTY RECIPIENTS CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_TABLE CONTAINER 'Recipients' OBJECT-RECIPIENTS.
END_PROPERTY.
GET_PROPERTY OUTBOXFLAG CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'OutboxFlag' OBJECT-OUTBOXFLAG.
END_PROPERTY.
GET_PROPERTY LINKFOLDERTYPE CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'LinkFolderType' OBJECT-LINKFOLDERTYPE.
END_PROPERTY.
GET_PROPERTY LINKFOLDERYEAR CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'LinkFolderYear' OBJECT-LINKFOLDERYEAR.
END_PROPERTY.
GET_PROPERTY LINKFOLDERNUMBER CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'LinkFolderNumber' OBJECT-LINKFOLDERNUMBER.
END_PROPERTY.
GET_PROPERTY GENERALNOTETYPE CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'GeneralNoteType' OBJECT-GENERALNOTETYPE.
END_PROPERTY.
GET_PROPERTY GENERALNOTEYEAR CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'GeneralNoteYear' OBJECT-GENERALNOTEYEAR.
END_PROPERTY.
GET_PROPERTY GENERALNOTENUMBER CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'GeneralNoteNumber'
OBJECT-GENERALNOTENUMBER.
END_PROPERTY.
*et_property linkfoldertype changing container.
*DATA: subrc LIKE sy-subrc,
* msgv1 LIKE sy-msgv1,
* msgv2 LIKE sy-msgv2,
* msgv3 LIKE sy-msgv3,
* msgv4 LIKE sy-msgv4.
* PERFORM refresh_attributes CHANGING subrc
* msgv1
* msgv2
* msgv3
* msgv4.
* IF subrc NE 0.
* exit_return subrc msgv1 msgv2 msgv3 msgv4.
* ENDIF.
* swc_set_element container 'Folder' object-folder.
*end_property.
GET_PROPERTY NEXTSENDER CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'NextSender' OBJECT-NEXTSENDER.
END_PROPERTY.
GET_PROPERTY ASYNCHRON CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
PERFORM REFRESH_ATTRIBUTES CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'Asynchron' OBJECT-ASYNCHRON.
END_PROPERTY.
GET_PROPERTY PROCESSTYPE CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCESSTYPE = OBJECT-PROCESSTYPE.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'ProcessType' PROCESSTYPE.
END_PROPERTY.
GET_PROPERTY PROCESSELEMENT CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCESSELEMENT = OBJECT-PROCESSELEMENT.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'ProcessElement' PROCESSELEMENT.
END_PROPERTY.
GET_PROPERTY PROCSKIPFIRSTSCREEN CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCSKIPFIRSTSCREEN = OBJECT-PROCSKIPFIRSTSCREEN.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'ProcSkipFirstScreen'
PROCSKIPFIRSTSCREEN.
END_PROPERTY.
GET_PROPERTY PROCMEMORYID CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_MEMID_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCMEMORYID = OBJECT-PROCMEMORYID.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'ProcMemoryID' PROCMEMORYID.
END_PROPERTY.
GET_PROPERTY PROCSETGETTAB CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
LIN LIKE SY-TABIX,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
NEWPROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: extct like sood-extct. "TR070199 4.6a
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_PARA_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCSETGETTAB[] = OBJECT-PROCSETGETTAB[].
ENDIF.
SWC_CLEAR_CONTAINER CONTAINER.
PERFORM SELC_TO_ID_VALUE TABLES PROCSETGETTAB
NEWPROCSETGETTAB.
SWC_SET_TABLE CONTAINER 'ProcSetGetTab' NEWPROCSETGETTAB.
END_PROPERTY.
GET_PROPERTY PROCIMPORTPARAMTAB CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
LIN LIKE SY-TABIX,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-PROC_PARB_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
PROCIMPORTPARAMTAB[] = OBJECT-PROCIMPORTPARAMTAB[].
ENDIF.
SWC_CLEAR_CONTAINER CONTAINER.
SWC_SET_TABLE CONTAINER 'ProcImportParamTab'
PROCIMPORTPARAMTAB.
END_PROPERTY.
GET_PROPERTY SENSITIVITY CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-SENSITIVITY_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
SENSITIVITY = OBJECT-SENSITIVITY.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'Sensitivity' SENSITIVITY.
END_PROPERTY.
GET_PROPERTY MODIFIABLE CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
OBJCONTTAB LIKE SOLI-LINE OCCURS 0.
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR 6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
IF OBJECT-PRIVATE-MODIF_CHANGED NE 'X'.
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_PROPERTY_NOT_FOUND.
ENDCASE.
ELSE.
MODIFIABLE = OBJECT-MODIFIABLE.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'Modifiable' MODIFIABLE.
END_PROPERTY.
************************************************************************
* Save
************************************************************************
BEGIN_METHOD SAVE CHANGING CONTAINER.
DATA: SAVE(255),
CHANGED_OBJECT(255),
TYPE(7),
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
OBJECT_HD_CHANGE LIKE SOOD1,
SOFM_KEY LIKE SOFMK,
OFFICE_ID LIKE SOUDK,
SOMG_KEY LIKE SOMGK,
SOMG_APPL_KEY LIKE SOMGK,
SOMG_DATA LIKE SOMGD,
SOMG_APPL_DATA LIKE SOMGD,
APL_ID LIKE SOMG-USED_BY,
WA_APPL_OBJECT LIKE SOMG-USED_BY,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
ADDRESS_NAME LIKE SOUD3-ADRNAME,
SOMG_KEY_TAB LIKE SOMGK OCCURS 0 WITH HEADER LINE,
REC_KEY LIKE SWOTOBJID,
BOR_OBJ_ID LIKE SWOTOBJID,
RECIPIENT_TAB TYPE SWC_OBJECT OCCURS 0,
REC_HANDLE TYPE SWC_OBJECT,
RECIPIENT TYPE SWC_OBJECT,
NOT_PERSISTENT,
LIN LIKE SY-TABIX,
LINK_RCODE LIKE SY-SUBRC,
ALL_BINDING_DONE LIKE SONV-FLAG VALUE 'X',
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
DATA: RELATIONTYPE LIKE BRELTYP-RELTYPE,
OBJ_ROLEA LIKE BORIDENT,
OBJ_ROLEB LIKE BORIDENT,
PUBLISHED_OBJECTS LIKE SWOTOBJID OCCURS 0 WITH HEADER LINE.
DATA: DARK_SOFM_ID LIKE SOFMK,
OBJ_ROLEB2 LIKE BORIDENT,
BOR_OBJ_ID_DARK LIKE SWOTOBJID.
SWC_CONTAINER LOCAL_CONTAINER.
* Look if key is filled
IF OBJECT-KEY-FOLDERTYPE IS INITIAL
AND OBJECT-KEY-FOLDERYEAR IS INITIAL
AND OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND OBJECT-KEY-TYPE IS INITIAL
AND OBJECT-KEY-YEAR IS INITIAL
AND OBJECT-KEY-NUMBER IS INITIAL
AND OBJECT-KEY-FORWARDERNAME IS INITIAL.
* Exception
EXIT_RETURN '2640' SPACE SPACE SPACE SPACE.
ENDIF.
* Look if corresponding SOFM object exists
SWC_CALL_METHOD SELF 'ExistenceCheck' LOCAL_CONTAINER.
CASE SY-SUBRC.
WHEN 0.
WHEN '0001'.
EXIT_RETURN 3826 SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
WHEN OTHERS.
EXIT_RETURN SY-SUBRC SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDCASE.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
* Look if message object is already persistent
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL "TR100798
AND OBJECT-PRIVATE-PERSIST_CHECKED = SPACE. "TR100798
MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'SOFM-Key' "#EC NOTEXT
OBJECT-KEY-FORWARDERNAME SPACE SPACE.
ENDIF.
MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
NOT_PERSISTENT = 'X'.
PERFORM SOMG_SELMSG(SAPFSSO5) TABLES SOMG_TAB "TR100798
USING SOFM_KEY
CHANGING RCODE.
IF RCODE = 0.
LOOP AT SOMG_TAB
WHERE OBJTP = 'MSG'.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_KEY.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
MOVE SOMG_KEY TO OBJECT-PRIVATE-SOMG_KEY.
NOT_PERSISTENT = SPACE.
EXIT.
ENDLOOP.
ENDIF.
OBJECT-PRIVATE-PERSIST_CHECKED = 'X'.
ELSE.
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
* * This is only possible if persist_checked = 'X'
* * That means it is already checked that object is not persistent
SOMG_KEY = SPACE.
NOT_PERSISTENT = 'X'.
ELSE.
* * SOMG_KEY is filled => object is persistent
SOMG_KEY = OBJECT-PRIVATE-SOMG_KEY.
NOT_PERSISTENT = SPACE.
ENDIF.
ENDIF. "TR100798
* Handle the 2 cases: object is persistent or not
IF NOT_PERSISTENT = SPACE.
* * Object is already persistent
* * Look if object is changed
IF OBJECT-PRIVATE-CHANGED = 'X'.
* * Object is changed (and therefore enqueued). Save changes
* * Save MESSAGE attributes
PERFORM FILL_SOMG_DATA CHANGING SOMG_DATA.
PERFORM SOMG_UPDATE(SAPFSSO5) USING SOMG_KEY
SOMG_DATA
RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'SOMG_UPDATE' 'RSSOOT05' SPACE SPACE.
ENDIF.
* Look at inserted and removed objects
LOOP AT OBJECT-PRIVATE-CHANGED_OBJECTS INTO CHANGED_OBJECT.
* Delete removed (associated) recipients
IF CHANGED_OBJECT(7) = 'DEL_RCP'.
MOVE CHANGED_OBJECT+7 TO SOMG_KEY.
* * Delete ZAV reference
PERFORM SOMG_SELECT(SAPFSSO5) USING SOMG_KEY
SOMG_DATA
CHANGING RCODE.
IF RCODE = 0.
PERFORM DELETE_ZAV_REFERENCE(RSSOOT04)
USING SOMG_KEY
SOMG_DATA-RCP_ID_TP
SOMG_DATA-RCP_ID_NO
CHANGING RCODE.
ENDIF.
* * Delete SOMG entry
PERFORM SOMG_DELETE(SAPFSSO5) USING SOMG_KEY
CHANGING RCODE.
IF RCODE NE 0.
* Do nothing?
ENDIF.
DELETE OBJECT-PRIVATE-CHANGED_OBJECTS.
ENDIF.
ENDLOOP.
ELSE.
* * Object is up to date.
* Do nothing (changes on associated recipients are saved below)
ENDIF.
ELSE.
* * Object is not persistent yet. Insert it in SOMG
* * Create new SOMG key
SOMG_KEY-OBJTP = 'MSG'.
PERFORM GET_NEXT_NUMBER(SAPFSSO2) USING SOMG_KEY-OBJTP
CHANGING SOMG_KEY-OBJNO
SOMG_KEY-OBJYR
RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'GET_NEXT_NUMBER' 'MSG' SPACE SPACE.
ENDIF.
PERFORM FILL_SOMG_DATA CHANGING SOMG_DATA.
* Insert in SOMG
PERFORM SOMG_INSERT(SAPFSSO5) USING SOMG_KEY
SOMG_DATA
CHANGING RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'SOMG_INSERT' 'RSSOOT05' SPACE SPACE.
ENDIF.
* Fill in SOMG key in object-private-somg_key.
MOVE SOMG_KEY TO OBJECT-PRIVATE-SOMG_KEY.
* Mark that persistance is checked
OBJECT-PRIVATE-PERSIST_CHECKED = 'X'.
ENDIF.
* Save changes of associated Recipients
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
SWC_SET_ELEMENT LOCAL_CONTAINER 'MasterMessage' OBJECT-KEY.
LOOP AT OBJECT-RECIPIENTS INTO REC_HANDLE
WHERE NOT HANDLE IS INITIAL.
SWC_CALL_METHOD REC_HANDLE 'Save' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
EXIT_RETURN '2621' SY-SUBRC SPACE SPACE SPACE.
ENDIF.
ENDLOOP.
* Save changes of processing parameters
IF OBJECT-PRIVATE-DOC_CHANGED = 'X'.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM UPDATE_DOCUMENT_DATA
TABLES OBJECT-PROCSETGETTAB
OBJECT-PROCIMPORTPARAMTAB
OBJECT-PRIVATE-OBJCONT
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
OBJECT-PROCMEMORYID
OBJECT-PROCESSTYPE
OBJECT-PROCESSELEMENT
OBJECT-PROCSKIPFIRSTSCREEN
OBJECT-SENSITIVITY
OBJECT-MODIFIABLE
OBJECT-PRIVATE-DESCRIPTION
CHANGING RCODE
MSGV1
MSGV2
MSGV3
MSGV4.
IF RCODE NE 0.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* * Clear central flag for document changed at once
CLEAR OBJECT-PRIVATE-DOC_CHANGED.
* * Clear special flags for special document attributes at once
PERFORM CLEAR_DOC_FLAGS.
* * Reset property buffer of SOFM "TR210199 4.6a
PERFORM CALL_SOFM_METHOD "TR210199 4.6a
TABLES CONTAINER "TR210199 4.6a
USING 'ResetPropertyBuffer' "TR210199 4.6a
CHANGING rcode "TR210199 4.6a
MSGV1 "TR210199 4.6a
MSGV2 "TR210199 4.6a
MSGV3 "TR210199 4.6a
MSGV4. "TR210199 4.6a
ENDIF.
* * Create links between application object(s) and message object
* * Get BOR-ID of message object
CLEAR BOR_OBJ_ID.
SWC_OBJECT_TO_PERSISTENT SELF BOR_OBJ_ID.
MOVE-CORRESPONDING BOR_OBJ_ID TO OBJ_ROLEB.
* * Set type of relation
RELATIONTYPE = 'OFFD'.
* * If there is no application object given, look for published objects
* * But only for new message objects
* DESCRIBE TABLE OBJECT-APPLOBJECTIDS LINES LIN. "986653 >>
* IF LIN = 0
* AND NOT_PERSISTENT NE SPACE.
* CALL FUNCTION 'SWU_OBJECT_GET'
* TABLES
* PUBLISHED_OBJECTS = PUBLISHED_OBJECTS
* EXCEPTIONS
* OBJECT_NOT_FOUND = 1
* OTHERS = 2.
* IF SY-SUBRC <> 0.
** Do nothing
* ELSE.
* LOOP AT PUBLISHED_OBJECTS.
* APL_ID = PUBLISHED_OBJECTS.
* APPEND APL_ID TO OBJECT-APPLOBJECTIDS.
* ENDLOOP.
* ENDIF.
* ENDIF. "986653 <<
* * If there is any binding to do, create additional link to dark folder
* CLEAR OBJ_ROLEB2.
* DESCRIBE TABLE OBJECT-APPLOBJECTIDS LINES LIN.
* IF LIN NE 0.
* PERFORM CREATE_LINK_TO_DARK_FOLDER CHANGING DARK_SOFM_ID
* RCODE.
* IF RCODE = 0
* AND NOT DARK_SOFM_ID IS INITIAL.
* MOVE BOR_OBJ_ID TO BOR_OBJ_ID_DARK.
* BOR_OBJ_ID_DARK-OBJKEY = DARK_SOFM_ID.
* MOVE-CORRESPONDING BOR_OBJ_ID_DARK TO OBJ_ROLEB2.
* ENDIF.
* ENDIF.
* * Loop at all application objects to create link
LOOP AT OBJECT-APPLOBJECTIDS INTO BOR_OBJ_ID.
MOVE-CORRESPONDING BOR_OBJ_ID TO OBJ_ROLEA.
* * Create links between application object(s) and message object
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
OBJ_ROLEA = OBJ_ROLEA
OBJ_ROLEB = OBJ_ROLEB
RELATIONTYPE = RELATIONTYPE
EXCEPTIONS
NO_MODEL = 2635
INTERNAL_ERROR = 2636
UNKNOWN = 2637
OTHERS = 2637.
IF SY-SUBRC NE 0.
* link_rcode = sy-subrc. "TR241097
* exit. " LOOP "TR241097
ALL_BINDING_DONE = SPACE. "TR241097
ELSE. "TR241097
DELETE OBJECT-APPLOBJECTIDS. "TR241097
ENDIF.
* * Make additional bind between application object and document
* * in dark folder
IF NOT OBJ_ROLEB2 IS INITIAL.
* * Create links between application object(s) and message object
CALL FUNCTION 'BINARY_RELATION_CREATE'
EXPORTING
OBJ_ROLEA = OBJ_ROLEA
OBJ_ROLEB = OBJ_ROLEB2
RELATIONTYPE = RELATIONTYPE
EXCEPTIONS
NO_MODEL = 2635
INTERNAL_ERROR = 2636
UNKNOWN = 2637
OTHERS = 2637.
ENDIF.
ENDLOOP.
* CLEAR CHANGED-FLAG
CLEAR OBJECT-PRIVATE-CHANGED.
* Clear global changed-flag
PERFORM CLEAR_GLOBAL_CHANGED_FLAG USING OBJECT-PRIVATE-SOMG_KEY.
* Refresh table with changed objects
REFRESH OBJECT-PRIVATE-CHANGED_OBJECTS.
* refresh object-applobjectids. "TR241097
* Dequeue this MESSAGE object on commit
* But only if I'm not already called on commit "TR040599 4.6a
if sy-oncom ne 'P'. "TR040599 4.6a
PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX.
else. "TR040599 4.6a
PERFORM DEQUEUE_ALL. "TR040599 4.6a
endif. "TR040599 4.6a
* Return result
SWC_SET_ELEMENT CONTAINER RESULT OBJECT-KEY.
SWC_SET_ELEMENT CONTAINER 'AllBindingDone' ALL_BINDING_DONE.
END_METHOD. " Save
************************************************************************
* Attach
************************************************************************
BEGIN_METHOD ATTACH CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* KPro data
DATA: KPRO_OBJECT LIKE SDOKOBJECT,
EXTCT LIKE SOOD-EXTCT,
CONTEXT LIKE SDOKPROPTY OCCURS 0 WITH HEADER LINE,
OBJHEAD LIKE SOLI-LINE OCCURS 1 WITH HEADER LINE,
OBJCONT LIKE SOLI-LINE OCCURS 1 WITH HEADER LINE.
* Check if this is a KPro LOIO
SWC_GET_ELEMENT CONTAINER 'ReferenceType' EXTCT.
IF EXTCT = 'K'. "reference_type_kpro
SWC_GET_ELEMENT CONTAINER 'KProObjectID' KPRO_OBJECT.
IF KPRO_OBJECT-CLASS IS INITIAL
OR KPRO_OBJECT-OBJID IS INITIAL.
EXIT_RETURN 1007 SPACE SPACE SPACE SPACE.
ENDIF.
SWC_GET_TABLE CONTAINER 'Context' CONTEXT.
SWC_DELETE_ELEMENT CONTAINER 'Context'.
SWC_DELETE_ELEMENT CONTAINER 'DocumentContent'.
CLEAR: OBJCONT, OBJCONT[].
CONCATENATE '&SO_KProObjectID=' "so_kpro_id
KPRO_OBJECT INTO OBJCONT.
APPEND OBJCONT.
LOOP AT CONTEXT.
CONCATENATE '&SO_KProContext&' "so_kpro_context
CONTEXT INTO OBJCONT.
APPEND OBJCONT.
ENDLOOP.
SWC_SET_TABLE CONTAINER 'DocumentContent' OBJCONT.
ENDIF.
* Call corresponding method of SOFM
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Attach' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
END_METHOD.
************************************************************************
* Create
************************************************************************
BEGIN_METHOD CREATE CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
OFFICE_ID LIKE SOUDK,
OLD_KEY LIKE OBJECT-KEY,
SOFM_KEY LIKE SOFMK,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE.
* KPro data
DATA: KPRO_OBJECT LIKE SDOKOBJECT,
EXTCT LIKE SOOD-EXTCT,
CONTEXT LIKE SDOKPROPTY OCCURS 0 WITH HEADER LINE,
OBJHEAD LIKE SOLI-LINE OCCURS 1 WITH HEADER LINE,
OBJCONT LIKE SOLI-LINE OCCURS 1 WITH HEADER LINE.
* Flag if new surface is wanted
data: enjoy like sonv-flag.
* Different default behaviour of parameter 'Enjoy'
* for SOFM and MESSAGE
SWC_GET_ELEMENT CONTAINER 'Enjoy' enjoy.
if sy-subrc = 8.
swc_set_element container 'Enjoy' 'X'.
endif.
* Check if this is a KPro LOIO
SWC_GET_ELEMENT CONTAINER 'ReferenceType' EXTCT.
IF EXTCT = 'K'. "reference_type_kpro
SWC_GET_ELEMENT CONTAINER 'KProObjectID' KPRO_OBJECT.
IF KPRO_OBJECT-CLASS IS INITIAL
OR KPRO_OBJECT-OBJID IS INITIAL.
EXIT_RETURN 1007 SPACE SPACE SPACE SPACE.
ENDIF.
SWC_GET_TABLE CONTAINER 'Context' CONTEXT.
SWC_DELETE_ELEMENT CONTAINER 'Context'.
SWC_DELETE_ELEMENT CONTAINER 'DocumentContent'.
CLEAR: OBJCONT, OBJCONT[].
CONCATENATE '&SO_KProObjectID=' "so_kpro_id
KPRO_OBJECT INTO OBJCONT.
APPEND OBJCONT.
LOOP AT CONTEXT.
CONCATENATE '&SO_KProContext&' "so_kpro_context
CONTEXT INTO OBJCONT.
APPEND OBJCONT.
ENDLOOP.
SWC_SET_TABLE CONTAINER 'DocumentContent' OBJCONT.
ENDIF.
* Call corresponding method of SOFM (including possible key changes)
OLD_KEY = OBJECT-KEY.
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Create' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
IF OLD_KEY = OBJECT-KEY.
* Nothing was changed, leave this method.
EXIT.
ENDIF.
* A new SOFM object was selected.
* Clear global changed-flag for old object key.
* Dequeue all on commit
IF NOT OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
PERFORM CLEAR_GLOBAL_CHANGED_FLAG
USING OBJECT-PRIVATE-SOMG_KEY.
* PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
* But only if I'm not already called on commit "TR040599 4.6a
if sy-oncom ne 'P'. "TR040599 4.6a
PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
else. "TR040599 4.6a
PERFORM DEQUEUE_ALL. "TR040599 4.6a
endif. "TR040599 4.6a
ENDIF.
* Initialize this message object
PERFORM INIT_MESSAGE_OBJECT.
* There's is nothing more to do.
* Checking if object is persistent and getting the attribute values
* will be done when requesting an attribute value or when calling a
* method of this message object.
END_METHOD. " Create
************************************************************************
* Display
************************************************************************
BEGIN_METHOD display CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
enjoy like sonv-flag.
* Different default behaviour of parameter 'Enjoy'
* for SOFM and MESSAGE
SWC_GET_ELEMENT CONTAINER 'Enjoy' enjoy.
if sy-subrc = 8.
swc_set_element container 'Enjoy' 'X'.
endif.
* Call corresponding method of SOFM (including possible key changes)
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Display' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
END_METHOD. " Display
************************************************************************
* DisplayAttachment
************************************************************************
BEGIN_METHOD displayattachment CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
enjoy like sonv-flag.
* Different default behaviour of parameter 'Enjoy'
* for SOFM and MESSAGE
SWC_GET_ELEMENT CONTAINER 'Enjoy' enjoy.
if sy-subrc = 8.
swc_set_element container 'Enjoy' 'X'.
endif.
* Call corresponding method of SOFM (including possible key changes)
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'DisplayAttachment'
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
END_METHOD. " DisplayAttachment
************************************************************************
* Find
************************************************************************
BEGIN_METHOD FIND CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
OFFICE_ID LIKE SOUDK,
OLD_KEY LIKE OBJECT-KEY,
SOFM_KEY LIKE SOFMK,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE.
* Call corresponding method of SOFM (including possible key changes)
OLD_KEY = OBJECT-KEY.
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Find' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
IF OLD_KEY = OBJECT-KEY.
* Nothing was changed, leave this method.
EXIT.
ENDIF.
* A new SOFM object was selected.
* Clear global changed-flag for old object key
* Dequeue all on commit
IF NOT OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
PERFORM CLEAR_GLOBAL_CHANGED_FLAG
USING OBJECT-PRIVATE-SOMG_KEY.
* PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
* But only if I'm not already called on commit "TR040599 4.6a
if sy-oncom ne 'P'. "TR040599 4.6a
PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
else. "TR040599 4.6a
PERFORM DEQUEUE_ALL. "TR040599 4.6a
endif. "TR040599 4.6a
ENDIF.
* Initialize this message object
PERFORM INIT_MESSAGE_OBJECT.
CLEAR OBJECT-PRIVATE-CHANGED. "TR020698 B40K011880
* There's is nothing more to do.
* Checking if object is persistent and getting the attribute values
* will be done when requesting an attribute value or when calling a
* method of this message object.
END_METHOD. " Find
************************************************************************
* Edit
************************************************************************
BEGIN_METHOD EDIT CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG.
* Flag if new surface is wanted
data: enjoy like sonv-flag.
data: deleted like sonv-flag. "TR090200 4.6D
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
MSGV1
MSGV2
MSGV3
MSGV4
RCODE.
CASE RCODE.
WHEN 0.
* OK. Nothing to do
WHEN 2999.
EXIT_OBJECT_NOT_FOUND.
WHEN OTHERS.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
* Different default behaviour of parameter 'Enjoy'
* for SOFM and MESSAGE
SWC_GET_ELEMENT CONTAINER 'Enjoy' enjoy.
if sy-subrc = 8.
swc_set_element container 'Enjoy' 'X'.
endif.
* Call corresponding method of SOFM (including possible key changes)
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Edit' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
* Dequeue (if sensible)
* if old_enqueued_flag = space.
* perform dequeue_esomg_message.
* endif.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
swc_get_element container 'Document_Deleted' deleted. "TR090200 4.6D
if sy-subrc = 0 "TR090200 4.6D
and deleted = 'X'. "TR090200 4.6D
* * user deleted document, so delete message object "TR090200 4.6D
swc_container local_container. "TR090200 4.6D
swc_set_element local_container 'NoDialog' 'X'. "TR090200 4.6D
swc_call_method self 'Delete' local_container. "TR090200 4.6D
endif. "TR090200 4.6D
* Mark object as changed
OBJECT-PRIVATE-CHANGED = 'X'.
END_METHOD. " Edit
************************************************************************
* Delete
************************************************************************
BEGIN_METHOD DELETE CHANGING CONTAINER.
DATA: SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
NO_DIALOG LIKE SONV-FLAG,
OFFICE_ID LIKE SOUDK,
CHANGED_OBJECT(255),
SOMG_KEY LIKE SOMGK,
SOFM_KEY LIKE SOFMK,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
SOMG_DATA LIKE SOMGD,
RECIPIENT TYPE SWC_OBJECT.
DATA: DOCUMENT_ID LIKE SOFOLENTI1-DOC_ID,
BEGIN OF DOC_ID_STRUCT,
FOLDERTYPE LIKE OBJECT-KEY-FOLDERTYPE,
FOLDERYEAR LIKE OBJECT-KEY-FOLDERYEAR,
FOLDERNUMBER LIKE OBJECT-KEY-FOLDERNUMBER,
TYPE LIKE OBJECT-KEY-TYPE,
YEAR LIKE OBJECT-KEY-YEAR,
NUMBER LIKE OBJECT-KEY-NUMBER,
FORWARDERNAME LIKE OBJECT-KEY-FORWARDERNAME,
END OF DOC_ID_STRUCT.
* Declare local container
SWC_CONTAINER LOCAL_CONTAINER.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'NoDialog' NO_DIALOG.
IF SY-SUBRC NE 0.
CLEAR NO_DIALOG.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
MSGV1
MSGV2
MSGV3
MSGV4
RCODE.
CASE RCODE.
WHEN 0.
* OK. Nothing to do
WHEN 2999.
EXIT_OBJECT_NOT_FOUND.
WHEN OTHERS.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
* Delete document (SOFM)
IF NOT OBJECT-KEY IS INITIAL.
IF NO_DIALOG IS INITIAL.
PERFORM CALL_SOFM_METHOD TABLES CONTAINER
USING 'Delete' "#EC NOTEXT
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
* IF SUBRC NE 0. "TR090200 4.6d
* EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4. "TR090200 4.6d
* ENDIF. "TR090200 4.6d
ELSE.
* * Fill document_id
MOVE-CORRESPONDING OBJECT-KEY TO DOC_ID_STRUCT.
MOVE DOC_ID_STRUCT TO DOCUMENT_ID.
* * Delete document
CALL FUNCTION 'SO_DOCUMENT_DELETE_API1'
EXPORTING
DOCUMENT_ID = DOCUMENT_ID
UNREAD_DELETE = 'X'
EXCEPTIONS
DOCUMENT_NOT_EXIST = 3826
OPERATION_NO_AUTHORIZATION = 2007
PARAMETER_ERROR = 2648
X_ERROR = 2648
ENQUEUE_ERROR = 2642
OTHERS = 2648.
* IF SY-SUBRC NE 0. "TR090200 4.6d
* EXIT_RETURN SY-SUBRC SPACE SPACE SPACE SPACE. "TR090200 4.6d
* ENDIF. "TR090200 4.6d
ENDIF.
ENDIF.
* Delete associated recipients
LOOP AT OBJECT-RECIPIENTS INTO RECIPIENT.
SWC_CALL_METHOD RECIPIENT 'Delete' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* Delete of message object is more important => go on
* exit_return '2631' space space space space.
ENDIF.
ENDLOOP.
* Look at removed objects
LOOP AT OBJECT-PRIVATE-CHANGED_OBJECTS INTO CHANGED_OBJECT.
* Delete removed (associated) recipients
IF CHANGED_OBJECT(7) = 'DEL_RCP'.
MOVE CHANGED_OBJECT+7 TO SOMG_KEY.
* * Delete ZAV reference
PERFORM SOMG_SELECT(SAPFSSO5) USING SOMG_KEY
SOMG_DATA
CHANGING RCODE.
IF RCODE = 0.
PERFORM DELETE_ZAV_REFERENCE(RSSOOT04)
USING SOMG_KEY
SOMG_DATA-RCP_ID_TP
SOMG_DATA-RCP_ID_NO
CHANGING RCODE.
ENDIF.
* * Delete SOMG entry
PERFORM SOMG_DELETE(SAPFSSO5) USING SOMG_KEY
CHANGING RCODE.
IF RCODE NE 0.
* Do nothing?
ENDIF.
DELETE OBJECT-PRIVATE-CHANGED_OBJECTS.
ENDIF.
ENDLOOP.
* Delete general note "TR290598 B40K012112
IF NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR290598 B40K012112
PERFORM DELETE_NOTE "TR290598 B40K012112
USING OBJECT-GENERALNOTETYPE "TR290598 B40K012112
OBJECT-GENERALNOTEYEAR "TR290598 B40K012112
OBJECT-GENERALNOTENUMBER "TR290598 B40K012112
CHANGING RCODE. "TR290598 B40K012112
ENDIF. "TR290598 B40K012112
IF NOT OBJECT-KEY IS INITIAL
AND NOT OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
* * Delete SOMG entry
PERFORM SOMG_DELETE(SAPFSSO5) USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
IF SUBRC NE 0.
* exit_return '2013' 'MESSAGE' object-private-somg_key space space.
ENDIF.
ENDIF.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
* Clear global changed-flag for old object key
* Dequeue all on commit
IF NOT OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
PERFORM CLEAR_GLOBAL_CHANGED_FLAG
USING OBJECT-PRIVATE-SOMG_KEY.
* PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
* But only if I'm not already called on commit "TR040599 4.6a
if sy-oncom ne 'P'. "TR040599 4.6a
PERFORM DEQUEUE_ALL ON COMMIT LEVEL IDX. "TR040599 4.6a
else. "TR040599 4.6a
PERFORM DEQUEUE_ALL. "TR040599 4.6a
endif. "TR040599 4.6a
ENDIF.
* Initialize this object
PERFORM INIT_MESSAGE_OBJECT.
CLEAR OBJECT-PRIVATE-CHANGED. "TR020698 B40K011880
* Clear key and attributes.
CLEAR OBJECT-KEY.
SWC_SET_OBJECTKEY OBJECT-KEY.
END_METHOD. " Delete
*&---------------------------------------------------------------------*
*& Form FILL_SOMG_DATA
*&---------------------------------------------------------------------*
* Fill SOMG data from object
*----------------------------------------------------------------------*
* -->OBJECT text *
* <--SOMG_DATA text *
*----------------------------------------------------------------------*
FORM FILL_SOMG_DATA CHANGING SOMG_DATA STRUCTURE SOMGD.
DATA:
OFFICE_ID LIKE SOUDK,
SOFMFOLKEY LIKE SOFMK, " Note: no access to FORTP,FORYR,FORNO
FOLTP LIKE SOMG-FOLTP,
FOLYR LIKE SOMG-FOLYR,
FOLNO LIKE SOMG-FOLNO,
OBJKEY LIKE SWOTOBJID-OBJKEY,
RCODE LIKE SY-SUBRC.
DATA: LIN LIKE SY-TABIX, "TR270598 B40K011880
MSGV1 LIKE SY-MSGV1, "TR270598 B40K011880
MSGV2 LIKE SY-MSGV2, "TR270598 B40K011880
MSGV3 LIKE SY-MSGV3, "TR270598 B40K011880
MSGV4 LIKE SY-MSGV4. "TR270598 B40K011880
* Initialization
CLEAR SOMG_DATA.
* SOFM key
* Transform Key-Forwardername to office id
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
MOVE: OBJECT-KEY-FOLDERTYPE TO SOMG_DATA-FOLTP,
OBJECT-KEY-FOLDERYEAR TO SOMG_DATA-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO SOMG_DATA-FOLNO,
OBJECT-KEY-TYPE TO SOMG_DATA-DOCTP,
OBJECT-KEY-YEAR TO SOMG_DATA-DOCYR,
OBJECT-KEY-NUMBER TO SOMG_DATA-DOCNO,
OFFICE_ID-USRTP TO SOMG_DATA-FORTP,
OFFICE_ID-USRYR TO SOMG_DATA-FORYR,
OFFICE_ID-USRNO TO SOMG_DATA-FORNO.
* Folder for "archiving" after sending
SOMG_DATA-ARC_FOLTP = OBJECT-LINKFOLDERTYPE.
SOMG_DATA-ARC_FOLYR = OBJECT-LINKFOLDERYEAR.
SOMG_DATA-ARC_FOLNO = OBJECT-LINKFOLDERNUMBER.
* Create note ID (if there is text and no ID) "TR270598 B40K011880
IF OBJECT-GENERALNOTENUMBER IS INITIAL. "TR270598 B40K011880
* * There is no ID "TR270598 B40K011880
* * Is there any note text? "TR270598 B40K011880
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE "TR270598 B40K011880
LINES LIN. "TR270598 B40K011880
IF LIN NE 0. "TR270598 B40K011880
PERFORM INSERT_NOTE "TR270598 B40K011880
TABLES OBJECT-PRIVATE-GENERAL_NOTE "TR270598 B40K011880
CHANGING OBJECT-GENERALNOTETYPE "TR270598 B40K011880
OBJECT-GENERALNOTEYEAR "TR270598 B40K011880
OBJECT-GENERALNOTENUMBER "TR270598 B40K011880
RCODE "TR270598 B40K011880
MSGV1 "TR270598 B40K011880
MSGV2 "TR270598 B40K011880
MSGV3 "TR270598 B40K011880
MSGV4. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
* Further fields
MOVE: OBJECT-GENERALNOTETYPE TO SOMG_DATA-GEN_NOTTP,
OBJECT-GENERALNOTEYEAR TO SOMG_DATA-GEN_NOTYR,
OBJECT-GENERALNOTENUMBER TO SOMG_DATA-GEN_NOTNO,
OBJECT-NEXTSENDER TO SOMG_DATA-SENDER,
OBJECT-ASYNCHRON TO SOMG_DATA-ASYNCHRON,
OBJECT-OUTBOXFLAG TO SOMG_DATA-OUTBOX.
ENDFORM. " FILL_SOMG_DATA
*&---------------------------------------------------------------------*
*& Form CONVERT_SAPNAM_TO_OFFICE_ID
*&---------------------------------------------------------------------*
* Convert SAP name to office Id (type, year, number)
*----------------------------------------------------------------------*
* -->SAPNAM text *
* <--OFFICE_ID text *
*----------------------------------------------------------------------*
FORM CONVERT_SAPNAM_TO_OFFICE_ID USING SAPNAM
CHANGING OFFICE_ID LIKE SOUDK
RCODE LIKE SY-SUBRC.
DATA: USER LIKE SOUD3.
CLEAR OFFICE_ID.
RCODE = 0.
CHECK SAPNAM NE SPACE.
CLEAR USER.
USER-SAPNAM = SAPNAM.
CALL FUNCTION 'SO_NAME_CONVERT'
EXPORTING
NAME_IN = USER
IMPORTING
NAME_OUT = USER
EXCEPTIONS
USER_NOT_EXIST = 34
OFFICE_NAME_NOT_EXIST = 19
PARAMETER_ERROR = 23
SAP_NAME_NOT_EXIST = 28
OTHERS = 99.
IF SY-SUBRC NE 0.
RCODE = 2013.
EXIT.
ELSE.
MOVE-CORRESPONDING USER TO OFFICE_ID.
ENDIF.
ENDFORM.
************************************************************************
* AddRecipient
************************************************************************
BEGIN_METHOD ADDCOPYOFRECIPIENT CHANGING CONTAINER.
DATA: NEW_RECIPIENT TYPE SWC_OBJECT,
SOFM_KEY LIKE SOFMK,
OFFICE_ID LIKE SOUDK,
SOMG_KEY LIKE SOMGK,
SOMG_DATA LIKE SOMGD,
HANDLE TYPE SWC_OBJECT,
IMPORT TYPE SWC_OBJECT,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
NOT_PERSISTENT,
OBJECT_KEY LIKE SWOTOBJID-OBJKEY.
DATA: BEGIN OF RECIPIENT_KEY,
RCP_ID_TP LIKE SOMG-RCP_ID_TP,
RCP_ID_YR LIKE SOMG-RCP_ID_YR,
RCP_ID_NO LIKE SOMG-RCP_ID_NO,
RCP_SND_TP LIKE SOMG-RCP_SND_TP,
RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
OBJYR LIKE SOMG-OBJYR,
OBJNO LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
DATA: BEGIN OF SOFMFOL_KEY,
ARC_PARTP LIKE SOMG-ARC_FOLTP,
ARC_PARYR LIKE SOMG-ARC_FOLYR,
ARC_PARNO LIKE SOMG-ARC_FOLNO,
ARC_FOLTP LIKE SOMG-ARC_FOLTP,
ARC_FOLYR LIKE SOMG-ARC_FOLYR,
ARC_FOLNO LIKE SOMG-ARC_FOLNO,
END OF SOFMFOL_KEY.
* Read container data
SWC_GET_ELEMENT CONTAINER 'NewRecipient' IMPORT.
* Check if NewRecipient is filled
IF IMPORT-HANDLE IS INITIAL.
EXIT_RETURN '2622' SPACE SPACE SPACE SPACE.
ENDIF.
* Create copy of Recipient
SWC_CONTAINER LOCAL_CONTAINER.
SWC_SET_ELEMENT LOCAL_CONTAINER 'MasterMessage' "TR640 CAM_REORG
OBJECT-KEY. "TR640 CAM_REORG
SWC_CALL_METHOD IMPORT 'Copy' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
EXIT_RETURN '2623' SPACE SPACE SPACE SPACE.
ENDIF.
SWC_GET_ELEMENT LOCAL_CONTAINER '_Result' NEW_RECIPIENT.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Append this new recipient to recipient list
read table object-recipients with key "TR640 CAM_REORG
handle = new_recipient-handle "(delete 679610)
transporting no fields. "TR640 CAM_REORG
if sy-subrc ne 0. "TR640 CAM_REORG
APPEND NEW_RECIPIENT TO OBJECT-RECIPIENTS.
endif. "TR640 CAM_REORG
* Signal that object was changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
* Return handle of copy
SWC_SET_ELEMENT CONTAINER RESULT NEW_RECIPIENT.
END_METHOD. " AddCopyOfRecipient
*&---------------------------------------------------------------------*
*& Form REFRESH_ATTRIBUTES
* ALTE VERSION: 4.5 + kleine nderungen
* (Persistence_Checked_Flag wird gesetzt aber nicht ausgewertet)
* Zu B99 ersetzt durch (vernderte) Kopie von Enqueue_And_Refresh,
* bei der der Enqueue_Teil gelscht
*&---------------------------------------------------------------------*
* Refresh attribute values by reading SOMG (if necessary)
*----------------------------------------------------------------------*
* <-- SUBRC
* <-- MSGV1
* <-- MSGV2
* <-- MSGV3
* <-- MSGV4
*----------------------------------------------------------------------*
*FORM REFRESH_ATTRIBUTES CHANGING SUBRC
* MSGV1
* MSGV2
* MSGV3
* MSGV4.
*DATA: SOFM_KEY LIKE SOFMK,
* OFFICE_ID LIKE SOUDK,
* SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
* SOMG_KEY LIKE SOMGK,
* SOMG_DATA LIKE SOMGD,
* OBJECT_KEY LIKE SWOTOBJID-OBJKEY,
* HANDLE TYPE SWC_OBJECT,
* RCODE LIKE SY-SUBRC.
*DATA: BEGIN OF RECIPIENT_KEY,
* RCP_ID_TP LIKE SOMG-RCP_ID_TP,
* RCP_ID_YR LIKE SOMG-RCP_ID_YR,
* RCP_ID_NO LIKE SOMG-RCP_ID_NO,
* RCP_SND_TP LIKE SOMG-RCP_SND_TP,
* RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
* OBJYR LIKE SOMG-OBJYR,
* OBJNO LIKE SOMG-OBJNO,
* END OF RECIPIENT_KEY.
*DATA: BEGIN OF SOFMFOL_KEY,
* ARC_PARTP LIKE SOMG-ARC_FOLTP,
* ARC_PARYR LIKE SOMG-ARC_FOLYR,
* ARC_PARNO LIKE SOMG-ARC_FOLNO,
* ARC_FOLTP LIKE SOMG-ARC_FOLTP,
* ARC_FOLYR LIKE SOMG-ARC_FOLYR,
* ARC_FOLNO LIKE SOMG-ARC_FOLNO,
* END OF SOFMFOL_KEY.
*DATA: PERSISTENT LIKE SONV-FLAG. "TR150798 Basis99
*
* SUBRC = 0. "TR150798 Basis99
*
* CHECK OBJECT-PRIVATE-CHANGED = SPACE "TR150798 Basis99
* AND NOT OBJECT-KEY IS INITIAL.
** and ( not object-private-somg_key is initial
** or object-private-persist_checked is initial ).
*
** Check if object is already persistent
* MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
* OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
* OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
* OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
* OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
* OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
* PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
* USING OBJECT-KEY-FORWARDERNAME
* CHANGING OFFICE_ID
* RCODE.
* IF RCODE NE 0.
* SUBRC = '2013'.
* MSGV1 = 'SOFM-Key'.
* MSGV2 = OBJECT-KEY-FORWARDERNAME.
* MSGV3 = SPACE.
* MSGV4 = SPACE.
* EXIT.
* ENDIF.
* MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
* OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
* OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
* PERFORM SOMG_SELIDA(SAPFSSO5) TABLES SOMG_TAB
* USING SOFM_KEY
* CHANGING RCODE.
* PERSISTENT = SPACE. "TR150798 Basis99
* CLEAR OBJECT-PRIVATE-SOMG_KEY. "TR150798 Basis99
* IF RCODE = 0.
* PERSISTENT = 'X'. "TR150798 Basis99
** Fill somg_key and somg_data
* LOOP AT SOMG_TAB
* WHERE OBJTP = 'MSG'.
* MOVE-CORRESPONDING SOMG_TAB TO SOMG_KEY.
* MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
* OBJECT-PRIVATE-SOMG_KEY = SOMG_KEY. "TR150798 Basis99
* EXIT.
* ENDLOOP.
** * Refresh buffer from database
** Recipient list
* REFRESH OBJECT-RECIPIENTS.
* LOOP AT SOMG_TAB WHERE OBJTP = 'RCP'.
* MOVE-CORRESPONDING SOMG_TAB TO RECIPIENT_KEY.
* CLEAR OBJECT_KEY.
* MOVE RECIPIENT_KEY TO OBJECT_KEY.
* SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
* IF SY-SUBRC = 0.
* APPEND HANDLE TO OBJECT-RECIPIENTS.
* ENDIF.
* ENDLOOP.
** List of application objects
** refresh object-applobjectids.
** loop at somg_tab where objtp = 'APL'.
** append somg_tab-used_by to object-applobjectids.
** endloop.
** Outbox flag
* OBJECT-OUTBOXFLAG = SOMG_DATA-OUTBOX.
** Additional Folder for archiving
* OBJECT-LINKFOLDERTYPE = SOMG_DATA-ARC_FOLTP.
* OBJECT-LINKFOLDERYEAR = SOMG_DATA-ARC_FOLYR.
* OBJECT-LINKFOLDERNUMBER = SOMG_DATA-ARC_FOLNO.
** General note
* OBJECT-GENERALNOTETYPE = SOMG_DATA-GEN_NOTTP.
* OBJECT-GENERALNOTEYEAR = SOMG_DATA-GEN_NOTYR.
* OBJECT-GENERALNOTENUMBER = SOMG_DATA-GEN_NOTNO.
** Synchronical sending
* OBJECT-ASYNCHRON = SOMG_DATA-ASYNCHRON.
** Next Sender
* OBJECT-NEXTSENDER = SOMG_DATA-SENDER.
* ENDIF.
* OBJECT-PRIVATE-PERSIST_CHECKED = 'X'. "TR150798 Basis99
*
*ENDFORM. " REFRESH_ATTRIBUTES
************************************************************************
* RemoveRecipient
************************************************************************
BEGIN_METHOD REMOVERECIPIENT CHANGING CONTAINER.
DATA: RECIPIENT TYPE SWC_OBJECT,
CHANGED_OBJECT(255),
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SOMG_KEY LIKE SOMGK,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG,
OBJECT_KEY LIKE SWOTOBJID-OBJKEY.
DATA: BEGIN OF RECIPIENT_KEY,
RCP_ID_TP LIKE SOMG-RCP_ID_TP,
RCP_ID_YR LIKE SOMG-RCP_ID_YR,
RCP_ID_NO LIKE SOMG-RCP_ID_NO,
RCP_SND_TP LIKE SOMG-RCP_SND_TP,
RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
OBJYR LIKE SOMG-OBJYR,
OBJNO LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
* Read import parameter
SWC_GET_ELEMENT CONTAINER 'Recipient' RECIPIENT.
* Check if obligatory import parameter is filled
IF RECIPIENT-HANDLE IS INITIAL.
EXIT_RETURN '2622' SPACE SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Delete this recipient from list of associated recipients
DELETE OBJECT-RECIPIENTS
WHERE HANDLE = RECIPIENT-HANDLE.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN '2624' SPACE SPACE SPACE SPACE.
ENDIF.
* Append this recipient to changed_objects (only if persistent)
SWC_GET_OBJECT_KEY RECIPIENT OBJECT_KEY.
MOVE OBJECT_KEY TO RECIPIENT_KEY.
SOMG_KEY-OBJTP = 'RCP'.
SOMG_KEY-OBJYR = RECIPIENT_KEY-OBJYR.
SOMG_KEY-OBJNO = RECIPIENT_KEY-OBJNO.
IF NOT SOMG_KEY-OBJYR IS INITIAL
AND NOT SOMG_KEY-OBJNO IS INITIAL.
MOVE: 'DEL_RCP' TO CHANGED_OBJECT(7),
SOMG_KEY TO CHANGED_OBJECT+7.
APPEND CHANGED_OBJECT TO OBJECT-PRIVATE-CHANGED_OBJECTS.
ENDIF.
* * Free recipient handle "TR031197
* free recipient. "TR031197 "TR110298
* Signal that object was changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. "RemoveRecipient
************************************************************************
* Submit
************************************************************************
BEGIN_METHOD SUBMIT CHANGING CONTAINER.
DATA:
RECIPIENT TYPE SWC_OBJECT,
PERSISTENT_OBJECT LIKE SWOTOBJID,
RECEIVERS LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
SOFM_ID LIKE SOFMK,
FOL_KEY LIKE SWOTOBJID-OBJKEY,
APPLOBJ LIKE SWOTOBJID OCCURS 0 WITH HEADER LINE,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
WA LIKE SOMG-USED_BY,
LINK_FOLDER_ID LIKE SOODK,
STORE_FLAG LIKE SONV-FLAG,
FORWARDER LIKE SOUD-USRNAM,
ORIGINATOR LIKE SOOS1-RECEXTNAM,
ORIGINATOR_TYPE LIKE SOOS1-RECESC,
OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
OBJCONT LIKE SOLI OCCURS 0 WITH HEADER LINE,
OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
NOTE_ID LIKE SOODK,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG,
SENT_TO_ALL LIKE SONV-FLAG,
COUNTER LIKE SY-TABIX,
ALL_BINDING_DONE LIKE SONV-FLAG VALUE 'X',
DESCRIPTION LIKE SOOD-OBJDES,
BOR_ID LIKE SWOTOBJID,
SNDINFOTAB LIKE SOSNDINF OCCURS 1 WITH HEADER LINE,
SOES_KEY LIKE SOESK,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
DATA: LIN LIKE SY-TABIX. "TR280598 B40K011880
data hex_mode like sonv-flag. "TR UNICODE 5.0A
SWC_CONTAINER LOCAL_CONTAINER.
*** TR140798 Basis99
** Save message and all associated recipients
* SWC_SET_ELEMENT LOCAL_CONTAINER 'MasterMessage' OBJECT-KEY.
* SWC_CALL_METHOD SELF 'Save' LOCAL_CONTAINER.
* IF SY-SUBRC NE 0.
* EXIT_RETURN SY-SUBRC SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
** Read import parameter AllBindingDone
* SWC_GET_ELEMENT LOCAL_CONTAINER 'AllBindingDone' ALL_BINDING_DONE.
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
*** "TR140798 Basis99
* Check at least one recipient
DESCRIBE TABLE OBJECT-RECIPIENTS LINES LIN.
IF LIN = 0.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN '2079' SPACE SPACE SPACE SPACE.
ENDIF.
* Save changes of document attributes
IF OBJECT-PRIVATE-DOC_CHANGED = 'X'.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM UPDATE_DOCUMENT_DATA
TABLES OBJECT-PROCSETGETTAB
OBJECT-PROCIMPORTPARAMTAB
OBJECT-PRIVATE-OBJCONT
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
OBJECT-PROCMEMORYID
OBJECT-PROCESSTYPE
OBJECT-PROCESSELEMENT
OBJECT-PROCSKIPFIRSTSCREEN
OBJECT-SENSITIVITY
OBJECT-MODIFIABLE
OBJECT-PRIVATE-DESCRIPTION
CHANGING RCODE
MSGV1
MSGV2
MSGV3
MSGV4.
IF RCODE NE 0.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* * Clear central flag for document changed at once
CLEAR OBJECT-PRIVATE-DOC_CHANGED.
* * Clear special flags for special document attributes at once
PERFORM CLEAR_DOC_FLAGS.
ENDIF.
* Create note ID (if there is text and no ID)
IF OBJECT-GENERALNOTENUMBER IS INITIAL.
* * There is no ID
* * Is there any note text?
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE
LINES LIN.
IF LIN NE 0.
PERFORM INSERT_NOTE
TABLES OBJECT-PRIVATE-GENERAL_NOTE
CHANGING OBJECT-GENERALNOTETYPE
OBJECT-GENERALNOTEYEAR
OBJECT-GENERALNOTENUMBER
RCODE
MSGV1
MSGV2
MSGV3
MSGV4.
ENDIF.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE.
ENDIF.
* Prepare Receiver-Table for call of SO_OBJECT_SEND
REFRESH RECEIVERS.
LOOP AT OBJECT-RECIPIENTS INTO RECIPIENT.
SWC_OBJECT_TO_PERSISTENT RECIPIENT PERSISTENT_OBJECT.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN '2648' SPACE SPACE SPACE SPACE.
ENDIF.
CLEAR RECEIVERS.
RECEIVERS-RECESC = 'J'.
RECEIVERS-RECEXTNAM = PERSISTENT_OBJECT.
RECEIVERS-RCODE = '00'.
* * Note
SWC_GET_PROPERTY RECIPIENT 'NoteType' RECEIVERS-NOTTP.
IF SY-SUBRC = 0 AND NOT RECEIVERS-NOTTP IS INITIAL.
SWC_GET_PROPERTY RECIPIENT 'NoteYear' RECEIVERS-NOTYR.
SWC_GET_PROPERTY RECIPIENT 'NoteNumber' RECEIVERS-NOTNO.
ENDIF.
IF RECEIVERS-NOTTP IS INITIAL
OR RECEIVERS-NOTYR IS INITIAL
OR RECEIVERS-NOTNO IS INITIAL.
* Take general note of message
RECEIVERS-NOTTP = OBJECT-GENERALNOTETYPE.
RECEIVERS-NOTYR = OBJECT-GENERALNOTEYEAR.
RECEIVERS-NOTNO = OBJECT-GENERALNOTENUMBER.
ENDIF.
APPEND RECEIVERS.
ENDLOOP.
*** TR140798 Basis99
* This check is done above
** At least 1 receiver?
* IF SY-SUBRC NE 0.
** Dequeue (if sensible)
* IF ADDITIONAL_ENQUEUE NE SPACE.
* PERFORM CALL_DEQUEUE_MODULE_ONCE
* USING OBJECT-PRIVATE-SOMG_KEY.
* ENDIF.
* EXIT_RETURN '2079' SPACE SPACE SPACE SPACE.
* ENDIF.
* Prepare table of application object id's
REFRESH APPLOBJ.
LOOP AT OBJECT-APPLOBJECTIDS INTO WA.
MOVE WA TO APPLOBJ.
APPEND APPLOBJ.
ENDLOOP.
* Split Message-Id (= SOFM-Id) into folder-id, object-id, forwarder name
MOVE: OBJECT-KEY-FOLDERTYPE TO FOLDER_ID-OBJTP,
OBJECT-KEY-FOLDERYEAR TO FOLDER_ID-OBJYR,
OBJECT-KEY-FOLDERNUMBER TO FOLDER_ID-OBJNO,
OBJECT-KEY-TYPE TO OBJECT_ID-OBJTP,
OBJECT-KEY-YEAR TO OBJECT_ID-OBJYR,
OBJECT-KEY-NUMBER TO OBJECT_ID-OBJNO,
OBJECT-KEY-FORWARDERNAME TO FORWARDER.
* Fill sender information
IF NOT OBJECT-NEXTSENDER IS INITIAL.
ORIGINATOR = OBJECT-NEXTSENDER.
ORIGINATOR_TYPE = 'J'.
ELSE.
CLEAR: ORIGINATOR,
ORIGINATOR_TYPE.
ENDIF.
* Fill folder for (additional) link
LINK_FOLDER_ID-OBJTP = OBJECT-LINKFOLDERTYPE.
LINK_FOLDER_ID-OBJYR = OBJECT-LINKFOLDERYEAR.
LINK_FOLDER_ID-OBJNO = OBJECT-LINKFOLDERNUMBER.
IF LINK_FOLDER_ID IS INITIAL.
STORE_FLAG = SPACE.
ELSE.
STORE_FLAG = 'X'.
ENDIF.
* Send
IF OBJECT-ASYNCHRON = 'X'.
* * Send asynchron
CALL FUNCTION 'SO_JOB_SUBMIT'
EXPORTING
METHOD = 'SEND_ONE_OBJECT'
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
FORWARDER = FORWARDER
OUTBOX_FLAG = OBJECT-OUTBOXFLAG
STORE_FLAG = STORE_FLAG
LINK_FOLDER_ID = LINK_FOLDER_ID
ORIGINATOR = ORIGINATOR
ORIGINATOR_TYPE = ORIGINATOR_TYPE
TABLES
RECEIVERS = RECEIVERS
APPLICATION_OBJECT = APPLOBJ
EXCEPTIONS
OTHERS = 1.
* * Export SOES keys of receivers as address objects
REFRESH SNDINFOTAB.
SWC_OBJECT_TO_PERSISTENT SELF BOR_ID.
CLEAR BOR_ID-OBJTYPE.
LOOP AT RECEIVERS.
CLEAR BOR_ID-OBJKEY.
MOVE-CORRESPONDING RECEIVERS TO SOES_KEY.
BOR_ID-OBJTYPE = 'Address'. "#EC NOTEXT
BOR_ID-OBJKEY = SOES_KEY.
MOVE-CORRESPONDING BOR_ID TO SNDINFOTAB.
SNDINFOTAB-RCODE = RECEIVERS-RCODE.
APPEND SNDINFOTAB.
ENDLOOP.
SWC_SET_TABLE CONTAINER 'RecipientsInfo' SNDINFOTAB.
IF SY-SUBRC NE 0.
EXIT_RETURN '2694' 'SO_JOB_SUBMIT' SY-SUBRC SPACE SPACE.
ELSE.
SENT_TO_ALL = 'X'.
ENDIF.
*** TR140798 Basis99
* * Refresh application objects for binding
REFRESH OBJECT-APPLOBJECTIDS.
ELSE.
* * Send synchron
CALL FUNCTION 'SO_OBJECT_SEND'
EXPORTING
FOLDER_ID = FOLDER_ID
FORWARDER = FORWARDER
OBJECT_ID = OBJECT_ID
OUTBOX_FLAG = OBJECT-OUTBOXFLAG
STORE_FLAG = STORE_FLAG
ORIGINATOR = ORIGINATOR
ORIGINATOR_TYPE = ORIGINATOR_TYPE
LINK_FOLDER_ID = LINK_FOLDER_ID
IMPORTING
SENT_TO_ALL = SENT_TO_ALL
ALL_BINDING_DONE = ALL_BINDING_DONE
TABLES
RECEIVERS = RECEIVERS
APPLICATION_OBJECT = APPLOBJ
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2054
COMMUNICATION_FAILURE = 2133
COMPONENT_NOT_AVAILABLE = 2001
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2156
FORWARDER_NOT_EXIST = 2027
NOTE_NOT_EXIST = 2899
OBJECT_NOT_EXIST = 3826
OBJECT_NOT_SENT = 2654
OBJECT_NO_AUTHORIZATION = 2007
OBJECT_TYPE_NOT_EXIST = 2627
OPERATION_NO_AUTHORIZATION = 2002
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 2004
SUBSTITUTE_NOT_ACTIVE = 2629
SUBSTITUTE_NOT_DEFINED = 2629
SYSTEM_FAILURE = 2133
TOO_MUCH_RECEIVERS = 2552
USER_NOT_EXIST = 2201
X_ERROR = 2648
OTHERS = 2648.
* * Save system variables
SUBRC = SY-SUBRC.
MSGV1 = SPACE.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
CASE SY-SUBRC.
WHEN 2001.
MSGV1 = 'Senden'(004).
WHEN 2002.
MSGV1 = 'Senden'(004).
WHEN 2054.
MSGV1 = SY-UNAME.
WHEN 2156.
MSGV1 = FOLDER_ID.
WHEN 2201.
* * Get owner
GET PARAMETER ID 'SOS' FIELD SY-MSGV1.
WHEN 2654.
* * Get document description
SWC_GET_PROPERTY SELF 'Description' DESCRIPTION.
MSGV1 = DESCRIPTION.
ENDCASE.
* * Export SOES keys of receivers as address objects
REFRESH SNDINFOTAB.
SWC_OBJECT_TO_PERSISTENT SELF BOR_ID.
CLEAR BOR_ID-OBJTYPE.
LOOP AT RECEIVERS.
CLEAR BOR_ID-OBJKEY.
MOVE-CORRESPONDING RECEIVERS TO SOES_KEY.
BOR_ID-OBJTYPE = 'Address'.
BOR_ID-OBJKEY = SOES_KEY.
MOVE-CORRESPONDING BOR_ID TO SNDINFOTAB.
SNDINFOTAB-RCODE = RECEIVERS-RCODE.
APPEND SNDINFOTAB.
ENDLOOP.
SWC_SET_TABLE CONTAINER 'RecipientsInfo' SNDINFOTAB.
* * Error handling
* * Raise exception
IF SUBRC NE 0.
* * Dequeue (if sensible)
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
*** TR140798 Basis99
* * Refresh application objects for binding
IF ALL_BINDING_DONE = 'X'.
REFRESH OBJECT-APPLOBJECTIDS.
ENDIF.
ENDIF.
* * Delete all recipients (they are not necessary any more)
LOOP AT OBJECT-RECIPIENTS INTO RECIPIENT.
SWC_SET_ELEMENT LOCAL_CONTAINER 'Recipient' RECIPIENT.
SWC_CALL_METHOD SELF 'RemoveRecipient' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
ELSE.
OBJECT-PRIVATE-CHANGED = 'X'.
ENDIF.
* delete recipient object from SOMG
* note 840493 - some apps keep message object, so we cannot
* delete the recipients here, even although they are only copies.
* swc_call_method recipient 'DELETE' local_container.
* if sy-subrc ne 0.
* just continue with processing
* endif.
ENDLOOP.
* Clear attributes that correspond to a single send process
IF SENT_TO_ALL = 'X'.
* * Clear general note
CLEAR OBJECT-GENERALNOTETYPE.
CLEAR OBJECT-GENERALNOTEYEAR.
CLEAR OBJECT-GENERALNOTENUMBER.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR280598 B40K011880
* * Clear next sender
CLEAR OBJECT-NEXTSENDER.
* * Clear asynchron flag
CLEAR OBJECT-ASYNCHRON.
* * Signal that object has been changed
OBJECT-PRIVATE-CHANGED = 'X'.
ELSE. "TR280598 B40K011880
IF NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR280598 B40K011880
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE "TR280598 B40K011880
LINES LIN. "TR280598 B40K011880
IF LIN = 0. "TR280598 B40K011880
* * Read note text from database "TR280598 B40K011880
* * Fill object id "TR280598 B40K011880
OBJECT_ID-OBJTP = OBJECT-GENERALNOTETYPE. "TR280598 B40K011880
OBJECT_ID-OBJYR = OBJECT-GENERALNOTEYEAR. "TR280598 B40K011880
OBJECT_ID-OBJNO = OBJECT-GENERALNOTENUMBER. "TR280598 B40K011880
PERFORM SOCX_SELECT(SAPFSSO0) "TR280598 B40K011880
TABLES OBJHEAD "TR280598 B40K011880
OBJECT-PRIVATE-GENERAL_NOTE "TR280598 B40K011880
OBJPARA "TR280598 B40K011880
OBJPARB "TR280598 B40K011880
USING OBJECT_ID "TR280598 B40K011880
hex_mode "TR UNICODE 5.0A
RCODE. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
CLEAR OBJECT-GENERALNOTETYPE. "TR280598 B40K011880
CLEAR OBJECT-GENERALNOTEYEAR. "TR280598 B40K011880
CLEAR OBJECT-GENERALNOTENUMBER. "TR280598 B40K011880
* * Signal that object has been changed "TR280598 B40K011880
OBJECT-PRIVATE-CHANGED = 'X'. "TR280598 B40K011880
ENDIF.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
* Export parameter
SWC_SET_ELEMENT CONTAINER 'SentToAll' SENT_TO_ALL.
SWC_SET_ELEMENT CONTAINER 'AllBindingDone' ALL_BINDING_DONE.
END_METHOD. " Submit
************************************************************************
* SetGeneralNote
************************************************************************
BEGIN_METHOD ADDGENERALNOTE CHANGING CONTAINER.
DATA:
NOTE_TEXT LIKE SOLI OCCURS 0,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
RCODE LIKE SY-SUBRC,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
LIN TYPE P,
RECEIVERS LIKE SOOS1 OCCURS 0,
OBJECT_ID LIKE SOODK,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG,
OBJHEAD TYPE SO_OBJECT_HEADER, "TR280598 B40K011880
OBJCONT TYPE SO_OBJECT_CONTENT, "TR280598 B40K011880
OBJPARA TYPE SO_OBJECT_PARA, "TR280598 B40K011880
OBJPARB TYPE SO_OBJECT_PARB. "TR280598 B40K011880
* Read container data
SWC_GET_TABLE CONTAINER 'NoteText' NOTE_TEXT.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'NoteText'.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
MSGV1
MSGV2
MSGV3
MSGV4
RCODE.
CASE RCODE.
WHEN 0.
* OK. Nothing to do
WHEN 2999.
EXIT_OBJECT_NOT_FOUND.
WHEN OTHERS.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
* * Check if another note already exists
* IF NOT OBJECT-GENERALNOTETYPE IS INITIAL "TR280598 B40K011880
* AND NOT OBJECT-GENERALNOTEYEAR IS INITIAL "TR280598 B40K011880
* AND NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR280598 B40K011880
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE "TR280598 B40K011880
LINES LIN. "TR280598 B40K011880
IF LIN NE 0 "TR280598 B40K011880
OR NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR280598 B40K011880
* Dequeue (if sensible)
* perform dequeue_if_unchanged changing rcode.
* if old_enqueued_flag = space.
* perform dequeue_esomg_message.
* endif.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN '2649' SPACE SPACE SPACE SPACE.
ENDIF.
* Need dialogue?
DESCRIBE TABLE NOTE_TEXT LINES LIN.
IF LIN = 0.
* Edit note text in dialogue: not available at the moment
* Dequeue (if sensible)
* perform dequeue_if_unchanged changing rcode.
* if old_enqueued_flag = space.
* perform dequeue_esomg_message.
* endif.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN '2622' SPACE SPACE SPACE SPACE.
ELSE.
* PERFORM INSERT_NOTE TABLES NOTE_TEXT "TR270598 B40K011880
* USING OBJECT-GENERALNOTETYPE "TR270598 B40K011880
* OBJECT-GENERALNOTEYEAR "TR270598 B40K011880
* OBJECT-GENERALNOTENUMBER "TR270598 B40K011880
* CHANGING RCODE "TR270598 B40K011880
* MSGV1 "TR270598 B40K011880
* MSGV2 "TR270598 B40K011880
* MSGV3 "TR270598 B40K011880
* MSGV4. "TR270598 B40K011880
* IF RCODE NE 0. "TR270598 B40K011880
* IF ADDITIONAL_ENQUEUE NE SPACE. "TR270598 B40K011880
* PERFORM CALL_DEQUEUE_MODULE_ONCE "TR270598 B40K011880
* USING OBJECT-PRIVATE-SOMG_KEY. "TR270598 B40K011880
* ENDIF. "TR270598 B40K011880
* EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4. "TR270598 B40K011880
* ENDIF. "TR270598 B40K011880
OBJECT-PRIVATE-GENERAL_NOTE[] = NOTE_TEXT[]. "TR280598 B40K011880
CLEAR: OBJECT-GENERALNOTETYPE, "TR270598 B40K011880
OBJECT-GENERALNOTEYEAR, "TR270598 B40K011880
OBJECT-GENERALNOTENUMBER. "TR270598 B40K011880
* * change attribute "TR280598 B40K011880
OBJECT-PRIVATE-CHANGED = 'X'. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
* increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
* return note id
* SWC_SET_ELEMENT CONTAINER 'NoteType' OBJECT_ID-OBJTP.
"TR270598 B40K011880
* SWC_SET_ELEMENT CONTAINER 'NoteYear' OBJECT_ID-OBJYR.
"TR270598 B40K011880
* SWC_SET_ELEMENT CONTAINER 'NoteNumber' OBJECT_ID-OBJNO.
"TR270598 B40K011880
END_METHOD.
************************************************************************
* DeleteGeneralNote
************************************************************************
BEGIN_METHOD DELETEGENERALNOTE CHANGING CONTAINER.
DATA:
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
RCODE LIKE SY-SUBRC.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
MSGV1
MSGV2
MSGV3
MSGV4
RCODE.
CASE RCODE.
WHEN 0.
* OK. Nothing to do
WHEN 2999.
EXIT_OBJECT_NOT_FOUND.
WHEN OTHERS.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
* Delete notification
PERFORM DELETE_NOTE
USING OBJECT-GENERALNOTETYPE "TR290598 B40K012112
OBJECT-GENERALNOTEYEAR "TR290598 B40K012112
OBJECT-GENERALNOTENUMBER "TR290598 B40K012112
CHANGING RCODE. "TR290598 B40K012112
CLEAR: OBJECT-GENERALNOTETYPE,
OBJECT-GENERALNOTEYEAR,
OBJECT-GENERALNOTENUMBER.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR280598 B40K011880
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " DeleteGeneralNote
************************************************************************
* SetLinkFolder
************************************************************************
BEGIN_METHOD SETLINKFOLDER CHANGING CONTAINER.
DATA:
SOFMFOL TYPE SWC_OBJECT,
SOFM_KEY LIKE SOFMK,
KEY LIKE SWOTOBJID-OBJKEY,
FOLDER_ID LIKE SOODK,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read container data
SWC_GET_ELEMENT CONTAINER 'FolderID' FOLDER_ID.
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Look if import parameter is filled
* if not call SOFMFOL.Find in dialogue
IF FOLDER_ID IS INITIAL.
* SOFMFOL.Find
SWC_CREATE_OBJECT SOFMFOL 'SOFMFOL' SPACE.
SWC_CONTAINER LOCAL_CONTAINER.
SWC_CALL_METHOD SOFMFOL 'Find' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
* perform dequeue_if_unchanged changing rcode.
* if old_enqueued_flag = space.
* perform dequeue_esomg_message.
* endif.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN 2630 SPACE SPACE SPACE SPACE.
ENDIF.
SWC_GET_OBJECT_KEY SOFMFOL KEY.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
* perform dequeue_if_unchanged changing rcode.
* if old_enqueued_flag = space.
* perform dequeue_esomg_message.
* endif.
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN 2630 SPACE SPACE SPACE SPACE.
ENDIF.
MOVE KEY TO SOFM_KEY.
MOVE: SOFM_KEY-DOCTP TO OBJECT-LINKFOLDERTYPE,
SOFM_KEY-DOCYR TO OBJECT-LINKFOLDERYEAR,
SOFM_KEY-DOCNO TO OBJECT-LINKFOLDERNUMBER.
ELSE.
MOVE: FOLDER_ID-OBJTP TO OBJECT-LINKFOLDERTYPE,
FOLDER_ID-OBJYR TO OBJECT-LINKFOLDERYEAR,
FOLDER_ID-OBJNO TO OBJECT-LINKFOLDERNUMBER.
ENDIF.
* Signal that object was changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD.
************************************************************************
* ClearLinkFolder
************************************************************************
BEGIN_METHOD CLEARLINKFOLDER CHANGING CONTAINER.
DATA:
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
RCODE LIKE SY-SUBRC.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
MSGV1
MSGV2
MSGV3
MSGV4
RCODE.
CASE RCODE.
WHEN 0.
* OK. Nothing to do
WHEN 2999.
EXIT_OBJECT_NOT_FOUND.
WHEN OTHERS.
EXIT_RETURN RCODE MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
* Clear link folder id
CLEAR: OBJECT-LINKFOLDERTYPE,
OBJECT-LINKFOLDERYEAR,
OBJECT-LINKFOLDERNUMBER.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " ClearLinkFolder
************************************************************************
* AddApplObjectID
************************************************************************
BEGIN_METHOD ADDAPPLOBJECTID CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
ID LIKE SOMG-USED_BY,
BOR_OBJECT_ID LIKE SWOTOBJID,
BOR_OBJECT_ID2 LIKE SWOTOBJID,
CHANGED_OBJECT(255),
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
SWC_GET_ELEMENT CONTAINER 'ObjectID' BOR_OBJECT_ID.
* swc_get_element container 'NoHandle' bor_object_id2.
* Check if obligatory import parameter is filled
IF BOR_OBJECT_ID IS INITIAL.
EXIT_RETURN '2622' SPACE SPACE SPACE SPACE.
ENDIF.
* Check display authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Append this new object to application object list
ID = BOR_OBJECT_ID.
APPEND ID TO OBJECT-APPLOBJECTIDS.
* Delete duplicates in object-applobjects.
SORT OBJECT-APPLOBJECTIDS.
DELETE ADJACENT DUPLICATES FROM OBJECT-APPLOBJECTIDS.
* Signal that object was changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD.
************************************************************************
* BrowseLinkedApplObjects
************************************************************************
BEGIN_METHOD BROWSELINKEDAPPLOBJECTS CHANGING CONTAINER.
DATA:
BOR_OBJ_ID LIKE SWOTOBJID,
ROLETYPE LIKE RELROLES-ROLETYPE,
BORIDENT LIKE BORIDENT.
* Get full BOR key
SWC_OBJECT_TO_PERSISTENT SELF BOR_OBJ_ID.
IF SY-SUBRC NE 0.
EXIT_RETURN 2641 'MESSAGE' OBJECT-KEY SPACE SPACE.
ENDIF.
MOVE-CORRESPONDING BOR_OBJ_ID TO BORIDENT.
* Show Popup with list of linked application objects
CALL FUNCTION 'SREL_DISPLAY_LIST_OF_RELATIONS'
EXPORTING
OBJECT = BORIDENT
ROLETYPE = ROLETYPE
EXCEPTIONS
OTHERS = 0.
CASE SY-SUBRC.
WHEN 0.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
END_METHOD. " BrowseLinkedApplObjects
************************************************************************
* DisplayRecipientList
************************************************************************
BEGIN_METHOD DISPLAYRECIPIENTLIST CHANGING CONTAINER.
DATA:
RETURN_ON_FCODE LIKE SOXET OCCURS 0 WITH HEADER LINE,
OBJECTS LIKE SOOD4 OCCURS 0 WITH HEADER LINE,
RECIPIENT TYPE SWC_OBJECT,
RECEIVERS LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
LINK_FOLDER_ID LIKE SOODK,
NOTE_TEXT LIKE SOLI OCCURS 0 WITH HEADER LINE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
DATA:
EXCLUDE_FCODE LIKE SOXET OCCURS 0 WITH HEADER LINE,
FATAL_ERROR LIKE SONV-FLAG.
data: show_proc like sonv-flag.
data: header like soli occurs 0.
* Declare container
SWC_CONTAINER LOCAL_CONTAINER.
* Read import parameters
REFRESH EXCLUDE_FCODE.
SWC_GET_TABLE CONTAINER 'ExcludeFCode' EXCLUDE_FCODE.
SWC_GET_ELEMENT CONTAINER 'ShowProcessParam' show_proc.
if sy-subrc = 8.
clear show_proc.
endif.
* Init
* Enqueue (if necessary) and refresh attribute values before changing
* perform refresh changing subrc "TR240798 Basis99
PERFORM REFRESH_ATTRIBUTES "TR240798 Basis99
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
data: content like soli occurs 1,
chdat_old like sood-chdat,
chtim_old like sood-chtim.
* Prepare data for call of SO_DYNP_OBJECT_SEND
PERFORM PREPARE_DATA_FOR_SEND_SCREEN
TABLES OBJECTS
RECEIVERS
NOTE_TEXT
EXCLUDE_FCODE
content
header
USING 'X' "Display mode
' ' "<-- Don't retrieve change dat
'N' "Show note "TR160799 4.6c
CHANGING chdat_old
chtim_old
LINK_FOLDER_ID
FATAL_ERROR.
IF FATAL_ERROR = 'X'.
SWC_SET_ELEMENT CONTAINER 'BadRecipient' RECIPIENT.
EXIT_RETURN '2648' SPACE SPACE SPACE SPACE.
ENDIF.
* OKCodes I want to deal myself
REFRESH RETURN_ON_FCODE.
RETURN_ON_FCODE = 'BAC'.
APPEND RETURN_ON_FCODE.
RETURN_ON_FCODE = 'SEND'.
APPEND RETURN_ON_FCODE.
* Show send screen
CALL FUNCTION 'SO_DYNP_OBJECT_SEND'
EXPORTING
FOLDER_ID = LINK_FOLDER_ID
OUTBOX_FLAG = OBJECT-OUTBOXFLAG
RAW_EDITOR = 'X'
ASYNCHRON_FLAG = OBJECT-ASYNCHRON
NOTE_FLAG = 'X'
DISPLAY_ONLY = 'X'
SHOW_PROCESS_PARA = show_proc
* IMPORTING
* OBJECT_ID_NEW = OBJECT_ID_NEW
* LINK_FOLDER_ID = LINK_FOLDER_ID
* OK_CODE = OK_CODE
* OUTBOX_FLAG_OUT = OUTBOX_FLAG_OUT
* ASYNCHRON_FLAG = ASYNCHRON_OUT
* RETURN_CODE = RETURN_CODE
TABLES
OBJECTS = OBJECTS
REC_TAB = RECEIVERS
NOTE_TEXT = NOTE_TEXT
RETURN_ON_FCODE = RETURN_ON_FCODE
EXCLUDE_FCODE = EXCLUDE_FCODE
EXCEPTIONS
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 2004
OTHERS = 2648.
* Error handling
EXIT_RETURN SY-SUBRC SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
END_METHOD. " DisplayRecipientList
************************************************************************
* EditRecipientList
************************************************************************
BEGIN_METHOD EDITRECIPIENTLIST CHANGING CONTAINER.
DATA:
RETURN_ON_FCODE LIKE SOXET OCCURS 0 WITH HEADER LINE,
SOOD_DATA LIKE SOODD,
CHANGED_OBJECT(255),
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
OLD_ENQUEUED_FLAG LIKE SONV-FLAG,
OBJECT_ID_NEW LIKE SOODK,
OBJECTS LIKE SOOD4 OCCURS 0 WITH HEADER LINE,
OK_CODE LIKE SY-UCOMM,
OUTBOX_FLAG_OUT LIKE SOUD-OUTFL,
ASYNCHRON_OUT LIKE SONV-FLAG,
RETURN_CODE LIKE SY-SUBRC,
RECIPIENT TYPE SWC_OBJECT,
COPY_RECIPIENTS TYPE SWC_OBJECT OCCURS 0 WITH HEADER LINE,
START_RECIPIENTS TYPE SWC_OBJECT OCCURS 0 WITH HEADER LINE,
PERSISTENT_OBJECT LIKE SWOTOBJID,
KEY LIKE SWOTOBJID-OBJKEY,
SOMG_KEY LIKE SOMGK,
TABIX LIKE SY-TABIX,
RECEIVERS LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
RECEIVERS_OLD LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
SOFM_ID LIKE SOFMK,
FOL_KEY LIKE SWOTOBJID-OBJKEY,
APPLOBJ LIKE SWOTOBJID OCCURS 0 WITH HEADER LINE,
WA LIKE SOMG-USED_BY,
LINK_FOLDER_ID LIKE SOODK,
STORE_FLAG LIKE SONV-FLAG,
FORWARDER LIKE SOUD-USRNAM,
ORIGINATOR LIKE SOOS1-RECEXTNAM,
ORIGINATOR_TYPE LIKE SOOS1-RECESC,
NOTE_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_TEXT LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_TEXT_OLD LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
NOTE_ID LIKE SOODK,
SENT_TO_ALL LIKE SONV-FLAG,
RECIPIENT_FATAL_ERROR LIKE SONV-FLAG,
RECIPIENT_ERROR LIKE SONV-FLAG,
RECIPIENT_LOST LIKE SONV-FLAG,
SUBRC LIKE SY-SUBRC,
RCODE LIKE SY-SUBRC,
RETURNCODE LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
LIN LIKE SY-TABIX,
LINK_LIST LIKE SOXLL OCCURS 0,
DESCRIPTION LIKE SOOD-OBJDES,
SOMG_STRUCT LIKE SOMG,
TABIX_TABLE LIKE SY-TABIX OCCURS 1.
DATA: BEGIN OF RECIPIENT_KEY,
IDTYPE LIKE SOOS-RECTP,
IDYEAR LIKE SOOS-RECYR,
IDNUMBER LIKE SOOS-RECNO,
SENDTYPE LIKE SOOS-SNDART,
SEQUENCENUMBER LIKE SOES-LFDNR,
EXTIDYEAR LIKE SOMG-OBJYR,
EXTIDNUMBER LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
DATA: EXCLUDE_FCODE LIKE SOXET OCCURS 0 WITH HEADER LINE,
DUMMY_RECIPIENT LIKE SONV-FLAG,
FATAL_ERROR LIKE SONV-FLAG,
ATTRIBUTE_ERROR LIKE SONV-FLAG.
DATA: OBJECT_LIST LIKE SOSNDINF OCCURS 1.
DATA: NOTE_CHANGED LIKE SONV-FLAG VALUE SPACE. "TR290598 B40K012112
DATA CFN LIKE SONV-FLAG.
DATA: OBJCONTTAB(255) OCCURS 0 WITH HEADER LINE,
SETGETTAB(255) OCCURS 0 WITH HEADER LINE,
IMPORTPARAMTAB OCCURS 0 WITH HEADER LINE,
PROCTYPE LIKE SOOD-VMTYP,
PROCELEMENT LIKE SOOD-ACNAM,
SKIPS LIKE SOOD-SKIPS,
MEMORYID LIKE SOS01-S_MEMID,
SENSITIVITY LIKE SOOD-OBJSNS,
MODIFIABLE LIKE SOOD-OBJCP,
LANGUAGE LIKE SOOD-OBJLA,
NAME LIKE SOOD-OBJNAM,
TITLE LIKE SOOD-OBJDES,
OBJCONTTAB2(255) OCCURS 0 WITH HEADER LINE,
SETGETTAB2(255) OCCURS 0 WITH HEADER LINE,
IMPORTPARAMTAB2 OCCURS 0 WITH HEADER LINE,
PROCTYPE2 LIKE SOOD-VMTYP,
PROCELEMENT2 LIKE SOOD-ACNAM,
SKIPS2 LIKE SOOD-SKIPS,
MEMORYID2 LIKE SOS01-S_MEMID,
SENSITIVITY2 LIKE SOOD-OBJSNS,
MODIFIABLE2 LIKE SOOD-OBJCP,
LANGUAGE2 LIKE SOOD-OBJLA,
NAME2 LIKE SOOD-OBJNAM,
TITLE2 LIKE SOOD-OBJDES,
CHANGED_IN_METHOD LIKE SONV-FLAG.
DATA: FILTER LIKE SOFOR,
OBJECT_HD_DISPLAY LIKE SOOD2,
OBJECT_HD_DISPLAY2 LIKE SOOD2.
DATA: OUTBOX_OLD LIKE SONV-FLAG,
LINK_FOLDER_ID_OLD LIKE SOODK,
ASYNCHRON_OLD LIKE SONV-FLAG.
data: show_proc like sonv-flag.
data: editor_settings like sonv-flag, "TR150799 4.6c
raw_editor like sonv-flag, "TR150799 4.6c
note_flag like sonv-flag. "TR150799 4.6c
data: starting_at_x like sy-tabix, "TR010999 4.6c
starting_at_y like sy-tabix, "TR010999 4.6c
ending_at_x like sy-tabix, "TR010999 4.6c
ending_at_y like sy-tabix, "TR010999 4.6c
enable_appl_attachments like sonv-flag, "TR010999 4.6c
appl_object like swotobjid occurs 1 "TR010999 4.6c
with header line. "TR010999 4.6c
data: changed_on_sendscreen like sonv-flag.
* Declare container
SWC_CONTAINER LOCAL_CONTAINER.
* Read import parameters
REFRESH EXCLUDE_FCODE.
SWC_GET_TABLE CONTAINER 'ExcludeFCode' EXCLUDE_FCODE.
SWC_GET_ELEMENT CONTAINER 'ReturnChangedFlag' CFN.
SWC_GET_ELEMENT CONTAINER 'ShowProcessParam' show_proc.
if sy-subrc = 8.
clear show_proc.
endif.
* Read popup coordinates
SWC_GET_ELEMENT CONTAINER 'STARTING_AT_X' "TR010999 4.6c
STARTING_AT_X. "TR010999 4.6c
SWC_GET_ELEMENT CONTAINER 'STARTING_AT_Y' "TR010999 4.6c
STARTING_AT_Y. "TR010999 4.6c
SWC_GET_ELEMENT CONTAINER 'ENDING_AT_X' "TR010999 4.6c
ENDING_AT_X. "TR010999 4.6c
SWC_GET_ELEMENT CONTAINER 'ENDING_AT_Y' "TR010999 4.6c
ENDING_AT_Y. "TR010999 4.6c
* Read flag for enabling application object attachments select
SWC_GET_ELEMENT CONTAINER 'EnableApplObjAttachments' "TR010999 4.6c
enable_appl_attachments. "TR010999 4.6c
* Read editor settings "TR150799 4.6c
* (N = note, H = hide note, D = document) "TR150799 4.6c
SWC_GET_ELEMENT CONTAINER 'EditorSettings' "TR150799 4.6c
editor_settings. "TR150799 4.6c
if sy-subrc = 8. "TR150799 4.6c
* * Default = show note
editor_settings = 'N'. "TR150799 4.6c
raw_editor = 'X'. "TR150799 4.6c
note_flag = 'X'. "TR150799 4.6c
elseif editor_settings = 'N'. "TR150799 4.6c
* * Show note
raw_editor = 'X'. "TR150799 4.6c
note_flag = 'X'. "TR150799 4.6c
elseif editor_settings = 'H'. "TR150799 4.6c
* * Hide note
raw_editor = space. "TR150799 4.6c
note_flag = space. "TR150799 4.6c
else. "TR150799 4.6c
* * Show document
* editor_settings = 'D'. "TR150799 4.6c
* raw_editor = 'X'. "TR150799 4.6c
* note_flag = space. "TR150799 4.6c
if object-key-type = 'RAW'. "insert 731327 >>>
* check if document is changeable at all
data mod like sood-objcp.
data ls_sood_key like soodk.
data ls_sood_dat like soodd.
ls_sood_key-objtp = object-key-type.
ls_sood_key-objyr = object-key-year.
ls_sood_key-objno = object-key-number.
CALL FUNCTION 'SO_SOOD_READ'
EXPORTING
object_id = ls_sood_key
IMPORTING
SOOD_DAT = ls_sood_dat
EXCEPTIONS
OBJECT_NOT_EXIST = 1
X_ERROR = 2
OTHERS = 3
.
IF sy-subrc <> 0.
EXIT_RETURN '2648' space space
SPACE SPACE.
ENDIF.
if ls_sood_dat-objsnd = 'X'.
* swc_get_property self 'Modifiable' mod.
* if mod ne 'X'.
EXIT_RETURN '2639' 'EditorSettings'
editor_settings SPACE SPACE.
* endif.
endif.
editor_settings = 'D'.
raw_editor = 'X'.
note_flag = space.
else.
EXIT_RETURN '2639' 'EditorSettings'
editor_settings SPACE SPACE.
endif. "insert 731327 <<<
endif. "TR150799 4.6c
* Init
RECIPIENT_FATAL_ERROR = SPACE.
DUMMY_RECIPIENT = SPACE.
* Enqueue (if necessary) and refresh attribute values before changing
OLD_ENQUEUED_FLAG = OBJECT-PRIVATE-ENQUEUED.
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Prepare data for call of SO_DYNP_OBJECT_SEND
data: content like soli occurs 1,
header like soli occurs 1,
ch_dat_old like sood-chdat,
ch_tim_old like sood-chtim.
PERFORM PREPARE_DATA_FOR_SEND_SCREEN
TABLES OBJECTS
RECEIVERS
NOTE_TEXT
EXCLUDE_FCODE
content "TR300999 4.6c
header "TR300999 4.6c
USING SPACE "Edit mode
cfn
editor_settings
CHANGING ch_dat_old "TR300999 4.6c
ch_tim_old "TR300999 4.6c
LINK_FOLDER_ID
FATAL_ERROR.
IF FATAL_ERROR = 'X'.
* Dequeue (if sensible)
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
SWC_SET_ELEMENT CONTAINER 'BadRecipient' RECIPIENT.
EXIT_RETURN '2648' SPACE SPACE SPACE SPACE.
ENDIF.
* * Further attributes
OUTBOX_OLD = OBJECT-OUTBOXFLAG.
LINK_FOLDER_ID_OLD = LINK_FOLDER_ID.
ASYNCHRON_OLD = OBJECT-ASYNCHRON.
* * Get document attributes (SOOD)
* * Get document specific attributes from buffer or database
* PERFORM GET_BUFFERED_ATTRIBUTES
* TABLES OBJCONTTAB
* SETGETTAB
* IMPORTPARAMTAB
* USING FOLDER_ID
* OBJECT_ID
* OBJECT-KEY-FORWARDERNAME
* CHANGING PROCTYPE
* PROCELEMENT
* SKIPS
* MEMORYID
* SENSITIVITY
* MODIFIABLE
* LANGUAGE
* NAME
* TITLE
* RCODE.
* IF RCODE NE 0.
** * Is this so important that I should cancel operation? NO !!!
* ENDIF.
* ENDIF.
* OKCodes I want to deal myself
REFRESH RETURN_ON_FCODE.
RETURN_ON_FCODE = 'BAC'.
APPEND RETURN_ON_FCODE.
RETURN_ON_FCODE = 'SEND'.
APPEND RETURN_ON_FCODE.
* Save a copy of receivers
RECEIVERS_OLD[] = RECEIVERS[].
* Enable selection of application object attachments? "TR010999 4.6c
if enable_appl_attachments = 'X'. "TR010999 4.6c
loop at object-applobjectids into appl_object. "TR010999 4.6c
append appl_object. "TR010999 4.6c
endloop. "TR010999 4.6c
endif. "TR010999 4.6c
data: object_properties like sood1.
* Show send screen
CALL FUNCTION 'SO_DYNP_OBJECT_SEND'
EXPORTING
FOLDER_ID = LINK_FOLDER_ID
OUTBOX_FLAG = OBJECT-OUTBOXFLAG
RAW_EDITOR = raw_editor "TR150799 4.6c
ASYNCHRON_FLAG = OBJECT-ASYNCHRON
NOTE_FLAG = note_flag "TR150799 4.6c
SHOW_PROCESS_PARA = show_proc
appl_att_select = enable_appl_attachments "TR010999 4.6c
starting_at_x = starting_at_x "TR010999 4.6c
starting_at_y = starting_at_y "TR010999 4.6c
ending_at_x = ending_at_x "TR010999 4.6c
ending_at_y = ending_at_y "TR010999 4.6c
DO_NOT_INITIALIZE = 'X' "note 638854
IMPORTING
OBJECT_ID_NEW = OBJECT_ID_NEW
LINK_FOLDER_ID = LINK_FOLDER_ID
OK_CODE = OK_CODE
OUTBOX_FLAG_OUT = OUTBOX_FLAG_OUT
ASYNCHRON_FLAG = ASYNCHRON_OUT
RETURN_CODE = RETURN_CODE
object_hd_change = object_properties "TR300999 4.6c
document_changed = changed_on_sendscreen "TR300999 4.6c
TABLES
objcont = content "TR300999 4.6c
OBJECTS = OBJECTS
REC_TAB = RECEIVERS
NOTE_TEXT = NOTE_TEXT
RETURN_ON_FCODE = RETURN_ON_FCODE
EXCLUDE_FCODE = EXCLUDE_FCODE
application_object = appl_object "TR010999 4.6c
EXCEPTIONS
OBJECT_NOT_SENT = 2654
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 2004
OTHERS = 2648.
* Save return infos
SUBRC = SY-SUBRC.
MSGV1 = SY-MSGV1.
MSGV2 = SY-MSGV2.
MSGV3 = SY-MSGV3.
MSGV4 = SY-MSGV1.
* User canceled operation?
IF OK_CODE = 'ESC'.
* Dequeue (if sensible) NOT on commit
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
* Re-Init
REFRESH RECEIVERS.
REFRESH RECEIVERS_OLD.
* Exit this method
EXIT_CANCELLED.
ENDIF.
* Error handling
CASE SUBRC.
WHEN 0.
* Do nothing.
WHEN OTHERS.
* Dequeue (if sensible)
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM CALL_DEQUEUE_MODULE_ONCE
USING OBJECT-PRIVATE-SOMG_KEY.
ENDIF.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDCASE.
REFRESH TABIX_TABLE.
* Take over changes on recipients
LOOP AT RECEIVERS.
LOOP AT RECEIVERS_OLD
WHERE RECTP = RECEIVERS-RECTP
AND RECYR = RECEIVERS-RECYR
AND RECNO = RECEIVERS-RECNO
AND SNDTP = RECEIVERS-SNDTP
AND LFDNR = RECEIVERS-LFDNR.
TABIX = SY-TABIX.
EXIT.
ENDLOOP.
IF SY-SUBRC = 0.
* Read corresponding entry in object-recipients
READ TABLE OBJECT-RECIPIENTS INTO RECIPIENT INDEX TABIX.
IF SY-SUBRC = 0.
* Delete this entry in object-recipients
* (it will be buffered in another table)
* delete object-recipients index tabix.
ELSE.
* Should not occur
CONTINUE.
ENDIF.
IF RECEIVERS-SNDEX = RECEIVERS_OLD-SNDEX
AND RECEIVERS-SNDCP = RECEIVERS_OLD-SNDCP
AND RECEIVERS-SNDBC = RECEIVERS_OLD-SNDBC
AND RECEIVERS-FORFB = RECEIVERS_OLD-FORFB
AND RECEIVERS-PRIFB = RECEIVERS_OLD-PRIFB
AND RECEIVERS-SNDPRI = RECEIVERS_OLD-SNDPRI
AND RECEIVERS-ACALL = RECEIVERS_OLD-ACALL
AND RECEIVERS-ACONE = RECEIVERS_OLD-ACONE
AND RECEIVERS-OBJRR = RECEIVERS_OLD-OBJRR
AND RECEIVERS-DELIVER = RECEIVERS_OLD-DELIVER
AND RECEIVERS-NOT_DELI = RECEIVERS_OLD-NOT_DELI
AND RECEIVERS-READ = RECEIVERS_OLD-READ
AND RECEIVERS-RESEND = RECEIVERS_OLD-RESEND
AND RECEIVERS-MAILSTATUS = RECEIVERS_OLD-MAILSTATUS
AND RECEIVERS-OBJRN = RECEIVERS_OLD-OBJRN.
* Nothing was changed.
ELSE.
* Some attributes were changed.
CHANGED_IN_METHOD = 'X'.
IF RECEIVERS-SNDEX NE RECEIVERS_OLD-SNDEX.
SWC_SET_ELEMENT LOCAL_CONTAINER
'SendExpress' RECEIVERS-SNDEX.
SWC_CALL_METHOD RECIPIENT 'SetExpress' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. " Effect: actual recipient is not longer used,
" a new recipient will be created
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-SNDCP NE RECEIVERS_OLD-SNDCP.
SWC_SET_ELEMENT LOCAL_CONTAINER
'SendCopy' RECEIVERS-SNDCP.
SWC_CALL_METHOD RECIPIENT 'SetCopy' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-SNDBC NE RECEIVERS_OLD-SNDBC.
SWC_SET_ELEMENT LOCAL_CONTAINER
'BlindCopy' RECEIVERS-SNDBC.
SWC_CALL_METHOD RECIPIENT 'SetBlindCopy' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-FORFB NE RECEIVERS_OLD-FORFB.
SWC_SET_ELEMENT LOCAL_CONTAINER
'NoForwarding' RECEIVERS-FORFB.
SWC_CALL_METHOD RECIPIENT 'SetNoForwarding' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-PRIFB NE RECEIVERS_OLD-PRIFB.
SWC_SET_ELEMENT LOCAL_CONTAINER
'NoPrinting' RECEIVERS-PRIFB.
SWC_CALL_METHOD RECIPIENT 'SetNoPrinting' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-SNDPRI NE RECEIVERS_OLD-SNDPRI.
SWC_SET_ELEMENT LOCAL_CONTAINER
'SendPriority' RECEIVERS-SNDPRI.
SWC_CALL_METHOD RECIPIENT 'SetCopy' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-ACALL NE RECEIVERS_OLD-ACALL.
SWC_SET_ELEMENT LOCAL_CONTAINER
'ToDoByAll' RECEIVERS-ACALL.
SWC_CALL_METHOD RECIPIENT 'SetToDoByAll' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-ACONE NE RECEIVERS_OLD-ACONE.
SWC_SET_ELEMENT LOCAL_CONTAINER
'ToDoByOne' RECEIVERS-ACONE.
SWC_CALL_METHOD RECIPIENT 'SetToDoByOne' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-OBJRR NE RECEIVERS_OLD-OBJRR.
SWC_SET_ELEMENT LOCAL_CONTAINER
'ReplyRequired' RECEIVERS-OBJRR.
SWC_CALL_METHOD RECIPIENT 'SetReplyRequired'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-MAILSTATUS NE RECEIVERS_OLD-MAILSTATUS.
SWC_SET_ELEMENT LOCAL_CONTAINER
'StatusInfoByMail' RECEIVERS-MAILSTATUS.
SWC_CALL_METHOD RECIPIENT 'SetStatusInfoByMail'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-DELIVER NE RECEIVERS_OLD-DELIVER.
SWC_SET_ELEMENT LOCAL_CONTAINER
'Deliver' RECEIVERS-DELIVER.
SWC_CALL_METHOD RECIPIENT 'SetDeliver'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-NOT_DELI NE RECEIVERS_OLD-NOT_DELI.
SWC_SET_ELEMENT LOCAL_CONTAINER
'NotDeliver' RECEIVERS-NOT_DELI.
SWC_CALL_METHOD RECIPIENT 'SetNotDeliver'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-READ NE RECEIVERS_OLD-READ.
SWC_SET_ELEMENT LOCAL_CONTAINER
'Read' RECEIVERS-READ.
SWC_CALL_METHOD RECIPIENT 'SetRead'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-RESEND NE RECEIVERS_OLD-RESEND.
SWC_SET_ELEMENT LOCAL_CONTAINER
'Resend' RECEIVERS-RESEND.
SWC_CALL_METHOD RECIPIENT 'SetResend'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
IF RECEIVERS-OBJRN NE RECEIVERS_OLD-OBJRN.
SWC_SET_ELEMENT LOCAL_CONTAINER
'NoReply' RECEIVERS-OBJRN.
SWC_CALL_METHOD RECIPIENT 'SetNoReply'
LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
* continue. "So this entry in receivers is not deleted
"and it will be tried to create a new recipient
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
ENDIF.
ENDIF.
* Append this recipient to copy_recipients
APPEND RECIPIENT TO COPY_RECIPIENTS.
* Delete entry in receivers
DELETE RECEIVERS.
* Keep tabix in mind for deleting entry in object-recipients later
APPEND TABIX TO TABIX_TABLE.
ELSE.
* * This recipient is not in list of old recipients
CHANGED_IN_METHOD = 'X'.
ENDIF.
ENDLOOP.
* Delete entries in object-recipients that are copied to copy_recipients
SORT TABIX_TABLE DESCENDING. "TR020298
DELETE ADJACENT DUPLICATES FROM TABIX_TABLE "TR020298
COMPARING ALL FIELDS. "TR020298
LOOP AT TABIX_TABLE INTO TABIX.
DELETE OBJECT-RECIPIENTS INDEX TABIX.
ENDLOOP.
* For the remaining entries in receivers you must create new recipients
LOOP AT RECEIVERS.
* * Signal that something was changed in this method
CHANGED_IN_METHOD = 'X'.
* Create a fully new entry
PERFORM CREATE_RECIPIENT_FROM_SOOS USING RECEIVERS
CHANGING RECIPIENT
RCODE.
IF RCODE NE 0.
RECIPIENT_LOST = 'X'.
EXIT.
ENDIF.
* APPEND RECIPIENT TO COPY_RECIPIENTS. "delete 423397
**************************************** BEGIN OF INSERT 423397
swc_container container2.
data: recipient2 type swc_object.
SWC_CLEAR_CONTAINER CONTAINER2.
* copy recipient to get a real recipient instead of address object
SWC_SET_ELEMENT CONTAINER2 'MasterMessage' "TR640 CAM_REORG
OBJECT-KEY. "TR640 CAM_REORG
swc_call_method recipient 'Copy' container2.
if sy-subrc ne 0.
continue.
endif.
SWC_GET_ELEMENT CONTAINER2 '_Result' RECIPIENT2.
if sy-subrc = 0.
APPEND RECIPIENT2 TO COPY_RECIPIENTS.
swc_free_object recipient.
endif.
**************************************** END OF INSERT 423397
ENDLOOP.
IF RECIPIENT_LOST = 'X'.
* * Reconstruct this object
* * Mark old recipient list for deleting
LOOP AT START_RECIPIENTS INTO RECIPIENT.
SWC_GET_OBJECT_KEY RECIPIENT RECIPIENT_KEY.
CHECK NOT RECIPIENT_KEY-EXTIDYEAR IS INITIAL
AND NOT RECIPIENT_KEY-EXTIDNUMBER IS INITIAL.
SOMG_KEY-OBJTP = 'RCP'.
SOMG_KEY-OBJYR = RECIPIENT_KEY-EXTIDYEAR.
SOMG_KEY-OBJNO = RECIPIENT_KEY-EXTIDNUMBER.
MOVE: 'DEL_RCP' TO CHANGED_OBJECT(7),
SOMG_KEY TO CHANGED_OBJECT+7.
APPEND CHANGED_OBJECT TO OBJECT-PRIVATE-CHANGED_OBJECTS.
ENDLOOP.
* * Reconstruct old recipient list
REFRESH OBJECT-RECIPIENTS.
LOOP AT RECEIVERS_OLD.
PERFORM CREATE_RECIPIENT_FROM_SOOS USING RECEIVERS_OLD
CHANGING RECIPIENT
RCODE.
IF RCODE NE 0.
CONTINUE.
ENDIF.
APPEND RECIPIENT TO OBJECT-RECIPIENTS.
ENDLOOP.
REFRESH COPY_RECIPIENTS.
REFRESH START_RECIPIENTS.
REFRESH RECEIVERS.
REFRESH RECEIVERS_OLD.
* * * Remark: Don't clear enqueued flag
EXIT_RETURN 2638 SPACE SPACE SPACE SPACE.
ENDIF.
* All remaining entries in object-recipients must be deleted
LOOP AT OBJECT-RECIPIENTS INTO RECIPIENT.
SWC_GET_OBJECT_KEY RECIPIENT RECIPIENT_KEY.
SOMG_KEY-OBJTP = 'RCP'.
SOMG_KEY-OBJYR = RECIPIENT_KEY-EXTIDYEAR.
SOMG_KEY-OBJNO = RECIPIENT_KEY-EXTIDNUMBER.
MOVE: 'DEL_RCP' TO CHANGED_OBJECT(7),
SOMG_KEY TO CHANGED_OBJECT+7.
APPEND CHANGED_OBJECT TO OBJECT-PRIVATE-CHANGED_OBJECTS.
******************"TR031197
* * Free handle (only if it is not used in copy_recipients)
READ TABLE COPY_RECIPIENTS
WITH KEY HEADER = RECIPIENT-HEADER
TYPE = RECIPIENT-TYPE
HANDLE = RECIPIENT-HANDLE.
IF SY-SUBRC NE 0.
FREE RECIPIENT.
ENDIF.
******************
* * Delete entry in object-recipients
DELETE OBJECT-RECIPIENTS.
ENDLOOP.
* object-recipients := copy_recipients
OBJECT-RECIPIENTS[] = COPY_RECIPIENTS[].
* Take over changes on note text
* Delete empty lines from note_text
if editor_settings ne 'D'. "TR150799 4.6c
LOOP AT NOTE_TEXT
WHERE LINE NE SPACE.
ENDLOOP.
NOTE_CHANGED = SPACE. "TR290598 B40K012112
IF SY-SUBRC NE 0.
* * That means new note is empty
IF NOT OBJECT-GENERALNOTETYPE IS INITIAL
AND NOT OBJECT-GENERALNOTEYEAR IS INITIAL
AND NOT OBJECT-GENERALNOTENUMBER IS INITIAL.
NOTE_CHANGED = 'X'. "TR290598 B40K012112
ELSE.
* Nothing to do
ENDIF.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR280598 B40K011880
ELSE.
* * New note is not empty
IF OBJECT-PRIVATE-GENERAL_NOTE[] NE NOTE_TEXT[].
* * Note has been edited
* * Update note in database
* * Update buffer "TR270598 B40K011880
OBJECT-PRIVATE-GENERAL_NOTE[] = NOTE_TEXT[]."TR270598 B40K011880
NOTE_CHANGED = 'X'. "TR290598 B40K012112
ELSE.
* * Nothing to do
ENDIF.
ENDIF.
else. "TR150799 4.6c
note_changed = space. "TR150799 4.6c
if changed_on_sendscreen = 'X'.
* * Update document
changed_in_method = 'X'.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_OBJECT_UPDATE'
EXPORTING
folder_id = folder_id
FORWARDER =
OBJECT-KEY-FORWARDERNAME
* OBJECT_FL_CHANGE = ' '
object_hd_change = object_properties
object_id = OBJECT_ID
* OBJECT_REAPPEAR = ' '
* OWNER = ' '
* IMPORTING
* OBJECT_FL_DISPLAY =
* OBJECT_HD_DISPLAY =
tables
objcont = content
objhead = header
* OBJPARA =
* OBJPARB =
EXCEPTIONS
* ACTIVE_USER_NOT_EXIST = 1
* COMMUNICATION_FAILURE = 2
* COMPONENT_NOT_AVAILABLE = 3
* FOLDER_NOT_EXIST = 4
* FOLDER_NO_AUTHORIZATION = 5
* FORWARDER_NOT_EXIST = 6
* OBJECT_NOT_EXIST = 7
* OBJECT_NO_AUTHORIZATION = 8
* OPERATION_NO_AUTHORIZATION = 9
* OWNER_NOT_EXIST = 10
* PARAMETER_ERROR = 11
* SUBSTITUTE_NOT_ACTIVE = 12
* SUBSTITUTE_NOT_DEFINED = 13
* SYSTEM_FAILURE = 14
* X_ERROR = 15
OTHERS = 16
.
IF sy-subrc <> 0.
"???
ENDIF.
endif.
endif. "TR150799 4.6c
IF NOTE_CHANGED = 'X' "TR290598 B40K012112
AND NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR290598 B40K012112
* Delete old note in database "TR290598 B40K012112
PERFORM DELETE_NOTE "TR290598 B40K012112
USING OBJECT-GENERALNOTETYPE "TR290598 B40K012112
OBJECT-GENERALNOTEYEAR "TR290598 B40K012112
OBJECT-GENERALNOTENUMBER "TR290598 B40K012112
CHANGING RCODE. "TR290598 B40K012112
CLEAR OBJECT-GENERALNOTETYPE. "TR290598 B40K012112
CLEAR OBJECT-GENERALNOTEYEAR. "TR290598 B40K012112
CLEAR OBJECT-GENERALNOTENUMBER. "TR290598 B40K012112
ENDIF. "TR290598 B40K012112
IF NOTE_CHANGED = 'X'.
CHANGED_IN_METHOD = 'X'.
ENDIF.
* * Link folder changed?
OBJECT-LINKFOLDERTYPE = LINK_FOLDER_ID-OBJTP.
OBJECT-LINKFOLDERYEAR = LINK_FOLDER_ID-OBJYR.
OBJECT-LINKFOLDERNUMBER = LINK_FOLDER_ID-OBJNO.
* Outbox flag changed?
OBJECT-OUTBOXFLAG = OUTBOX_FLAG_OUT.
* Asynchron flag changed?
OBJECT-ASYNCHRON = ASYNCHRON_OUT.
* Look if anything changed (if wanted)
IF CFN NE SPACE
AND CHANGED_IN_METHOD = SPACE.
IF OUTBOX_OLD NE OBJECT-OUTBOXFLAG
OR ASYNCHRON_OLD NE OBJECT-ASYNCHRON
OR LINK_FOLDER_ID_OLD NE LINK_FOLDER_ID.
CHANGED_IN_METHOD = 'X'.
ENDIF.
ENDIF.
IF CFN NE SPACE
AND CHANGED_IN_METHOD = SPACE.
* PERFORM GET_BUFFERED_ATTRIBUTES
* TABLES OBJCONTTAB2
* SETGETTAB2
* IMPORTPARAMTAB2
* USING FOLDER_ID
* OBJECT_ID
* OBJECT-KEY-FORWARDERNAME
* CHANGING PROCTYPE2
* PROCELEMENT2
* SKIPS2
* MEMORYID2
* SENSITIVITY2
* MODIFIABLE2
* LANGUAGE2
* NAME2
* TITLE2
* RCODE.
* IF RCODE = 0.
* IF TITLE NE TITLE2
* OR NAME NE NAME2
* OR OBJCONTTAB[] NE OBJCONTTAB2[]
* OR SENSITIVITY NE SENSITIVITY2
* OR MODIFIABLE NE MODIFIABLE2
* OR LANGUAGE NE LANGUAGE2
* OR SETGETTAB[] NE SETGETTAB2[]
* OR IMPORTPARAMTAB[] NE IMPORTPARAMTAB2[]
* OR PROCTYPE NE PROCTYPE2
* OR PROCELEMENT NE PROCELEMENT2
* OR SKIPS NE SKIPS2
* OR MEMORYID NE MEMORYID2.
* CHANGED_IN_METHOD = 'X'.
* ENDIF.
* ELSE.
** * ?????????????????????????????????????
* ENDIF.
filter-sndi = space. "No send information
filter-nocont = 'X'. "No content
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
FILTER = FILTER
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
OBJECT_HD_DISPLAY = OBJECT_HD_DISPLAY2
EXCEPTIONS
OTHERS = 15
.
IF SY-SUBRC <> 0.
* * Is this so important that I should cancel operation? NO !!!
ENDIF.
IF CH_DAT_OLD NE OBJECT_HD_DISPLAY2-CHDAT
OR CH_TIM_OLD NE OBJECT_HD_DISPLAY2-CHTIM.
CHANGED_IN_METHOD = 'X'.
ENDIF.
ENDIF.
* * Export changed flag
IF CFN NE SPACE.
SWC_SET_ELEMENT CONTAINER 'ObjectChanged' CHANGED_IN_METHOD.
ENDIF.
* Refresh tables
REFRESH START_RECIPIENTS.
REFRESH COPY_RECIPIENTS.
* Mark as changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
* Look at OKCODE
CASE OK_CODE.
WHEN 'SEND'.
* Call MESSAGE.Submit
SWC_CALL_METHOD SELF 'Submit' LOCAL_CONTAINER.
* * Save return codes
SUBRC = SY-SUBRC.
MSGV1 = SY-MSGV1.
MSGV2 = SY-MSGV2.
MSGV3 = SY-MSGV3.
MSGV4 = SY-MSGV4.
* * Forward additional send infos
SWC_GET_TABLE LOCAL_CONTAINER 'RecipientsInfo' OBJECT_LIST.
IF SY-SUBRC NE 8.
SWC_SET_TABLE CONTAINER 'RecipientsInfo' OBJECT_LIST.
ENDIF.
SWC_GET_ELEMENT LOCAL_CONTAINER 'SentToAll' SENT_TO_ALL.
IF SY-SUBRC NE 8.
SWC_SET_ELEMENT CONTAINER 'SentToAll' SENT_TO_ALL.
ENDIF.
* * Error occured when submitting?
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
WHEN OTHERS.
* Do nothing
ENDCASE.
END_METHOD. " EditRecipientList
************************************************************************
* ImportRecipientList
************************************************************************
BEGIN_METHOD IMPORTRECIPIENTLIST CHANGING CONTAINER.
DATA:
MASTERMESSAGE TYPE SWC_OBJECT,
REC_TAB TYPE SWC_OBJECT OCCURS 0 WITH HEADER LINE.
SWC_CONTAINER LOCAL_CONTAINER.
SWC_GET_ELEMENT CONTAINER 'MasterMessage' MASTERMESSAGE.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'MasterMessage'.
ENDIF.
* Read processing parameters of master message object
SWC_GET_TABLE_PROPERTY MASTERMESSAGE 'Recipients' REC_TAB.
IF SY-SUBRC NE 0
AND SY-SUBRC NE 4. " This is return code for an empty table
EXIT_RETURN '2647' SPACE SPACE SPACE SPACE.
ENDIF.
* Put read recipients to actual message object
LOOP AT REC_TAB.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
SWC_SET_ELEMENT LOCAL_CONTAINER 'NewRecipient' REC_TAB.
SWC_CALL_METHOD SELF 'AddCopyOfRecipient' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
EXIT_RETURN SY-SUBRC SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDLOOP.
END_METHOD. " ImportRecipientList
*&---------------------------------------------------------------------*
*& Form GET_ID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_REC_LINE_OUT text *
*----------------------------------------------------------------------*
FORM GET_ID USING REC_LINE_OUT LIKE SOOS1
CHANGING OBJECT_KEY
RETCODE.
DATA: ADDRESS TYPE SWC_OBJECT,
ADDRESS_OBJECT LIKE SWOTOBJID.
DATA: BEGIN OF RECIPIENT_KEY,
RECTP LIKE SOMG-RCP_ID_TP,
RECYR LIKE SOMG-RCP_ID_YR,
RECNO LIKE SOMG-RCP_ID_NO,
SNDART LIKE SOMG-RCP_SND_TP,
LFDNR LIKE SOMG-RCP_SEQ_NO,
END OF RECIPIENT_KEY.
SWC_CONTAINER CONTAINER.
IF REC_LINE_OUT-RECTP = SPACE.
SWC_CREATE_OBJECT ADDRESS 'Address' SPACE.
SWC_SET_ELEMENT CONTAINER 'TypeId' REC_LINE_OUT-RECESC.
IF REC_LINE_OUT-RECESC = SPACE OR
REC_LINE_OUT-RECESC = 'S' OR
REC_LINE_OUT-RECESC = 'P' OR
REC_LINE_OUT-RECESC = 'C' OR "TR060298
REC_LINE_OUT-RECESC = 'G' OR
REC_LINE_OUT-RECESC = 'H'.
SWC_SET_ELEMENT CONTAINER 'Value' REC_LINE_OUT-RECNAM.
ELSEIF REC_LINE_OUT-RECESC = 'A'.
SWC_SET_ELEMENT CONTAINER 'Value' REC_LINE_OUT-RECNAM+2.
* * Communication Type "TR090298
SWC_SET_ELEMENT CONTAINER "TR090298
'CommunicationType' REC_LINE_OUT-SNDART."TR090298
* * Sequence number "TR090298
SWC_SET_ELEMENT CONTAINER "TR090298
'SequenceNumber' REC_LINE_OUT-LFDNR. "TR090298
ELSE.
SWC_SET_ELEMENT CONTAINER 'Value' REC_LINE_OUT-RECEXTNAM.
IF REC_LINE_OUT-RECESC = 'F'
OR REC_LINE_OUT-RECESC = 'X'.
SWC_SET_ELEMENT CONTAINER 'Value2'
REC_LINE_OUT-RECEXTNAM+255(255).
SWC_SET_ELEMENT CONTAINER 'Value3'
REC_LINE_OUT-RECEXTNAM+510(255).
ENDIF.
IF REC_LINE_OUT-RECESC = 'X'.
SWC_SET_ELEMENT CONTAINER 'Value4'
REC_LINE_OUT-RECEXTNAM+765(255).
SWC_SET_ELEMENT CONTAINER 'Value5'
REC_LINE_OUT-RECEXTNAM+1020(224).
ENDIF.
ENDIF.
SWC_CALL_METHOD ADDRESS 'Create' CONTAINER.
IF SY-SUBRC NE 0.
RETCODE = 1.
EXIT.
ENDIF.
SWC_OBJECT_TO_PERSISTENT ADDRESS ADDRESS_OBJECT.
IF SY-SUBRC NE 0.
RETCODE = 1.
EXIT.
ENDIF.
MOVE ADDRESS_OBJECT-OBJKEY TO OBJECT_KEY.
* Free handle
SWC_FREE_OBJECT ADDRESS.
ELSE.
RECIPIENT_KEY-RECTP = REC_LINE_OUT-RECTP.
RECIPIENT_KEY-RECYR = REC_LINE_OUT-RECYR.
RECIPIENT_KEY-RECNO = REC_LINE_OUT-RECNO.
CLEAR RECIPIENT_KEY-SNDART.
CLEAR RECIPIENT_KEY-LFDNR.
OBJECT_KEY = RECIPIENT_KEY.
ENDIF.
ENDFORM. " GET_ID
*&---------------------------------------------------------------------*
*& Form CALL_SOFM_METHOD
*&---------------------------------------------------------------------*
* Calls a method of the corresponding SOFM object
*----------------------------------------------------------------------*
* -->METHOD_NAME *
* <--CONTAINER text *
* <--SUBRC text *
* <--MSGV1 text *
* <--MSGV2 text *
* <--MSGV3 text *
* <--MSGV4 text *
*----------------------------------------------------------------------*
FORM CALL_SOFM_METHOD TABLES CONTAINER
USING VALUE(METHOD_NAME)
CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
DATA:
NEW_SOFM_KEY LIKE SWOTOBJID-OBJKEY,
HANDLE TYPE SWC_OBJECT,
KEY LIKE OBJECT-KEY,
DARK_SOFM_ID LIKE SOFMK,
RETCODE LIKE SY-SUBRC.
* Create handle on corresponding SOFM object
SWC_CREATE_OBJECT HANDLE 'SOFM' OBJECT-KEY.
IF SY-SUBRC NE 0.
SUBRC = 1250.
MSGV1 = SPACE.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
ENDIF.
* Call corresponding method of SOFM object
SWC_CALL_METHOD HANDLE METHOD_NAME CONTAINER.
SUBRC = SY-SUBRC.
MSGV1 = SY-MSGV1.
MSGV2 = SY-MSGV2.
MSGV3 = SY-MSGV3.
MSGV4 = SY-MSGV4.
CHECK SUBRC = 0.
* Look if key was changed
SWC_GET_OBJECT_KEY HANDLE NEW_SOFM_KEY.
IF OBJECT-KEY NE NEW_SOFM_KEY.
* Change key of MESSAGE object
MOVE: NEW_SOFM_KEY TO OBJECT-KEY.
* * If document was created/selected in non-dark folder, create
* * additional link into dark folder;
* * take dark folder for message id !!!
PERFORM CREATE_LINK_TO_DARK_FOLDER
CHANGING DARK_SOFM_ID
RETCODE.
IF RETCODE = 0
AND NOT DARK_SOFM_ID IS INITIAL.
MOVE DARK_SOFM_ID TO OBJECT-KEY.
ENDIF.
SWC_SET_OBJECTKEY OBJECT-KEY.
* Mark MESSAGE object as changed
OBJECT-PRIVATE-CHANGED = 'X'.
ENDIF.
ENDFORM. " CALL_SOFM_METHOD
*&---------------------------------------------------------------------*
*& Form ENQUEUE_AND_REFRESH
*&---------------------------------------------------------------------*
* Enqueue (if necessary) and refresh attribute values
* before changing.
* Possible return codes: 2013
* 2642
* 2643
*----------------------------------------------------------------------*
* <-- SUBRC
* <-- MSGV1
* <-- MSGV2
* <-- MSGV3
* <-- MSGV4
*----------------------------------------------------------------------*
FORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
DATA: SOFM_KEY LIKE SOFMK,
SOMG_DATA LIKE SOMGD,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
RCODE LIKE SY-SUBRC,
NOT_PERSISTENT.
DATA: MESSAGE_SOMG_DATA_GOT LIKE SONV-FLAG VALUE SPACE.
* Init
SUBRC = 0.
CLEAR SOFM_KEY.
* Check if this object is already persistent.
* It's possible that object is persistent but private attribute
* SOMG_KEY is not correctly filled, because there isn't any constructor
CHECK OBJECT-PRIVATE-CHANGED = SPACE. "TR120997
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL "TR100798
AND OBJECT-PRIVATE-PERSIST_CHECKED = SPACE. "TR100798
* * Check if message is persistent (and get actual data)
PERFORM GET_MESSAGE_SOMG_DATA CHANGING SOMG_DATA
SOFM_KEY
NOT_PERSISTENT.
IF NOT_PERSISTENT = SPACE.
MESSAGE_SOMG_DATA_GOT = 'X'.
ENDIF.
** Check if object is persistent
* MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
* OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
* OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
* OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
* OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
* OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
* PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
* USING OBJECT-KEY-FORWARDERNAME
* CHANGING OFFICE_ID
* RCODE.
* IF RCODE NE 0.
* SUBRC = '2013'.
* MSGV1 = 'SOFM-Key'.
* MSGV2 = OBJECT-KEY-FORWARDERNAME.
* MSGV3 = SPACE.
* MSGV4 = SPACE.
* ENDIF.
* MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
* OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
* OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
* NOT_PERSISTENT = 'X'.
* REFRESH SOMG_TAB.
* PERFORM SOMG_SELMSG(SAPFSSO5) TABLES SOMG_TAB
* USING SOFM_KEY
* CHANGING RCODE.
* IF RCODE = 0.
* LOOP AT SOMG_TAB
* WHERE OBJTP = 'MSG'.
* MOVE-CORRESPONDING SOMG_TAB TO SOMG_KEY.
* MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
* MOVE SOMG_KEY TO OBJECT-PRIVATE-SOMG_KEY.
* NOT_PERSISTENT = SPACE.
* EXIT.
* ENDLOOP.
* ENDIF.
* OBJECT-PRIVATE-PERSIST_CHECKED = 'X'.
ELSE. "TR100798
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
* * This is only possible if persist_checked = 'X'
* * That means it is already checked that object is not persistent
NOT_PERSISTENT = 'X'.
ELSE.
* * SOMG_KEY is filled => object is persistent
* * Regard: no refresh done yet !!!
NOT_PERSISTENT = SPACE.
ENDIF.
ENDIF. "TR100798
IF NOT_PERSISTENT = SPACE.
* Exclusive enqueue (corresponding dequeue in method 'Save')
CALL FUNCTION 'ENQUEUE_ESOMG'
EXPORTING
MODE_SOMG = 'E'
MANDT = SY-MANDT
OBJTP = 'MSG'
OBJYR = OBJECT-PRIVATE-SOMG_KEY-OBJYR
OBJNO = OBJECT-PRIVATE-SOMG_KEY-OBJNO
_SCOPE = '1'
EXCEPTIONS
FOREIGN_LOCK = 2642
SYSTEM_FAILURE = 2643
OTHERS = 2643.
SUBRC = SY-SUBRC.
CASE SY-SUBRC.
WHEN 0.
OBJECT-PRIVATE-ENQUEUED = 'X'.
ADDITIONAL_ENQUEUE = 'X'.
WHEN 2642.
PERFORM GET_USER_NAME USING SY-MSGV1 MSGV1.
EXIT.
WHEN 2643.
MSGV1 = 'MESSAGE'.
MSGV2 = OBJECT-KEY.
EXIT.
WHEN OTHERS.
MSGV1 = 'MESSAGE'.
MSGV2 = OBJECT-KEY.
EXIT.
ENDCASE.
* * Refresh buffer from database
* * Message specific data (without recipient list)
IF MESSAGE_SOMG_DATA_GOT = SPACE.
PERFORM GET_MESSAGE_SOMG_DATA CHANGING SOMG_DATA
SOFM_KEY
NOT_PERSISTENT.
ENDIF.
* * Read recipient list
REFRESH SOMG_TAB.
PERFORM SOMG_SELRCP(SAPFSSO5) TABLES SOMG_TAB
USING SOFM_KEY
CHANGING RCODE.
* * Fill object
PERFORM FILL_OBJECT_FROM_SOMG TABLES SOMG_TAB
USING SOMG_DATA.
** Folder for archiving
* OBJECT-LINKFOLDERTYPE = SOMG_DATA-ARC_FOLTP.
* OBJECT-LINKFOLDERYEAR = SOMG_DATA-ARC_FOLYR.
* OBJECT-LINKFOLDERNUMBER = SOMG_DATA-ARC_FOLNO.
** General note
* OBJECT-GENERALNOTETYPE = SOMG_DATA-GEN_NOTTP.
* OBJECT-GENERALNOTEYEAR = SOMG_DATA-GEN_NOTYR.
* OBJECT-GENERALNOTENUMBER = SOMG_DATA-GEN_NOTNO.
* REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR020698 B40K012112
** Synchronical sending
* OBJECT-ASYNCHRON = SOMG_DATA-ASYNCHRON.
** Next Sender
* OBJECT-NEXTSENDER = SOMG_DATA-SENDER.
** Outbox flag
* OBJECT-OUTBOXFLAG = SOMG_DATA-OUTBOX.
* MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
* OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
* OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
* OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
* OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
* OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
* PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
* USING OBJECT-KEY-FORWARDERNAME
* CHANGING OFFICE_ID
* RCODE.
* IF RCODE NE 0.
* SUBRC = '2013'.
* MSGV1 = 'SOFM-Key'.
* MSGV2 = OBJECT-KEY-FORWARDERNAME.
* MSGV3 = SPACE.
* MSGV4 = SPACE.
* ENDIF.
* MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
* OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
* OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
* PERFORM SOMG_SELRCP(SAPFSSO5) TABLES SOMG_TAB
* USING SOFM_KEY
* CHANGING RCODE.
* IF RCODE = 0.
* LOOP AT SOMG_TAB WHERE OBJTP = 'RCP'.
* MOVE-CORRESPONDING SOMG_TAB TO RECIPIENT_KEY.
* CLEAR OBJECT_KEY.
* MOVE RECIPIENT_KEY TO OBJECT_KEY.
* SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
* IF SY-SUBRC = 0.
* APPEND HANDLE TO OBJECT-RECIPIENTS.
* ENDIF.
* ENDLOOP.
* ENDIF.
ELSE.
* * This object is not persistent.
* * So no enqueue and no refresh is necessary
EXIT.
ENDIF.
ENDFORM. " ENQUEUE_AND_REFRESH
*&---------------------------------------------------------------------*
*& Form REFRESH_ATTRIBUTES (version Basis99)
*&---------------------------------------------------------------------*
* refresh attribute values from DB
* Possible return codes: 2013
* 2642
* 2643
*----------------------------------------------------------------------*
* <-- SUBRC
* <-- MSGV1
* <-- MSGV2
* <-- MSGV3
* <-- MSGV4
*----------------------------------------------------------------------*
FORM REFRESH_ATTRIBUTES CHANGING SUBRC "(Version Basis99)
MSGV1
MSGV2
MSGV3
MSGV4.
DATA: SOFM_KEY LIKE SOFMK,
SOMG_DATA LIKE SOMGD,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
RCODE LIKE SY-SUBRC,
NOT_PERSISTENT.
DATA: MESSAGE_SOMG_DATA_GOT LIKE SONV-FLAG VALUE SPACE.
* Init
SUBRC = 0.
CLEAR SOFM_KEY.
* Check if this object is already persistent.
* It's possible that object is persistent but private attribute
* SOMG_KEY is not correctly filled, because there isn't any constructor
CHECK OBJECT-PRIVATE-CHANGED = SPACE.
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL
AND OBJECT-PRIVATE-PERSIST_CHECKED = SPACE.
* * Check if message is persistent (and get actual data)
PERFORM GET_MESSAGE_SOMG_DATA CHANGING SOMG_DATA
SOFM_KEY
NOT_PERSISTENT.
IF NOT_PERSISTENT = SPACE.
MESSAGE_SOMG_DATA_GOT = 'X'.
ENDIF.
ELSE.
IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
* * This is only possible if persist_checked = 'X'
* * That means it is already checked that object is not persistent
NOT_PERSISTENT = 'X'.
ELSE.
* * SOMG_KEY is filled => object is persistent
* * Regard: no refresh done yet !!!
NOT_PERSISTENT = SPACE.
ENDIF.
ENDIF.
IF NOT_PERSISTENT = SPACE.
* * Refresh buffer from database
* * Message specific data (without recipient list)
IF MESSAGE_SOMG_DATA_GOT = SPACE.
PERFORM GET_MESSAGE_SOMG_DATA CHANGING SOMG_DATA
SOFM_KEY
NOT_PERSISTENT.
ENDIF.
* * Read recipient list
REFRESH SOMG_TAB.
PERFORM SOMG_SELRCP(SAPFSSO5) TABLES SOMG_TAB
USING SOFM_KEY
CHANGING RCODE.
* * Fill object
PERFORM FILL_OBJECT_FROM_SOMG TABLES SOMG_TAB
USING SOMG_DATA.
ELSE.
* * This object is not persistent.
* * So no refresh is necessary
EXIT.
ENDIF.
ENDFORM. " REFRESH_ATTRIBUTES (Version Basis99)
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* Refresh attribute values
* Possible return codes: 2013
*----------------------------------------------------------------------*
* <-- SUBRC
* <-- MSGV1
* <-- MSGV2
* <-- MSGV3
* <-- MSGV4
*----------------------------------------------------------------------*
FORM REFRESH CHANGING SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
DATA:
SOFM_KEY LIKE SOFMK,
OFFICE_ID LIKE SOUDK,
SOMG_KEY LIKE SOMGK,
SOMG_DATA LIKE SOMGD,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
WA_APPLOBJECT LIKE SOMG-USED_BY,
HANDLE TYPE SWC_OBJECT,
RCODE LIKE SY-SUBRC,
NOT_PERSISTENT,
OBJECT_KEY LIKE SWOTOBJID-OBJKEY.
DATA: BEGIN OF RECIPIENT_KEY,
RCP_ID_TP LIKE SOMG-RCP_ID_TP,
RCP_ID_YR LIKE SOMG-RCP_ID_YR,
RCP_ID_NO LIKE SOMG-RCP_ID_NO,
RCP_SND_TP LIKE SOMG-RCP_SND_TP,
RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
OBJYR LIKE SOMG-OBJYR,
OBJNO LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
DATA: BEGIN OF SOFMFOL_KEY,
ARC_PARTP LIKE SOMG-ARC_FOLTP,
ARC_PARYR LIKE SOMG-ARC_FOLYR,
ARC_PARNO LIKE SOMG-ARC_FOLNO,
ARC_FOLTP LIKE SOMG-ARC_FOLTP,
ARC_FOLYR LIKE SOMG-ARC_FOLYR,
ARC_FOLNO LIKE SOMG-ARC_FOLNO,
END OF SOFMFOL_KEY.
* Init
SUBRC = 0.
* Check if this object is already persistent.
* It's possible that object is persistent but private attribute
* SOMG_KEY is not correctly filled.
CHECK OBJECT-PRIVATE-CHANGED = SPACE. "TR120997
* * Object seems to be not persistent. But look in database.
MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
IF RCODE NE 0.
SUBRC = '2013'.
MSGV1 = 'SOFM-Key'.
MSGV2 = OBJECT-KEY-FORWARDERNAME.
MSGV3 = SPACE.
MSGV4 = SPACE.
ENDIF.
MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
NOT_PERSISTENT = 'X'.
REFRESH SOMG_TAB.
PERFORM SOMG_SELIDA(SAPFSSO5) TABLES SOMG_TAB
USING SOFM_KEY
CHANGING RCODE.
IF RCODE = 0.
LOOP AT SOMG_TAB
WHERE OBJTP = 'MSG'.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_KEY.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
MOVE SOMG_KEY TO OBJECT-PRIVATE-SOMG_KEY.
NOT_PERSISTENT = SPACE.
EXIT.
ENDLOOP.
ENDIF.
IF NOT_PERSISTENT = SPACE.
* * Refresh buffer from database
* Recipient list
REFRESH OBJECT-RECIPIENTS.
LOOP AT SOMG_TAB WHERE OBJTP = 'RCP'.
MOVE-CORRESPONDING SOMG_TAB TO RECIPIENT_KEY.
CLEAR OBJECT_KEY.
MOVE RECIPIENT_KEY TO OBJECT_KEY.
SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
IF SY-SUBRC = 0.
APPEND HANDLE TO OBJECT-RECIPIENTS.
ENDIF.
ENDLOOP.
* Folder for archiving
OBJECT-LINKFOLDERTYPE = SOMG_DATA-ARC_FOLTP.
OBJECT-LINKFOLDERYEAR = SOMG_DATA-ARC_FOLYR.
OBJECT-LINKFOLDERNUMBER = SOMG_DATA-ARC_FOLNO.
* General note
OBJECT-GENERALNOTETYPE = SOMG_DATA-GEN_NOTTP.
OBJECT-GENERALNOTEYEAR = SOMG_DATA-GEN_NOTYR.
OBJECT-GENERALNOTENUMBER = SOMG_DATA-GEN_NOTNO.
* Synchronical sending
OBJECT-ASYNCHRON = SOMG_DATA-ASYNCHRON.
* Next Sender
OBJECT-NEXTSENDER = SOMG_DATA-SENDER.
* Outbox flag
OBJECT-OUTBOXFLAG = SOMG_DATA-OUTBOX.
ELSE.
* * This object is not persistent.
* * So no refresh is necessary
EXIT.
ENDIF.
ENDFORM. " REFRESH
************************************************************************
* SetOutboxFlag
************************************************************************
BEGIN_METHOD SETOUTBOXFLAG CHANGING CONTAINER.
DATA:
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
OUTBOXFLAG LIKE SOMG-OUTBOX,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'OutboxFlag' OUTBOXFLAG.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'OutboxFlag'.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attribute
OBJECT-OUTBOXFLAG = OUTBOXFLAG.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetOutboxFlag
************************************************************************
* SetNextSender
************************************************************************
BEGIN_METHOD SETNEXTSENDER CHANGING CONTAINER.
DATA:
* sender like somg-sender,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SENDER TYPE SWC_OBJECT,
BOR_ID LIKE SWOTOBJID,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'Sender' SENDER.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Sender'.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attribute
SWC_OBJECT_TO_PERSISTENT SENDER BOR_ID.
IF SY-SUBRC NE 0.
EXIT_RETURN 2632 SPACE SPACE SPACE SPACE.
ENDIF.
OBJECT-NEXTSENDER = BOR_ID.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetNextSender
************************************************************************
* SetSynchron
************************************************************************
BEGIN_METHOD SETASYNCHRON CHANGING CONTAINER.
DATA:
ASYNCHRON LIKE SOMG-ASYNCHRON,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'Asynchron' ASYNCHRON.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Asynchron'.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attribute
OBJECT-ASYNCHRON = ASYNCHRON.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetAsynchron
************************************************************************
* SetSensitivity
************************************************************************
BEGIN_METHOD SETSENSITIVITY CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
SENSITIVITY LIKE SOOD-OBJSNS,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
ALREADY_SENT LIKE SOOD-OBJSND,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'Sensitivity' SENSITIVITY.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Sensitivity'.
ENDIF.
* Check value of sensitivity
CASE SENSITIVITY.
WHEN 'F'. "fc_sensi_obj Funktional
WHEN 'C'. "cc_sensi_obj Firmenvertraulich
WHEN 'O'. "co_sensi_obj Standard
WHEN 'P'. "pr_sensi_obj Vertraulich
WHEN 'G'. "pg_sensi_obj Geschftlich "1090262 >>
WHEN 'E'. "pe_sensi_obj Persnlich "1090262 <<
WHEN OTHERS.
EXIT_RETURN '2639' 'Sensitivity' SENSITIVITY SPACE SPACE.
ENDCASE.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Sensitivity' SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes
OBJECT-SENSITIVITY = SENSITIVITY.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-SENSITIVITY_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetSensitivity
************************************************************************
* SetModifiable
************************************************************************
BEGIN_METHOD SETMODIFIABLE CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
MODIFIABLE LIKE SOOD-OBJSNS,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'Modifiable' MODIFIABLE.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Modifiable'.
ENDIF.
* Check if value is OK
CASE MODIFIABLE.
WHEN SPACE.
WHEN 'X'.
WHEN 'A'.
WHEN OTHERS.
EXIT_RETURN '2639' 'Modifiable' MODIFIABLE SPACE SPACE.
ENDCASE.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Modifiable' SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes
OBJECT-MODIFIABLE = MODIFIABLE.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-MODIF_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetModifiable
************************************************************************
* SetDescription
************************************************************************
BEGIN_METHOD SETDESCRIPTION CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
DESCRIPTION LIKE SOOD-OBJDES,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'Description' DESCRIPTION.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Description'.
ENDIF.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Description' SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes
OBJECT-PRIVATE-DESCRIPTION = DESCRIPTION.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-DESC_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " SetDescription
************************************************************************
* SetProcGeneral
************************************************************************
BEGIN_METHOD SETPROCGENERAL CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
PROCESSINGTYPE LIKE SOOD-VMTYP,
PROCESSINGELEMENT LIKE SOOD-ACNAM,
SKIPFIRSTSCREEN LIKE SOOD-SKIPS,
MEMORYID LIKE SOS01-S_MEMID,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'ProcessingType' PROCESSINGTYPE.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'ProcessingType'.
ENDIF.
SWC_GET_ELEMENT CONTAINER 'ProcessingElement' PROCESSINGELEMENT.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'ProcessingElement'.
ENDIF.
SWC_GET_ELEMENT CONTAINER 'SkipFirstScreen' SKIPFIRSTSCREEN.
IF SY-SUBRC NE 0.
CLEAR SKIPFIRSTSCREEN.
ENDIF.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'ProcGeneral' SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes
OBJECT-PROCESSTYPE = PROCESSINGTYPE.
OBJECT-PROCESSELEMENT = PROCESSINGELEMENT.
OBJECT-PROCSKIPFIRSTSCREEN = SKIPFIRSTSCREEN.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_GENERAL_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " SetProcGeneral
************************************************************************
* SetProcMemoryID
************************************************************************
BEGIN_METHOD SETPROCMEMORYID CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
PROCESSINGTYPE LIKE SOOD-VMTYP,
PROCESSINGELEMENT LIKE SOOD-ACNAM,
SKIPFIRSTSCREEN LIKE SOOD-SKIPS,
MEMORYID LIKE SOS01-S_MEMID,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'MemoryID' MEMORYID.
IF SY-SUBRC NE 0.
CLEAR MEMORYID.
ENDIF.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'ProcMemoryID' SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes
OBJECT-PROCMEMORYID = MEMORYID.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_MEMID_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " SetProcMemoryID
************************************************************************
* ResetProcSetGetParams
************************************************************************
BEGIN_METHOD RESETPROCSETGETPARAMS CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
ID LIKE SOS01-L_PANAME,
VALUE LIKE SOS01-L_PALOW,
OBJPARA LIKE SELC,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Set/Get-Parameter fr Ausfhren'(002)
SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Refresh table with Set/Get-Parameters
REFRESH OBJECT-PROCSETGETTAB.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_PARA_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " ResetProcSetGetParams
************************************************************************
* AddProcSetGetParam
************************************************************************
BEGIN_METHOD ADDPROCSETGETPARAM CHANGING CONTAINER.
DATA:
PARAM_ID_LEN TYPE I,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
ID LIKE SOS01-L_PANAME,
VALUE LIKE SOS01-L_PALOW,
OBJPARA LIKE SELC,
FOUND LIKE SONV-FLAG,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Read import parameters
SWC_GET_ELEMENT CONTAINER 'ID' ID.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'ID'.
ENDIF.
SWC_GET_ELEMENT CONTAINER 'Value' VALUE.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Value'.
ENDIF.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Set/Get-Parameter fr Ausfhren'(002)
SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes: Append this pair to OBJPARA
* PARAM_ID_LEN = STRLEN( SOS01-L_PANAME ). "TR080699 B90K006311
describe field SOS01-L_PANAME length param_id_len "TR080699 B90K006311
in character mode. "TR UNICODE
FOUND = SPACE.
LOOP AT OBJECT-PROCSETGETTAB INTO OBJPARA.
IF PARAM_ID_LEN LE 3.
IF OBJPARA-NAME = ID.
FOUND = 'X'.
CLEAR OBJPARA.
OBJPARA-NAME = ID.
OBJPARA-LOW = VALUE.
MODIFY OBJECT-PROCSETGETTAB FROM OBJPARA.
ENDIF.
ELSE.
IF OBJPARA-HIGH = ID.
FOUND = 'X'.
CLEAR OBJPARA.
OBJPARA-HIGH = ID.
OBJPARA-LOW = VALUE.
MODIFY OBJECT-PROCSETGETTAB FROM OBJPARA.
ENDIF.
ENDIF.
ENDLOOP.
IF FOUND = SPACE.
* That means no entry with this id yet
CLEAR OBJPARA.
IF PARAM_ID_LEN LE 3.
OBJPARA-NAME = ID.
ELSE.
OBJPARA-HIGH = ID.
ENDIF.
OBJPARA-LOW = VALUE.
APPEND OBJPARA TO OBJECT-PROCSETGETTAB.
ENDIF.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_PARA_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " AddProcSetGetParam
************************************************************************
* ResetProcImportParams
************************************************************************
BEGIN_METHOD RESETPROCIMPORTPARAMS CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
ID LIKE SOS01-L_PANAME,
VALUE LIKE SOS01-L_PALOW,
OBJPARA LIKE SELC,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Importparameter fr Ausfhren'(003)
SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Refresh table with Set/Get-Parameters
REFRESH OBJECT-PROCIMPORTPARAMTAB.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_PARB_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " ResetProcImportParams
************************************************************************
* AddProcImportParam
************************************************************************
BEGIN_METHOD ADDPROCIMPORTPARAM CHANGING CONTAINER.
DATA:
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
NAME LIKE SOS01-L_PBNAM,
VALUE LIKE SOS01-L_PBVAL,
FOUND VALUE SPACE,
MODIFIED VALUE SPACE,
WA255(255) VALUE SPACE,
HELPVALUE LIKE SY-TABIX,
ALREADY_SENT LIKE SOOD-OBJSND,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
SWC_GET_ELEMENT CONTAINER 'Name' NAME.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Name'.
ENDIF.
SWC_GET_ELEMENT CONTAINER 'Value' VALUE.
IF SY-SUBRC NE 0.
EXIT_PARAMETER_NOT_FOUND 'Value'.
ENDIF.
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
EXIT_RETURN '2661' 'Importparameter fr Ausfhren'(003)
SPACE SPACE SPACE.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes: Append pair to OBJPARB
FOUND = SPACE.
MODIFIED = SPACE.
LOOP AT OBJECT-PROCIMPORTPARAMTAB INTO WA255.
HELPVALUE = SY-TABIX MOD 2.
IF HELPVALUE = 0.
IF WA255 = NAME.
FOUND = 'X'.
ENDIF.
ELSEIF FOUND = 'X'.
* Value of parameter
MODIFY OBJECT-PROCIMPORTPARAMTAB FROM VALUE.
FOUND = SPACE.
MODIFIED = 'X'.
ENDIF.
ENDLOOP.
IF MODIFIED = SPACE.
APPEND NAME TO OBJECT-PROCIMPORTPARAMTAB.
APPEND VALUE TO OBJECT-PROCIMPORTPARAMTAB.
ENDIF.
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-PROC_PARB_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING RCODE.
ENDIF.
END_METHOD. " AddProcImportParam
************************************************************************
* ReadDocumentAttributes
************************************************************************
BEGIN_METHOD READDOCUMENTATTRIBUTES CHANGING CONTAINER.
DATA: OBJECT_ID LIKE SOODK,
FOLDER_ID LIKE SOODK,
LIN LIKE SY-TABIX,
RCODE LIKE SY-SUBRC,
SENSITIVITY LIKE SOOD-OBJSNS,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
MODIFIABLE LIKE SOOD-OBJCP, " bzw. sood-fixed
PROCESSTYPE LIKE SOOD-VMTYP,
PROCESSELEMENT LIKE SOOD-ACNAM,
PROCSKIPFIRSTSCREEN LIKE SOOD-SKIPS,
PROCMEMORYID LIKE SOS01-S_MEMID,
PROCSETGETTAB(255) OCCURS 0,
NEWPROCSETGETTAB(255) OCCURS 0,
PROCIMPORTPARAMTAB(255) OCCURS 0,
* OBJCONT(255) OCCURS 0. "TR 6.20 UNICODE
objcont like soli occurs 0. "TR 6.20 UNICODE
data: extct like sood-extct. "TR070199 4.6a
data: obj_hd_disp like sood2. "TR6.10 UNICODE
data: objheadtab like soli occurs 1. "TR 6.10 UNICODE
* IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'
* OR OBJECT-PRIVATE-PROC_MEMID_CHANGED NE 'X'
* OR OBJECT-PRIVATE-PROC_PARA_CHANGED NE 'X'
* OR OBJECT-PRIVATE-PROC_PARB_CHANGED NE 'X'
* OR OBJECT-PRIVATE-SENSITIVITY_CHANGED NE 'X'
* OR OBJECT-PRIVATE-MODIF_CHANGED NE 'X'
* OR OBJECT-PRIVATE-OBJCONT_CHANGED NE 'X'. "TR310398 4.0C
* Refresh processing attributes from database (if sensible)
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
PERFORM GET_DOC_ATTRIBUTES
TABLES OBJCONT
PROCSETGETTAB
PROCIMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID
OBJECT_ID
OBJECT-KEY-FORWARDERNAME
CHANGING PROCESSTYPE
PROCESSELEMENT
PROCSKIPFIRSTSCREEN
PROCMEMORYID
SENSITIVITY
MODIFIABLE
extct "TR070199 4.6a
obj_hd_disp "TR6.10 UNICODE
RCODE.
CASE RCODE.
WHEN 0.
* Everything OK. Do nothing.
WHEN OTHERS.
EXIT_RETURN RCODE SPACE SPACE SPACE SPACE.
ENDCASE.
* ELSE.
* SENSITIVITY = OBJECT-SENSITIVITY.
* MODIFIABLE = OBJECT-MODIFIABLE.
* PROCESSTYPE = OBJECT-PROCESSTYPE.
* PROCESSELEMENT = OBJECT-PROCESSELEMENT.
* PROCSKIPFIRSTSCREEN = OBJECT-PROCSKIPFIRSTSCREEN.
* PROCSETGETTAB[] = OBJECT-PROCSETGETTAB[].
* PROCIMPORTPARAMTAB[] = OBJECT-PROCIMPORTPARAMTAB[].
* OBJCONT[] = OBJECT-PRIVATE-OBJCONT[].
* ENDIF.
* Get content from KPro (if necessary)
if extct = 'K'.
CALL FUNCTION 'SO_CONTENT_FROM_KPRO_GET'
* IMPORTING
* FILESIZE =
TABLES
OBJCONT = OBJCONT
EXCEPTIONS
KPRO_MODEL_ERROR = 1
KPRO_INCONSISTENCY = 2
X_ERROR = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
EXIT_RETURN 2444 SPACE SPACE SPACE SPACE.
ENDIF.
endif.
* Unicode: fill hex content tab? {TR 6.10 UNICODE
data: content_hex like solix occurs 10.
PERFORM FILL_CONTENT_TABLE(SAPLSOI1)
TABLES OBJHEADTAB
OBJCONT
CONTENT_HEX
USING OBJECT_ID-OBJTP
OBJ_HD_DISP-FILE_EXT.
* TR 6.10 UNICODE}
SWC_SET_ELEMENT CONTAINER 'Sensitivity' SENSITIVITY.
SWC_SET_ELEMENT CONTAINER 'Modifiable' MODIFIABLE.
SWC_SET_ELEMENT CONTAINER 'ProcessType' PROCESSTYPE.
SWC_SET_ELEMENT CONTAINER 'ProcessElement' PROCESSELEMENT.
SWC_SET_ELEMENT CONTAINER 'ProcSkipFirstScreen' PROCSKIPFIRSTSCREEN.
SWC_SET_ELEMENT CONTAINER 'ProcMemoryID' PROCMEMORYID.
PERFORM SELC_TO_ID_VALUE TABLES PROCSETGETTAB
NEWPROCSETGETTAB.
SWC_SET_TABLE CONTAINER 'ProcSetGetTab' NEWPROCSETGETTAB.
SWC_SET_TABLE CONTAINER 'ProcImportParamTab' PROCIMPORTPARAMTAB.
SWC_SET_TABLE CONTAINER 'Content_Hex' CONTENT_HEX. "TR 6.10 UNICODE
SWC_SET_TABLE CONTAINER 'DocumentContent' OBJCONT.
END_METHOD. " ReadDocumentAttributes
************************************************************************
* ReplaceDocumentContent
************************************************************************
BEGIN_METHOD REPLACEDOCUMENTCONTENT CHANGING CONTAINER.
DATA:
OBJCONT LIKE SOLI OCCURS 0 WITH HEADER LINE,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
AUTHORITY LIKE SOFA-USRACC,
NAME LIKE SOS01-L_PBNAM,
VALUE LIKE SOS01-L_PBVAL,
FOUND VALUE SPACE,
MODIFIED VALUE SPACE,
WA255(255) VALUE SPACE,
HELPVALUE LIKE SY-TABIX,
ALREADY_SENT LIKE SOOD-OBJSND,
MODIFIABLE LIKE SONV-FLAG,
TITLE LIKE SOOD-OBJDES,
OFFICE_ID LIKE SOODK,
NAME_IN LIKE SOUD3,
NAME_OUT LIKE SOUD3,
OWNER TYPE SWC_OBJECT,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4.
data: content_hex like solix occurs 0. "TR 6.10 UNICODE
swc_get_table container 'Content_Hex' content_hex. "TR 6.10 UNICODE
if sy-subrc = 8. "TR 6.10 UNICODE
SWC_GET_TABLE CONTAINER 'DocumentContent' OBJCONT.
IF SY-SUBRC = 8.
EXIT_PARAMETER_NOT_FOUND 'DocumentContent'.
endif.
else. "TR 6.10 UNICODE
CALL FUNCTION 'SO_SOLIXTAB_TO_SOLITAB' "TR 6.10 UNICODE
EXPORTING "TR 6.10 UNICODE
IP_SOLIXTAB = content_hex[] "TR 6.10 UNICODE
IMPORTING "TR 6.10 UNICODE
EP_SOLITAB = objcont[]. "TR 6.10 UNICODE
ENDIF. "TR 6.10 UNICODE
* Check changing authority
IF NOT OBJECT-KEY-FOLDERNUMBER IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
CALL FUNCTION 'SO_AUTHORITY_CHECK'
EXPORTING
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
AUTHORITY = AUTHORITY
EXCEPTIONS
FOLDER_NOT_EXIST = 1
OBJECT_NOT_EXIST = 2
OTHERS = 3.
CASE SY-SUBRC.
WHEN 0.
IF AUTHORITY = SPACE
OR AUTHORITY = '1'.
EXIT_RETURN '2007' SPACE SPACE SPACE SPACE.
ENDIF.
WHEN 1.
EXIT_RETURN '2005' SPACE SPACE SPACE SPACE.
WHEN 2.
EXIT_RETURN 2006 SPACE SPACE SPACE SPACE.
WHEN OTHERS.
EXIT_RETURN 2648 SPACE SPACE SPACE SPACE.
ENDCASE.
ELSE.
EXIT_OBJECT_NOT_FOUND.
ENDIF.
* Check if object has already been sent and may be changed then
SWC_GET_PROPERTY SELF 'ObjectHasBeenSent' ALREADY_SENT.
IF ALREADY_SENT = 'X'.
SWC_GET_PROPERTY SELF 'Modifiable' MODIFIABLE.
IF MODIFIABLE = SPACE.
SWC_GET_PROPERTY SELF 'Description' TITLE.
EXIT_RETURN '2112' TITLE SPACE SPACE SPACE.
ELSEIF MODIFIABLE = 'A'.
SWC_GET_PROPERTY SELF 'Owner' OWNER. " owner = address object
SWC_GET_PROPERTY OWNER 'TypeSpecificID' OFFICE_ID.
* * Convert sy-uname to office_id
CLEAR NAME_IN.
NAME_IN-SAPNAM = SY-UNAME.
CALL FUNCTION 'SO_NAME_CONVERT'
EXPORTING
NAME_IN = NAME_IN
NO_ADDRESS_NAME = 'X'
IMPORTING
NAME_OUT = NAME_OUT
EXCEPTIONS
COMMUNICATION_FAILURE = 1
OFFICE_NAME_NOT_EXIST = 2
PARAMETER_ERROR = 3
SAP_NAME_NOT_EXIST = 4
SYSTEM_FAILURE = 5
USER_NOT_EXIST = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
ENDIF.
IF OFFICE_ID-OBJTP NE NAME_OUT-USRTP
OR OFFICE_ID-OBJYR NE NAME_OUT-USRYR
OR OFFICE_ID-OBJNO NE NAME_OUT-USRNO.
SWC_GET_PROPERTY SELF 'Description' TITLE.
EXIT_RETURN '2112' TITLE SPACE SPACE SPACE.
ENDIF.
ENDIF.
ENDIF.
* Enqueue (if necessary) and refresh attribute values before changing
PERFORM ENQUEUE_AND_REFRESH CHANGING ADDITIONAL_ENQUEUE
SUBRC
MSGV1
MSGV2
MSGV3
MSGV4.
IF SUBRC NE 0.
EXIT_RETURN SUBRC MSGV1 MSGV2 MSGV3 MSGV4.
ENDIF.
* Change attributes: Append pair to OBJPARB
OBJECT-PRIVATE-OBJCONT[] = OBJCONT[].
* Signal that object is changed
OBJECT-PRIVATE-CHANGED = 'X'.
OBJECT-PRIVATE-DOC_CHANGED = 'X'.
OBJECT-PRIVATE-OBJCONT_CHANGED = 'X'.
* Increase enqueued counter and set global changed flag
IF ADDITIONAL_ENQUEUE NE SPACE.
PERFORM MODIFY_ABAP_MEMORY USING OBJECT-PRIVATE-SOMG_KEY
CHANGING SUBRC.
ENDIF.
END_METHOD. " ReplaceDocumentContent
FORM UPDATE_DOCUMENT_DATA TABLES SETGETTAB
IMPORTPARAMTAB
BUFFER_OBJCONT
USING FOLDER_ID LIKE SOODK
OBJECT_ID LIKE SOODK
FORWARDERNAME
MEMORYID
PROCTYPE
PROCELEMENT
SKIPS
SENSITIVITY
MODIFIABLE
DESCRIPTION
CHANGING RCODE
MSGV1
MSGV2
MSGV3
MSGV4.
DATA: DUMMY_OBJCONT LIKE SOLI OCCURS 0,
OBJCONT LIKE SOLI OCCURS 0,
OBJHEAD LIKE SOLI OCCURS 0,
OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
WA255(255),
HELPVAL LIKE SY-TABIX,
OBJECT_HD_DISPLAY LIKE SOOD2,
OBJECT_HD_CHANGE LIKE SOOD1,
DUMMY_OBJPARA LIKE SELC OCCURS 0,
DUMMY_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE.
* Init
CLEAR OBJECT_HD_DISPLAY.
MSGV1 = SPACE.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
RCODE = 0.
* Check if anything to do all
CHECK OBJECT-PRIVATE-DOC_CHANGED = 'X'.
* Read content (for later call of SO_OBJECT_UPDATE)
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
FOLDER_ID = FOLDER_ID
FORWARDER = FORWARDERNAME
OBJECT_ID = OBJECT_ID
IMPORTING
OBJECT_HD_DISPLAY = OBJECT_HD_DISPLAY
TABLES
OBJCONT = DUMMY_OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = DUMMY_OBJPARA
OBJPARB = DUMMY_OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2054
COMMUNICATION_FAILURE = 2133
COMPONENT_NOT_AVAILABLE = 3
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2156
OBJECT_NOT_EXIST = 3826
OBJECT_NO_AUTHORIZATION = 2007
OPERATION_NO_AUTHORIZATION = 2015
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 10
SUBSTITUTE_NOT_ACTIVE = 2629
SUBSTITUTE_NOT_DEFINED = 2629
SYSTEM_FAILURE = 13
X_ERROR = 14
OTHERS = 15.
CASE SY-SUBRC.
WHEN 0.
* Everything OK.
WHEN 3.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'COMPONENT_NOT_AVAILABLE'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 10.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'PARAMETER_ERROR'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 13.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'SYSTEM_FAILURE'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 14.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'X_ERROR'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 15.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'OTHERS'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 2054.
RCODE = SY-SUBRC.
MSGV1 = SY-UNAME.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 2156.
RCODE = SY-SUBRC.
MSGV1 = FOLDER_ID.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN OTHERS.
RCODE = SY-SUBRC.
MSGV1 = SY-MSGV1.
MSGV2 = SY-MSGV2.
MSGV3 = SY-MSGV3.
MSGV4 = SY-MSGV4.
EXIT.
ENDCASE.
* Fill object_hd_change
MOVE-CORRESPONDING OBJECT_HD_DISPLAY TO OBJECT_HD_CHANGE.
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED = 'X'.
OBJECT_HD_CHANGE-VMTYP = PROCTYPE.
OBJECT_HD_CHANGE-ACNAM = PROCELEMENT.
OBJECT_HD_CHANGE-SKIPS = SKIPS.
ENDIF.
IF OBJECT-PRIVATE-SENSITIVITY_CHANGED = 'X'.
OBJECT_HD_CHANGE-OBJSNS = SENSITIVITY.
ENDIF.
IF OBJECT-PRIVATE-DESC_CHANGED = 'X'.
OBJECT_HD_CHANGE-OBJDES = DESCRIPTION.
ENDIF.
IF OBJECT-PRIVATE-MODIF_CHANGED = 'X'.
PERFORM SET_OBJCP_FIXED_FROM_MODIF
USING OBJECT_HD_DISPLAY-FOLRG
OBJECT-MODIFIABLE
CHANGING OBJECT_HD_CHANGE-OBJCP
OBJECT_HD_CHANGE-FIXED
RCODE.
IF RCODE NE 0.
* * Should not occur
RCODE = '2639'.
MSGV1 = 'Modifiable'.
MSGV2 = MODIFIABLE.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
ENDIF.
ENDIF.
* Transform SETGETTAB to OBJPARA
IF OBJECT-PRIVATE-PROC_PARA_CHANGED = 'X'.
REFRESH OBJPARA.
CLEAR OBJPARA.
LOOP AT SETGETTAB INTO OBJPARA.
APPEND OBJPARA.
ENDLOOP.
ELSE.
MOVE DUMMY_OBJPARA[] TO OBJPARA[].
ENDIF.
* * Transform IMPORTPARAMTAB to OBJPARB with regard to memoryid
* * Get actual memory id
REFRESH OBJPARB.
IF OBJECT_HD_CHANGE-VMTYP = 'U'
OR OBJECT_HD_CHANGE-VMTYP = 'S'.
IF OBJECT-PRIVATE-PROC_MEMID_CHANGED = 'X'.
APPEND MEMORYID TO OBJPARB.
ELSEIF OBJECT_HD_DISPLAY-VMTYP = 'U'
OR OBJECT_HD_DISPLAY-VMTYP = 'S'.
READ TABLE DUMMY_OBJPARB INDEX 1.
IF SY-SUBRC = 0.
APPEND DUMMY_OBJPARB TO OBJPARB.
ELSE.
* * Parameter error
RCODE = '2633'.
MSGV1 = 'PARAMETER_ERROR'.
MSGV2 = 'Importparameter fr Ausfhren'(003).
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
ENDIF.
ELSE.
* * Parameter error
RCODE = '2633'.
MSGV1 = 'PARAMETER_ERROR'.
MSGV2 = 'Importparameter fr Ausfhren'(003).
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
ENDIF.
ENDIF.
* * Fill rest of OBJPARB
IF OBJECT-PRIVATE-PROC_PARB_CHANGED = 'X'.
* * Import parameters (name, value)
LOOP AT IMPORTPARAMTAB INTO WA255.
HELPVAL = SY-TABIX MOD 2.
IF HELPVAL = 1.
CLEAR OBJPARB.
OBJPARB-NAME = WA255.
ELSE.
OBJPARB-VALUE = WA255.
APPEND OBJPARB.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT DUMMY_OBJPARB.
APPEND DUMMY_OBJPARB TO OBJPARB.
ENDLOOP.
ENDIF.
* * Fill new OBJCONT
IF OBJECT-PRIVATE-OBJCONT_CHANGED = 'X'.
OBJCONT[] = BUFFER_OBJCONT[].
* * Signal that content is given as table (no KPro id)
object_hd_change-extct = space. "TR070199 4.6a
* update document size "note 911194 >>
* size will be recalculated in SO_OBJECT_UPDATE
clear object_hd_change-objlen. "note 911194 <<
ELSE.
OBJCONT[] = DUMMY_OBJCONT[].
ENDIF.
* Update
CALL FUNCTION 'SO_OBJECT_UPDATE'
EXPORTING
FOLDER_ID = FOLDER_ID
FORWARDER = FORWARDERNAME
OBJECT_HD_CHANGE = OBJECT_HD_CHANGE
OBJECT_ID = OBJECT_ID
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = OBJPARA
OBJPARB = OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2054
COMMUNICATION_FAILURE = 2133
COMPONENT_NOT_AVAILABLE = 3
FOLDER_NOT_EXIST = 3826
FOLDER_NO_AUTHORIZATION = 2156
FORWARDER_NOT_EXIST = 6
OBJECT_NOT_EXIST = 3826
OBJECT_NO_AUTHORIZATION = 2007
OPERATION_NO_AUTHORIZATION = 2015
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 10
SUBSTITUTE_NOT_ACTIVE = 2629
SUBSTITUTE_NOT_DEFINED = 2629
SYSTEM_FAILURE = 13
X_ERROR = 14
OTHERS = 15.
CASE SY-SUBRC.
WHEN 0.
* Everything OK.
WHEN 3.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'COMPONENT_NOT_AVAILABLE'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 6.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'FORWARDER_NOT_EXIST'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 10.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'PARAMETER_ERROR'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 13.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'SYSTEM_FAILURE'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 14.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'X_ERROR'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 15.
RCODE = 2633.
MSGV1 = 'SO_OBJECT_READ'.
MSGV2 = 'OTHERS'.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN 2156.
RCODE = 2156.
MSGV1 = FOLDER_ID.
MSGV2 = SPACE.
MSGV3 = SPACE.
MSGV4 = SPACE.
EXIT.
WHEN OTHERS.
RCODE = SY-SUBRC.
MSGV1 = SY-MSGV1.
MSGV2 = SY-MSGV2.
MSGV3 = SY-MSGV3.
MSGV4 = SY-MSGV4.
EXIT.
ENDCASE.
ENDFORM. " update_document_data
FORM GET_DOC_ATTRIBUTES
TABLES OBJCONTTAB
SETGETTAB
IMPORTPARAMTAB
objheadtab "TR6.10 UNICODE
USING FOLDER_ID LIKE SOODK
OBJECT_ID LIKE SOODK
FORWARDERNAME
CHANGING PROCTYPE
PROCELEMENT
SKIPS
MEMORYID
SENSITIVITY
MODIFIABLE
extct
doc_attribs like sood2
"TR 6.10 UNICODE
RCODE.
DATA: OBJCONT LIKE SOLI OCCURS 0,
OBJHEAD LIKE SOLI OCCURS 0,
OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
LIN LIKE SY-TABIX,
WA255(255),
OBJECT_HD_DISPLAY LIKE SOOD2.
* Init
CLEAR OBJECT_HD_DISPLAY.
RCODE = 0.
* Check if read from database is necessary at all
CHECK OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_MEMID_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_PARA_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_PARB_CHANGED NE 'X'
OR OBJECT-PRIVATE-SENSITIVITY_CHANGED NE 'X'
OR OBJECT-PRIVATE-MODIF_CHANGED NE 'X'
OR OBJECT-PRIVATE-DESC_CHANGED NE 'X'
OR OBJECT-PRIVATE-OBJCONT_CHANGED NE 'X'.
* Read content (for later call of SO_OBJECT_UPDATE)
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
* FILTER = ' '
FOLDER_ID = FOLDER_ID
FORWARDER = FORWARDERNAME
OBJECT_ID = OBJECT_ID
* OWNER = ' '
* F_MAILER = ' '
IMPORTING
* OBJECT_FL_DISPLAY =
OBJECT_HD_DISPLAY = OBJECT_HD_DISPLAY
* OBJECT_RC_DISPLAY =
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = OBJPARA
OBJPARB = OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2054
COMMUNICATION_FAILURE = 2626
COMPONENT_NOT_AVAILABLE = 2648
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2156
OBJECT_NOT_EXIST = 3826
OBJECT_NO_AUTHORIZATION = 2007
OPERATION_NO_AUTHORIZATION = 2015
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 2004
SUBSTITUTE_NOT_ACTIVE = 2648
SUBSTITUTE_NOT_DEFINED = 2648
SYSTEM_FAILURE = 2648
X_ERROR = 2648
OTHERS = 2648.
RCODE = SY-SUBRC.
CHECK RCODE = 0.
doc_attribs = OBJECT_HD_DISPLAY. "TR 6.10 UNICODE
* Content in KPro?
extct = object_hd_display-extct.
* Sensitivity
* if object-private-sensitivity_changed ne 'X'.
SENSITIVITY = OBJECT_HD_DISPLAY-OBJSNS.
* endif.
* Modifiable
* if object-private-modif_changed ne 'X'.
PERFORM GET_MODIF_FROM_SOOD USING OBJECT_HD_DISPLAY-FOLRG
OBJECT_HD_DISPLAY-OBJCP
OBJECT_HD_DISPLAY-FIXED
CHANGING MODIFIABLE.
* endif.
* General prosessing attributes
* if object-private-proc_general_changed ne 'X'.
PROCTYPE = OBJECT_HD_DISPLAY-VMTYP.
PROCELEMENT = OBJECT_HD_DISPLAY-ACNAM.
SKIPS = OBJECT_HD_DISPLAY-SKIPS.
* endif.
* Transform OBJPARA to SETGETTAB
* if object-private-proc_para_changed ne 'X'.
REFRESH SETGETTAB.
CLEAR WA255.
LOOP AT OBJPARA INTO WA255.
APPEND WA255 TO SETGETTAB.
ENDLOOP.
* endif.
* Get document content
* if object-private-objcont_changed ne 'X'.
OBJCONTTAB[] = OBJCONT[].
* endif.
objheadtab[] = objhead[]. "TR 6.10 UNICODE
* Transform OBJPARB to IMPORTPARAMTAB
* if object-private-proc_parb_changed ne 'X'.
CLEAR WA255.
* Import parameters (name, value)
LOOP AT OBJPARB.
IF SY-TABIX = 1
AND ( PROCTYPE = 'U' OR PROCTYPE = 'S' ).
* Memory ID in first line
IF MEMORYID IS INITIAL.
MEMORYID = OBJPARB.
ENDIF.
ELSE.
CHECK LIN = 0.
WA255 = OBJPARB-NAME.
APPEND WA255 TO IMPORTPARAMTAB.
WA255 = OBJPARB-VALUE.
APPEND WA255 TO IMPORTPARAMTAB.
ENDIF.
ENDLOOP.
* endif.
ENDFORM.
FORM GET_BUFFERED_ATTRIBUTES
TABLES OBJCONTTAB
SETGETTAB
IMPORTPARAMTAB
USING FOLDER_ID LIKE SOODK
OBJECT_ID LIKE SOODK
FORWARDERNAME
CHANGING PROCTYPE
PROCELEMENT
SKIPS
MEMORYID
SENSITIVITY
MODIFIABLE
LANGUAGE
NAME
TITLE
RCODE.
DATA: OBJCONT LIKE SOLI OCCURS 0,
OBJHEAD LIKE SOLI OCCURS 0,
OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
LIN LIKE SY-TABIX,
WA255(255),
OBJECT_HD_DISP_LOC LIKE SOOD2.
* Init
CLEAR OBJECT_HD_DISP_LOC.
RCODE = 0.
* Check if read from database is necessary at all
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_MEMID_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_PARA_CHANGED NE 'X'
OR OBJECT-PRIVATE-PROC_PARB_CHANGED NE 'X'
OR OBJECT-PRIVATE-SENSITIVITY_CHANGED NE 'X'
OR OBJECT-PRIVATE-MODIF_CHANGED NE 'X'
OR OBJECT-PRIVATE-DESC_CHANGED NE 'X'
OR OBJECT-PRIVATE-OBJCONT_CHANGED NE 'X'.
* Read content (for later call of SO_OBJECT_UPDATE)
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
* FILTER = ' '
FOLDER_ID = FOLDER_ID
FORWARDER = FORWARDERNAME
OBJECT_ID = OBJECT_ID
* OWNER = ' '
* F_MAILER = ' '
IMPORTING
* OBJECT_FL_DISPLAY =
OBJECT_HD_DISPLAY = OBJECT_HD_DISP_LOC
* OBJECT_RC_DISPLAY =
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = OBJPARA
OBJPARB = OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2054
COMMUNICATION_FAILURE = 2626
COMPONENT_NOT_AVAILABLE = 2648
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2156
OBJECT_NOT_EXIST = 3826
OBJECT_NO_AUTHORIZATION = 2007
OPERATION_NO_AUTHORIZATION = 2015
OWNER_NOT_EXIST = 2113
PARAMETER_ERROR = 2004
SUBSTITUTE_NOT_ACTIVE = 2648
SUBSTITUTE_NOT_DEFINED = 2648
SYSTEM_FAILURE = 2648
X_ERROR = 2648
OTHERS = 2648.
RCODE = SY-SUBRC.
CHECK RCODE = 0.
ENDIF.
* Sensitivity
IF OBJECT-PRIVATE-SENSITIVITY_CHANGED NE 'X'.
SENSITIVITY = OBJECT_HD_DISP_LOC-OBJSNS.
ELSE.
SENSITIVITY = OBJECT-SENSITIVITY.
ENDIF.
* Modifiable
IF OBJECT-PRIVATE-MODIF_CHANGED NE 'X'.
PERFORM GET_MODIF_FROM_SOOD USING OBJECT_HD_DISP_LOC-FOLRG
OBJECT_HD_DISP_LOC-OBJCP
OBJECT_HD_DISP_LOC-FIXED
CHANGING MODIFIABLE.
ELSE.
MODIFIABLE = OBJECT-MODIFIABLE.
ENDIF.
* General prosessing attributes
IF OBJECT-PRIVATE-PROC_GENERAL_CHANGED NE 'X'.
PROCTYPE = OBJECT_HD_DISP_LOC-VMTYP.
PROCELEMENT = OBJECT_HD_DISP_LOC-ACNAM.
SKIPS = OBJECT_HD_DISP_LOC-SKIPS.
ELSE.
PROCTYPE = OBJECT-PROCESSTYPE.
PROCELEMENT = OBJECT-PROCESSELEMENT.
SKIPS = OBJECT-PROCSKIPFIRSTSCREEN.
ENDIF.
* Transform OBJPARA to SETGETTAB
IF OBJECT-PRIVATE-PROC_PARA_CHANGED NE 'X'.
REFRESH SETGETTAB.
CLEAR WA255.
LOOP AT OBJPARA INTO WA255.
APPEND WA255 TO SETGETTAB.
ENDLOOP.
ELSE.
SETGETTAB[] = OBJECT-PROCSETGETTAB[].
ENDIF.
* Get document content
IF OBJECT-PRIVATE-OBJCONT_CHANGED NE 'X'.
OBJCONTTAB[] = OBJCONT[].
ELSE.
OBJCONTTAB[] = OBJECT-PRIVATE-OBJCONT[].
ENDIF.
* Transform OBJPARB to IMPORTPARAMTAB
IF OBJECT-PRIVATE-PROC_PARB_CHANGED NE 'X'.
CLEAR WA255.
* Import parameters (name, value)
LOOP AT OBJPARB.
IF SY-TABIX = 1
AND ( PROCTYPE = 'U' OR PROCTYPE = 'S' ).
* Memory ID in first line
IF MEMORYID IS INITIAL.
MEMORYID = OBJPARB.
ENDIF.
ELSE.
CHECK LIN = 0.
WA255 = OBJPARB-NAME.
APPEND WA255 TO IMPORTPARAMTAB.
WA255 = OBJPARB-VALUE.
APPEND WA255 TO IMPORTPARAMTAB.
ENDIF.
ENDLOOP.
ELSE.
IMPORTPARAMTAB[] = OBJECT-PROCIMPORTPARAMTAB[].
ENDIF.
* Description
IF OBJECT-PRIVATE-DESC_CHANGED NE SPACE.
TITLE = OBJECT-PRIVATE-DESCRIPTION.
ELSE.
TITLE = OBJECT_HD_DISP_LOC-OBJDES.
ENDIF.
* Language, name
LANGUAGE = OBJECT_HD_DISP_LOC-OBJLA.
NAME = OBJECT_HD_DISP_LOC-OBJNAM.
ENDFORM.
*----------------------------------------------------------------------*
* Form GET_USER_NAME
*----------------------------------------------------------------------*
* Selects the name of a user for error messages *
*----------------------------------------------------------------------*
FORM GET_USER_NAME USING USER_NAME
ADDRESS_NAME.
DATA: USER_DAT LIKE SOUD3.
CLEAR USER_DAT.
MOVE USER_NAME TO USER_DAT-SAPNAM.
CALL FUNCTION 'SO_NAME_CONVERT'
EXPORTING
NAME_IN = USER_DAT
IMPORTING
NAME_OUT = USER_DAT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC EQ 0.
MOVE USER_DAT-ADRNAME TO ADDRESS_NAME.
ELSE.
MOVE USER_NAME TO ADDRESS_NAME.
ENDIF.
ENDFORM.
BEGIN_METHOD EXISTENCECHECK CHANGING CONTAINER.
DATA: SOFM_KEY LIKE SOFMK,
SOFM_DAT LIKE SOFMD,
OFFICE_ID LIKE SOUDK,
RCODE LIKE SY-SUBRC.
IF NOT OBJECT-KEY IS INITIAL
and not object-key-foldernumber is initial. "insert 694902
SOFM_KEY-FOLTP = OBJECT-KEY-FOLDERTYPE.
SOFM_KEY-FOLYR = OBJECT-KEY-FOLDERYEAR.
SOFM_KEY-FOLNO = OBJECT-KEY-FOLDERNUMBER.
SOFM_KEY-DOCTP = OBJECT-KEY-TYPE.
SOFM_KEY-DOCYR = OBJECT-KEY-YEAR.
SOFM_KEY-DOCNO = OBJECT-KEY-NUMBER.
IF NOT OBJECT-KEY-FORWARDERNAME IS INITIAL.
* Get forwarder id
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'SOFM-Key' OBJECT-KEY-FORWARDERNAME SPACE SPACE.
ENDIF.
MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
ELSE.
SOFM_KEY-FORTP = SPACE.
SOFM_KEY-FORYR = SPACE.
SOFM_KEY-FORNO = SPACE.
ENDIF.
* Look in SOFM if object exists
PERFORM SOFM_SELECT(SAPFSSO0) USING SOFM_KEY
SOFM_DAT
RCODE.
IF RCODE NE 0.
EXIT_RETURN '0001' SPACE SPACE SPACE SPACE.
ENDIF.
ELSE.
* Object is initial, so no persistent object exists
* exit_return '0001' space space space space.
ENDIF.
END_METHOD.
FORM CLEAR_DOC_FLAGS.
* Don't clear flags and changed values if document has been changed
* again since last SAVE and before commit work
CHECK OBJECT-PRIVATE-DOC_CHANGED IS INITIAL.
* CLEAR Processing-CHANGED-FLAGs
CLEAR OBJECT-PRIVATE-PROC_GENERAL_CHANGED.
CLEAR OBJECT-PRIVATE-PROC_MEMID_CHANGED.
CLEAR OBJECT-PRIVATE-PROC_PARA_CHANGED.
CLEAR OBJECT-PRIVATE-PROC_PARB_CHANGED.
CLEAR OBJECT-PRIVATE-SENSITIVITY_CHANGED.
CLEAR OBJECT-PRIVATE-MODIF_CHANGED.
CLEAR OBJECT-PRIVATE-DESC_CHANGED.
CLEAR OBJECT-PRIVATE-OBJCONT_CHANGED.
* Refresh table with changed objects
REFRESH OBJECT-PROCSETGETTAB.
REFRESH OBJECT-PROCIMPORTPARAMTAB.
REFRESH OBJECT-PRIVATE-OBJCONT.
* Clear processing attributes
CLEAR OBJECT-PROCESSTYPE.
CLEAR OBJECT-PROCESSELEMENT.
CLEAR OBJECT-PROCSKIPFIRSTSCREEN.
CLEAR OBJECT-PROCMEMORYID.
* Clear further document attributes
CLEAR OBJECT-SENSITIVITY.
CLEAR OBJECT-MODIFIABLE.
CLEAR OBJECT-PRIVATE-DESCRIPTION.
ENDFORM.
FORM CREATE_RECIPIENT_FROM_SOOS USING RECEIVERS LIKE SOOS1
CHANGING RECIPIENT TYPE SWC_OBJECT
RETURNCODE.
DATA: KEY LIKE SWOTOBJID-OBJKEY,
RCODE LIKE SY-SUBRC,
DUMMY_MSGV1 LIKE SY-MSGV1,
DUMMY_MSGV2 LIKE SY-MSGV2,
DUMMY_MSGV3 LIKE SY-MSGV3,
DUMMY_MSGV4 LIKE SY-MSGV4.
SWC_CONTAINER LOC_CONTAINER.
* PERFORM GET_ID USING RECEIVERS "TR250298
* CHANGING KEY "TR250298
* RCODE. "TR250298
PERFORM GET_BOR_KEY_FROM_SOOS1(RSSOOT04) "TR250298
USING RECEIVERS "TR250298
CHANGING KEY "TR250298
RCODE "TR250298
DUMMY_MSGV1 "TR250298
DUMMY_MSGV2 "TR250298
DUMMY_MSGV3 "TR250298
DUMMY_MSGV4. "TR250298
IF RCODE NE 0.
* Should not occur
* Cancel operation and reconstruct this object.
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CREATE_OBJECT RECIPIENT 'RECIPIENT' KEY.
IF SY-SUBRC NE 0.
* Should not occur
* Cancel operation and reconstruct this object.
RETURNCODE = '99'.
EXIT.
ENDIF.
* Fill sending attributes
IF NOT RECEIVERS-SNDEX IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'SendExpress' RECEIVERS-SNDEX.
SWC_CALL_METHOD RECIPIENT 'SetExpress' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-SNDCP IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'SendCopy' RECEIVERS-SNDCP.
SWC_CALL_METHOD RECIPIENT 'SetCopy' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-SNDBC IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'BlindCopy' RECEIVERS-SNDBC.
SWC_CALL_METHOD RECIPIENT 'SetBlindCopy' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-FORFB IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'NoForwarding' RECEIVERS-FORFB.
SWC_CALL_METHOD RECIPIENT 'SetNoForwarding'
LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-PRIFB IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'NoPrinting' RECEIVERS-PRIFB.
SWC_CALL_METHOD RECIPIENT 'SetNoPrinting' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-SNDPRI IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'SendPriority' RECEIVERS-SNDPRI.
SWC_CALL_METHOD RECIPIENT 'SetSendPriority' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-ACALL IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'ToDoByAll' RECEIVERS-ACALL.
SWC_CALL_METHOD RECIPIENT 'SetToDoByAll' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-ACONE IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'ToDoByOne' RECEIVERS-ACONE.
SWC_CALL_METHOD RECIPIENT 'SetToDoByOne' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-OBJRR IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'ReplyRequired' RECEIVERS-OBJRR.
SWC_CALL_METHOD RECIPIENT 'SetReplyRequired'
LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
* if receivers-mailstatus ne 'E'. " default = 'E' "TR090298
SWC_SET_ELEMENT LOC_CONTAINER
'StatusInfoByMail' RECEIVERS-MAILSTATUS.
SWC_CALL_METHOD RECIPIENT 'SetStatusInfoByMail'
LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
* endif. "TR090298
* if receivers-deliver ne 'X'. " default = 'X' "TR090298
SWC_SET_ELEMENT LOC_CONTAINER
'Deliver' RECEIVERS-DELIVER.
SWC_CALL_METHOD RECIPIENT 'SetDeliver' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
* endif. "TR090298
IF NOT RECEIVERS-NOT_DELI IS INITIAL. " default = space
SWC_SET_ELEMENT LOC_CONTAINER
'NotDeliver' RECEIVERS-NOT_DELI.
SWC_CALL_METHOD RECIPIENT 'SetNotDeliver' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
* if receivers-read ne 'X'. " default = 'X' "TR090298
SWC_SET_ELEMENT LOC_CONTAINER
'Read' RECEIVERS-READ.
SWC_CALL_METHOD RECIPIENT 'SetRead' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
* endif. "TR090298
IF NOT RECEIVERS-RESEND IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'Resend' RECEIVERS-RESEND.
SWC_CALL_METHOD RECIPIENT 'SetResend' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
IF NOT RECEIVERS-OBJRN IS INITIAL.
SWC_SET_ELEMENT LOC_CONTAINER
'NoReply' RECEIVERS-OBJRN.
SWC_CALL_METHOD RECIPIENT 'SetNoReply' LOC_CONTAINER.
IF SY-SUBRC NE 0.
* Should not occur
RETURNCODE = '99'.
EXIT.
ENDIF.
SWC_CLEAR_CONTAINER LOC_CONTAINER.
ENDIF.
SWC_RELEASE_CONTAINER LOC_CONTAINER.
ENDFORM.
FORM GET_MODIF_FROM_SOOD USING FOLRG
OBJCP
FIXED
CHANGING MODIF.
* IF FOLRG = 'P' " pr_fol
* OR FOLRG = 'I' " in_fol
* OR FOLRG = 'O' " ou_fol
* OR FOLRG = 'T' " pw_fol
* OR FOLRG = 'Y'. " pv_fol
** Private document
* IF OBJCP = SPACE
* AND FIXED = SPACE.
* MODIF = SPACE.
* ELSEIF OBJCP = 'X'.
* MODIF = 'A'.
* ELSEIF FIXED = 'X'.
* MODIF = 'X'.
* ENDIF.
* ELSE.
** General document
* IF OBJCP = 'X'.
* MODIF = 'A'.
* ELSE.
* MODIF = 'X'.
* ENDIF.
* ENDIF.
* Handle always as a private document
IF OBJCP = SPACE
AND FIXED = SPACE.
MODIF = SPACE.
ELSEIF OBJCP = 'X'.
MODIF = 'A'.
ELSEIF FIXED = 'X'.
MODIF = 'X'.
ENDIF.
ENDFORM. " GET_MODIF_FROM_SOOD
FORM SET_OBJCP_FIXED_FROM_MODIF
USING FOLRG
MODIFIABLE
CHANGING OBJCP
FIXED
RETURNCODE.
* Init
RETURNCODE = 0.
** Set OBJCP and FIXED
* IF FOLRG = 'P' " pr_fol
* OR FOLRG = 'I' " in_fol
* OR FOLRG = 'O' " ou_fol
* OR FOLRG = 'T' " pw_fol
* OR FOLRG = 'Y'. " pv_fol
** Private document
* CASE MODIFIABLE.
* WHEN SPACE.
* FIXED = SPACE.
* OBJCP = SPACE.
* WHEN 'A'.
* OBJCP = 'X'.
* WHEN 'X'.
* FIXED = 'X'.
* WHEN OTHERS.
** Should not occur.
* RETURNCODE = 1.
* ENDCASE.
* ELSE.
** General document
* CASE MODIFIABLE.
* WHEN 'A'.
* OBJCP = 'X'.
* WHEN 'X'.
* OBJCP = SPACE.
* WHEN OTHERS.
** Should not occur.
* RETURNCODE = 1.
* ENDCASE.
* ENDIF.
* Handle always as a private document
CASE MODIFIABLE.
WHEN SPACE.
FIXED = SPACE.
OBJCP = SPACE.
WHEN 'A'.
OBJCP = 'X'.
FIXED = SPACE.
WHEN 'X'.
FIXED = 'X'.
OBJCP = SPACE.
WHEN OTHERS.
* Should not occur.
RETURNCODE = 1.
ENDCASE.
ENDFORM. " SET_OBJCP_FIXED_FROM_MODIF
************************************************************************
* Copy
************************************************************************
BEGIN_METHOD COPY CHANGING CONTAINER.
DATA: RCODE LIKE SY-SUBRC,
SUBRC LIKE SY-SUBRC,
MSGV1 LIKE SY-MSGV1,
MSGV2 LIKE SY-MSGV2,
MSGV3 LIKE SY-MSGV3,
MSGV4 LIKE SY-MSGV4,
NEW TYPE SWC_OBJECT,
MODIFIABLE LIKE SOOD-OBJCP,
SOMG_KEY LIKE SOMGK,
SOMG_DATA LIKE SOMGD,
SOFM_KEY LIKE SOFMK,
ADDITIONAL_ENQUEUE LIKE SONV-FLAG VALUE SPACE,
* FOLDER_ID_API1 LIKE SOOBJINFI1-OBJECT_ID,
NEW_OBJECT_KEY LIKE OBJECT-KEY,
OFFICE_ID LIKE SOUDK,
OBJECT_HD_DISPLAY LIKE SOOD2,
* OBJECT_DAT LIKE SOFOLENTI1,
* OBJECT_DAT_CHA LIKE SODOCCHGI1,
OBJCONT LIKE SOLI OCCURS 0 WITH HEADER LINE,
OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK.
DATA: NOTE_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
"TR270598 B40K011880
NOTE_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
"TR270598 B40K011880
NOTE_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
"TR270598 B40K011880
NOTE_TEXT LIKE SOLI OCCURS 0 WITH HEADER LINE,
"TR270598 B40K011880
NOTE_EXISTING LIKE SONV-FLAG, "TR270598 B40K011880
LIN LIKE SY-TABIX. "TR270598 B40K011880
DATA: ATTACH_LIST LIKE SOOD5 OCCURS 0 WITH HEADER LINE,
LINK_LIST LIKE SOODK OCCURS 0 WITH HEADER LINE,
ATTACH_ID LIKE SOODK,
att_HD_DISPLAY LIKE SOOD2,
new_att_hd_display like sood2,
new_object_hd_display like sood2,
new_object_hd_change like sood1,
new_att_hd_change like sood1,
new_object_id like soodk,
object_fl_display like sofm2,
new_object_fl_display like sofm2,
NEW_OBJECT_FL_CHANGE like SOFM1.
* KPro data
DATA: LOIO_ID LIKE SDOKOBJECT, "TR161098 4.6A
NEW_LOIO_ID LIKE SDOKOBJECT, "TR161098 4.6A
CONTEXT like SDOKPROPTY occurs 0. "TR161098 4.6A
data hex_mode like sonv-flag. "TR UNICODE 5.0A
* Declare local_container
SWC_CONTAINER LOCAL_CONTAINER.
* Read document data
MOVE: OBJECT-KEY-FOLDERTYPE TO FOLDER_ID-OBJTP,
OBJECT-KEY-FOLDERYEAR TO FOLDER_ID-OBJYR,
OBJECT-KEY-FOLDERNUMBER TO FOLDER_ID-OBJNO,
OBJECT-KEY-TYPE TO OBJECT_ID-OBJTP,
OBJECT-KEY-YEAR TO OBJECT_ID-OBJYR,
OBJECT-KEY-NUMBER TO OBJECT_ID-OBJNO.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
FOLDER_ID = FOLDER_ID
FORWARDER = OBJECT-KEY-FORWARDERNAME
OBJECT_ID = OBJECT_ID
IMPORTING
OBJECT_HD_DISPLAY = OBJECT_HD_DISPLAY
object_fl_display = object_fl_display
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = OBJPARA
OBJPARB = OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 2648
COMMUNICATION_FAILURE = 2005
COMPONENT_NOT_AVAILABLE = 2648
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2009
OBJECT_NOT_EXIST = 2006
OBJECT_NO_AUTHORIZATION = 2007
OPERATION_NO_AUTHORIZATION = 2009
OWNER_NOT_EXIST = 2648
PARAMETER_ERROR = 2004
SUBSTITUTE_NOT_ACTIVE = 2648
SUBSTITUTE_NOT_DEFINED = 2648
SYSTEM_FAILURE = 2648
X_ERROR = 2648
OTHERS = 2648.
CASE SY-SUBRC.
WHEN 0.
* Everything OK.
WHEN OTHERS.
exit_return sy-subrc 'SO_OBJECT_READ' space "TR190199 4.6a
space space. "TR190199 4.6a
* RCODE = 2633. "TR190199 4.6a
* MSGV1 = 'SO_OBJECT_READ'. "TR190199 4.6a
* MSGV2 = SY-SUBRC. "TR190199 4.6a
* MSGV3 = SPACE. "TR190199 4.6a
* MSGV4 = SPACE. "TR190199 4.6a
* EXIT. "TR190199 4.6a
ENDCASE.
* Copy LOIO, if document is in KPro "TR190199 4.6A start
IF OBJECT_HD_DISPLAY-EXTCT = 'K'. "REFERENCE_TYPE_KPRO.
* * Get LOIO id and context from OBJCONT
CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
IMPORTING
LOIO_OBJECT = loio_id
TABLES
OBJCONT = objcont
CONTEXT = context
EXCEPTIONS
MISSING_KPRO_DATA = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
exit_return 2648 space space space space.
ENDIF.
CALL FUNCTION 'SO_LOIO_COPY'
EXPORTING
LOIO_OBJECT = LOIO_ID
IMPORTING
NEW_LOIO_OBJECT = NEW_LOIO_ID
TABLES
CONTEXT = CONTEXT
EXCEPTIONS
KPRO_MODEL_ERROR = 1
KPRO_INCONSISTENCY = 2
KPRO_TRANSFER_ERROR = 445
X_ERROR = 4
OTHERS = 5
.
CASE SY-SUBRC.
WHEN 0.
"Everything fine
WHEN others.
exit_return 2013 'KPRO_LOIO_COPY' loio_id space space.
ENDCASE.
* * Put new LOIO id and context into OBJCONT
CALL FUNCTION 'SO_KPRO_DATA_INTO_OBJCONT_PUT'
EXPORTING
LOIO_OBJECT = new_loio_id
TABLES
CONTEXT = context
OBJCONT = objcont
.
ENDIF. "TR161098 4.6A end
* MOVE: OBJECT_HD_DISPLAY-OBJNAM TO OBJECT_DAT_CHA-OBJ_NAME,
* OBJECT_HD_DISPLAY-OBJDES TO OBJECT_DAT_CHA-OBJ_DESCR,
* OBJECT_HD_DISPLAY-OBJLA TO OBJECT_DAT_CHA-OBJ_LANGU,
* OBJECT_HD_DISPLAY-OBJSRT TO OBJECT_DAT_CHA-OBJ_SORT,
* OBJECT_HD_DISPLAY-OBJSNS TO OBJECT_DAT_CHA-SENSITIVTY,
* OBJECT_HD_DISPLAY-OBJPRI TO OBJECT_DAT_CHA-OBJ_PRIO,
* OBJECT_HD_DISPLAY-OBJCP TO OBJECT_DAT_CHA-NO_CHANGE,
* OBJECT_HD_DISPLAY-OBJLEN TO OBJECT_DAT_CHA-DOC_SIZE.
* MOVE: OBJECT_HD_DISPLAY-VMTYP TO OBJECT_DAT_CHA-PROC_TYPE,
* OBJECT_HD_DISPLAY-ACNAM TO OBJECT_DAT_CHA-PROC_NAME,
* OBJECT_HD_DISPLAY-SKIPS TO OBJECT_DAT_CHA-SKIP_SCREN.
*
* MOVE FOLDER_ID TO FOLDER_ID_API1.
move: object_fl_display to new_object_fl_display,
object_hd_display to new_object_hd_display.
MOVE-CORRESPONDING: NEW_OBJECT_FL_DISPLAY TO NEW_OBJECT_FL_CHANGE,
NEW_OBJECT_hd_DISPLAY TO NEW_OBJECT_hd_CHANGE.
CALL FUNCTION 'SO_OBJECT_INSERT'
EXPORTING
FOLDER_ID = folder_id
OBJECT_FL_CHANGE = NEW_OBJECT_FL_CHANGE
OBJECT_HD_CHANGE = NEW_OBJECT_hd_CHANGE
OBJECT_TYPE = object_id-objtp
IMPORTING
OBJECT_ID = new_object_id
TABLES
OBJCONT = objcont
OBJHEAD = objhead
OBJPARA = objpara
OBJPARB = objparb
EXCEPTIONS
COMPONENT_NOT_AVAILABLE = 1000
FOLDER_NOT_EXIST = 2005
FOLDER_NO_AUTHORIZATION = 2009
OBJECT_TYPE_NOT_EXIST = 1000
OPERATION_NO_AUTHORIZATION = 2009
PARAMETER_ERROR = 2004
OTHERS = 1000.
.
CASE SY-SUBRC.
WHEN 0.
MESSAGE ID 'SO' TYPE 'S' NUMBER '109'.
CLEAR NEW_OBJECT_KEY.
MOVE: FOLDER_ID-OBJTP TO NEW_OBJECT_KEY-FOLDERTYPE,
FOLDER_ID-OBJYR TO NEW_OBJECT_KEY-FOLDERYEAR,
FOLDER_ID-OBJNO TO NEW_OBJECT_KEY-FOLDERNUMBER,
NEW_OBJECT_ID-OBJTP TO NEW_OBJECT_KEY-TYPE,
NEW_OBJECT_ID-OBJYR TO NEW_OBJECT_KEY-YEAR,
NEW_OBJECT_ID-OBJNO TO NEW_OBJECT_KEY-NUMBER,
SPACE TO NEW_OBJECT_KEY-FORWARDERNAME.
when others.
EXIT_RETURN sy-subrc SPACE SPACE SPACE SPACE.
ENDCASE.
* CALL FUNCTION 'SO_DOCUMENT_INSERT_API1'
* EXPORTING
* FOLDER_ID = FOLDER_ID_API1
* DOCUMENT_DATA = OBJECT_DAT_CHA
* DOCUMENT_TYPE = OBJECT-KEY-TYPE
* IMPORTING
* DOCUMENT_INFO = OBJECT_DAT
* TABLES
* OBJECT_HEADER = OBJHEAD
* OBJECT_CONTENT = OBJCONT
* OBJECT_PARA = OBJPARA
* OBJECT_PARB = OBJPARB
* EXCEPTIONS
* FOLDER_NOT_EXIST = 4
* DOCUMENT_TYPE_NOT_EXIST = 7
* OPERATION_NO_AUTHORIZATION = 5
* PARAMETER_ERROR = 8
* X_ERROR = 6.
* CASE SY-SUBRC.
* WHEN 0.
* MESSAGE ID 'SO' TYPE 'S' NUMBER '109'.
* CLEAR NEW_OBJECT_KEY.
* MOVE OBJECT_DAT-OBJECT_ID TO new_OBJECT_ID.
* MOVE: FOLDER_ID-OBJTP TO NEW_OBJECT_KEY-FOLDERTYPE,
* FOLDER_ID-OBJYR TO NEW_OBJECT_KEY-FOLDERYEAR,
* FOLDER_ID-OBJNO TO NEW_OBJECT_KEY-FOLDERNUMBER,
* new_OBJECT_ID-OBJTP TO NEW_OBJECT_KEY-TYPE,
* new_OBJECT_ID-OBJYR TO NEW_OBJECT_KEY-YEAR,
* new_OBJECT_ID-OBJNO TO NEW_OBJECT_KEY-NUMBER,
* SPACE TO NEW_OBJECT_KEY-FORWARDERNAME.
* WHEN 4.
* EXIT_RETURN 2005 SPACE SPACE SPACE SPACE.
* WHEN 5.
* EXIT_RETURN 2009 SPACE SPACE SPACE SPACE.
* WHEN 6.
* EXIT_RETURN 2105 'SO_DOCUMENT_INSERT_API1' SPACE SPACE SPACE.
* WHEN 7.
* EXIT_RETURN 2105 'SO_DOCUMENT_INSERT_API1' SPACE SPACE SPACE.
* WHEN 8.
* EXIT_RETURN 2004 SPACE SPACE SPACE SPACE.
* ENDCASE.
* Attachments "TR190199 4.6a start
* Copy of attachments
CALL FUNCTION 'SO_ATTACHMENT_LIST_READ'
EXPORTING
OBJECT_ID = OBJECT_id
TABLES
OBJECTS = ATTACH_LIST.
LOOP AT ATTACH_LIST.
MOVE: ATTACH_LIST-OBJTP TO ATTACH_ID-OBJTP,
ATTACH_LIST-OBJYR TO ATTACH_ID-OBJYR,
ATTACH_LIST-OBJNO TO ATTACH_ID-OBJNO.
CALL FUNCTION 'SO_OBJECT_ARCHIVE_READ'
EXPORTING
PARENT_ID = OBJECT_ID
OBJECT_ID = ATTACH_ID
IMPORTING
OBJECT_HD_DISPLAY = att_HD_DISPLAY
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
OBJPARA = OBJPARA
OBJPARB = OBJPARB
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 35
OBJECT_NOT_EXIST = 14
OWNER_NOT_EXIST = 22
PARAMETER_ERROR = 23
SUBSTITUTE_NOT_ACTIVE = 31
SUBSTITUTE_NOT_DEFINED = 32.
check SY-SUBRC = 0. "CONTINUE LOOP AT ATTACH_LIST
* * if document is in kpro: copy kpro object
iF ATTACH_LIST-EXTCT = 'K'. "REFERENCE_TYPE_KPRO.
* * Get LOIO id and context from OBJCONT
CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
IMPORTING
LOIO_OBJECT = loio_id
TABLES
OBJCONT = objcont
CONTEXT = context
EXCEPTIONS
MISSING_KPRO_DATA = 1
OTHERS = 2
.
IF SY-SUBRC NE 0.
* * Dont't stop copying. Just take next attachment
CONTINUE.
ENDIF.
* * Copy KPro object
CALL FUNCTION 'SO_LOIO_COPY'
EXPORTING
LOIO_OBJECT = LOIO_ID
IMPORTING
NEW_LOIO_OBJECT = NEW_LOIO_ID
TABLES
CONTEXT = CONTEXT
EXCEPTIONS
KPRO_MODEL_ERROR = 1
KPRO_INCONSISTENCY = 2
KPRO_TRANSFER_ERROR = 3
X_ERROR = 4
OTHERS = 5
.
CASE SY-SUBRC.
WHEN 0.
"Everything fine
WHEN OTHERS.
* * Dont't stop copying. Just take next attachment
CONTINUE.
ENDCASE.
* * Update objcont
* * Put new LOIO id and context into OBJCONT
CALL FUNCTION 'SO_KPRO_DATA_INTO_OBJCONT_PUT'
EXPORTING
LOIO_OBJECT = new_loio_id
TABLES
CONTEXT = context
OBJCONT = objcont
.
ENDIF.
CLEAR LINK_LIST. REFRESH LINK_LIST.
CALL FUNCTION 'SO_LINK_LIST_READ'
EXPORTING
OBJECT_ID = ATTACH_ID
TABLES
LINK_LIST = LINK_LIST
EXCEPTIONS
OTHERS = 1.
MOVE-CORRESPONDING att_HD_DISPLAY TO NEW_att_HD_CHANGE.
CALL FUNCTION 'SO_ATTACHMENT_INSERT'
EXPORTING
OBJECT_ID = new_OBJECT_ID
OBJECT_HD_CHANGE = NEW_att_HD_CHANGE
ATTACH_TYPE = ATTACH_ID-OBJTP
IMPORTING
OBJECT_HD_DISPLAY = NEW_att_HD_DISPLAY
ATTACH_ID = ATTACH_ID
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 35
OBJECT_TYPE_NOT_EXIST = 17
OPERATION_NO_AUTHORIZATION = 21
OWNER_NOT_EXIST = 22
PARAMETER_ERROR = 23
SUBSTITUTE_NOT_ACTIVE = 31
SUBSTITUTE_NOT_DEFINED = 32.
LOOP AT LINK_LIST.
CALL FUNCTION 'SO_LINK_INSERT'
EXPORTING
OBJECT_ID = ATTACH_ID
LINK_ID = LINK_LIST
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
ENDLOOP.
CLEAR LINK_LIST. REFRESH LINK_LIST.
CALL FUNCTION 'SO_LINK_LIST_READ'
EXPORTING
OBJECT_ID = OBJect_ID
TABLES
LINK_LIST = LINK_LIST
EXCEPTIONS
OTHERS = 1.
LOOP AT LINK_LIST.
CALL FUNCTION 'SO_LINK_INSERT'
EXPORTING
OBJECT_ID = NEW_OBJECT_ID
LINK_ID = LINK_LIST
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
"TR190199 4.6a end
* Further message attributes
* (without recipients, linked application objects and general note)
MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
IF RCODE NE 0.
SUBRC = '2013'.
MSGV1 = 'SOFM-Key'.
MSGV2 = OBJECT-KEY-FORWARDERNAME.
MSGV3 = SPACE.
MSGV4 = SPACE.
ENDIF.
MOVE: OBJECT-KEY TO SOFM_KEY,
OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
REFRESH SOMG_TAB.
CLEAR SOMG_DATA.
PERFORM SOMG_SELIDA(SAPFSSO5) TABLES SOMG_TAB
USING SOFM_KEY
CHANGING RCODE.
sort somg_tab by objtp objyr objno. "insert 499933
IF RCODE = 0.
LOOP AT SOMG_TAB
WHERE OBJTP = 'MSG'.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
move-corresponding somg_tab to somg_key. "insert 499933
MOVE SOMG_KEY TO OBJECT-PRIVATE-SOMG_KEY.
EXIT.
ENDLOOP.
if not somg_data-gen_notno is initial "INSERT 407648
and object-generalnotenumber is initial. "INSERT 407648
object-generalnotetype = somg_data-gen_nottp. "INSERT 407648
object-generalnoteyear = somg_data-gen_notyr. "INSERT 407648
object-generalnotenumber = somg_data-gen_notno. "INSERT 407648
endif. "INSERT 407648
ENDIF.
IF SY-SUBRC NE 0.
* This message object isn't persistent yet, so just copy SOFM data
* Create handle to the new message object
* new_object_key-forwardername = space.
* swc_create_object new 'Message' new_object_key.
* if sy-subrc ne 0.
* endif.
* swc_set_element container result new.
* exit.
ENDIF.
* Create new SOMG key for the new message object and insert data
* * Create new SOMG key
SOMG_KEY-OBJTP = 'MSG'.
PERFORM GET_NEXT_NUMBER(SAPFSSO2) USING SOMG_KEY-OBJTP
CHANGING SOMG_KEY-OBJNO
SOMG_KEY-OBJYR
RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'GET_NEXT_NUMBER' 'MSG' SPACE SPACE.
ENDIF.
* General note "TR270598 B40K011880
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE "TR270598 B40K011880
LINES LIN. "TR270598 B40K011880
IF LIN = 0. "TR270598 B40K011880
IF NOT OBJECT-GENERALNOTENUMBER IS INITIAL. "TR270598 B40K011880
* * Read general note from database "TR270598 B40K011880
OBJECT_ID-OBJTP = OBJECT-GENERALNOTETYPE. "TR270598 B40K011880
OBJECT_ID-OBJYR = OBJECT-GENERALNOTEYEAR. "TR270598 B40K011880
OBJECT_ID-OBJNO = OBJECT-GENERALNOTENUMBER. "TR270598 B40K011880
PERFORM SOCX_SELECT(SAPFSSO0) "TR270598 B40K011880
TABLES NOTE_OBJHEAD "TR270598 B40K011880
NOTE_TEXT "TR270598 B40K011880
NOTE_OBJPARA "TR270598 B40K011880
NOTE_OBJPARB "TR270598 B40K011880
USING OBJECT_ID "TR270598 B40K011880
hex_mode "TR UNICODE 5.0A
RCODE. "TR270598 B40K011880
IF RCODE NE 0. "TR270598 B40K011880
* * Note exists but error when reading "TR270598 B40K011880
NOTE_EXISTING = SPACE. "TR270598 B40K011880
ELSE. "TR270598 B40K011880
NOTE_EXISTING = 'X'. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
ELSE. "TR270598 B40K011880
* * There is not any general note "TR270598 B40K011880
NOTE_EXISTING = SPACE. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
ELSE. "TR270598 B40K011880
NOTE_TEXT[] = OBJECT-PRIVATE-GENERAL_NOTE[]. "TR270598 B40K011880
NOTE_EXISTING = 'X'. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
IF NOTE_EXISTING NE SPACE. "TR270598 B40K011880
PERFORM INSERT_NOTE "TR270598 B40K011880
TABLES NOTE_TEXT "TR270598 B40K011880
USING SOMG_DATA-GEN_NOTTP "TR270598 B40K011880
SOMG_DATA-GEN_NOTYR "TR270598 B40K011880
SOMG_DATA-GEN_NOTNO "TR270598 B40K011880
CHANGING RCODE "TR270598 B40K011880
MSGV1 "TR270598 B40K011880
MSGV2 "TR270598 B40K011880
MSGV3 "TR270598 B40K011880
MSGV4. "TR270598 B40K011880
ELSE. "TR270598 B40K011880
* * No general note "TR270598 B40K011880
SOMG_DATA-GEN_NOTTP = SPACE. "TR270598 B40K011880
SOMG_DATA-GEN_NOTYR = SPACE. "TR270598 B40K011880
SOMG_DATA-GEN_NOTNO = SPACE. "TR270598 B40K011880
ENDIF. "TR270598 B40K011880
* Correct somg_data
SOMG_DATA-FOLTP = NEW_OBJECT_KEY-FOLDERTYPE.
SOMG_DATA-FOLYR = NEW_OBJECT_KEY-FOLDERYEAR.
SOMG_DATA-FOLNO = NEW_OBJECT_KEY-FOLDERNUMBER.
SOMG_DATA-DOCTP = NEW_OBJECT_KEY-TYPE.
SOMG_DATA-DOCYR = NEW_OBJECT_KEY-YEAR.
SOMG_DATA-DOCNO = NEW_OBJECT_KEY-NUMBER.
SOMG_DATA-FORTP = SPACE.
SOMG_DATA-FORYR = SPACE.
SOMG_DATA-FORNO = SPACE.
* somg_data-gen_nottp = space. "TR270598 B40K011880
* somg_data-gen_notyr = space. "TR270598 B40K011880
* somg_data-gen_notno = space. "TR270598 B40K011880
* Insert in SOMG
PERFORM SOMG_INSERT(SAPFSSO5) USING SOMG_KEY
SOMG_DATA
CHANGING RCODE.
IF RCODE NE 0.
EXIT_RETURN '2013' 'SOMG_INSERT' 'RSSOOT05' SPACE SPACE.
ENDIF.
* Create handle to the new message object
SWC_CREATE_OBJECT NEW 'Message' NEW_OBJECT_KEY.
IF SY-SUBRC NE 0.
ENDIF.
* Get attribute modifiable
PERFORM GET_MODIF_FROM_SOOD USING OBJECT_HD_DISPLAY-FOLRG
OBJECT_HD_DISPLAY-OBJCP
OBJECT_HD_DISPLAY-FIXED
CHANGING MODIFIABLE.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
SWC_SET_ELEMENT LOCAL_CONTAINER 'Modifiable' MODIFIABLE.
SWC_CALL_METHOD NEW 'SetModifiable' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
EXIT_RETURN SY-SUBRC SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* * Get recipient list
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
SWC_CLEAR_CONTAINER LOCAL_CONTAINER.
SWC_SET_ELEMENT LOCAL_CONTAINER 'MasterMessage' SELF.
SWC_CALL_METHOD NEW 'ImportRecipientList' LOCAL_CONTAINER.
IF SY-SUBRC NE 0.
EXIT_RETURN 2650 'ImportRecipientList' SY-SUBRC SPACE SPACE.
ENDIF.
* * Return result
SWC_SET_ELEMENT CONTAINER RESULT NEW.
END_METHOD.
FORM SELC_TO_ID_VALUE TABLES PROCSETGETTAB
ID_VALUE_TAB.
DATA: SELC_WA LIKE SELC,
PARAM_ID_LEN TYPE I,
BEGIN OF ID_VALUE_WA,
ID LIKE SOS01-L_PANAME,
VALUE LIKE SOS01-L_PALOW,
END OF ID_VALUE_WA.
* Init
* PARAM_ID_LEN = STRLEN( SOS01-L_PANAME ). "TR080699 B90K006311
REFRESH ID_VALUE_TAB.
* Transform
LOOP AT PROCSETGETTAB INTO SELC_WA.
CLEAR ID_VALUE_WA.
* IF PARAM_ID_LEN LE 3. "TR080699 B90K006311
IF selc_wa-high is initial. "TR080699 B90K006311
ID_VALUE_WA-ID = SELC_WA-NAME.
ELSE.
ID_VALUE_WA-ID = SELC_WA-HIGH.
ENDIF.
ID_VALUE_WA-VALUE = SELC_WA-LOW.
APPEND ID_VALUE_WA TO ID_VALUE_TAB.
ENDLOOP.
ENDFORM. " SELC_TO_ID_VALUE
FORM INSERT_NOTE TABLES TEXT
CHANGING TYPE
YEAR
NUMBER
* retcode. "TR280598 B40K011880
P_RCODE "TR280598 B40K011880
P_MSGV1 "TR280598 B40K011880
P_MSGV2 "TR280598 B40K011880
P_MSGV3 "TR280598 B40K011880
P_MSGV4. "TR280598 B40K011880
DATA: OBJECT_ID LIKE SOODK,
NOTE_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE.
DATA: L_RCODE LIKE SY-SUBRC. "TR280598 B40K011880
* Init
P_RCODE = 0.
* Create SOOD Id for note text
TYPE = 'RAW'.
PERFORM GET_NEXT_NUMBER(SAPFSSO2) USING TYPE
CHANGING NUMBER
YEAR
* retcode. "TR280598 B40K011880
L_RCODE. "TR280598 B40K011880
* check retcode = 0. "TR280598 B40K011880
IF L_RCODE NE 0. "TR280598 B40K011880
P_RCODE = 2013. "TR280598 B40K011880
P_MSGV1 = 'GET_NEXT_NUMBER (object)'. "#EC NOTEXT
"TR280598 B40K011880
P_MSGV2 = TYPE. "TR280598 B40K011880
P_MSGV3 = SPACE. "TR280598 B40K011880
P_MSGV4 = SPACE. "TR280598 B40K011880
EXIT. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
* Insert
REFRESH NOTE_OBJHEAD.
REFRESH NOTE_OBJPARA.
REFRESH NOTE_OBJPARB.
MOVE: TYPE TO OBJECT_ID-OBJTP,
YEAR TO OBJECT_ID-OBJYR,
NUMBER TO OBJECT_ID-OBJNO.
PERFORM SOCX_INSERT(SAPFSSO0) TABLES NOTE_OBJHEAD
TEXT
NOTE_OBJPARA
NOTE_OBJPARB
USING OBJECT_ID
* retcode. "TR280598 B40K011880
L_RCODE. "TR280598 B40K011880
IF L_RCODE NE 0. "TR280598 B40K011880
P_RCODE = 2648. "TR280598 B40K011880
P_MSGV1 = SPACE. "TR280598 B40K011880
P_MSGV2 = SPACE. "TR280598 B40K011880
P_MSGV3 = SPACE. "TR280598 B40K011880
P_MSGV4 = SPACE. "TR280598 B40K011880
EXIT. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
ENDFORM.
FORM DELETE_NOTE USING TYPE
YEAR
NUMBER
CHANGING RETURNCODE.
DATA: OBJECT_ID LIKE SOODK,
DBCNT LIKE SY-DBCNT.
OBJECT_ID-OBJTP = TYPE.
OBJECT_ID-OBJYR = YEAR.
OBJECT_ID-OBJNO = NUMBER.
IF NOT OBJECT_ID IS INITIAL.
PERFORM SOCX_DELETE(SAPFSSO0) USING OBJECT_ID
DBCNT
RETURNCODE.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form INIT_MESSAGE_OBJECT
*&---------------------------------------------------------------------*
* Initialize message object e.g. after FIND / Create
*----------------------------------------------------------------------*
FORM INIT_MESSAGE_OBJECT.
* Clear old attributes
REFRESH OBJECT-RECIPIENTS.
REFRESH OBJECT-APPLOBJECTIDS.
REFRESH OBJECT-PRIVATE-CHANGED_OBJECTS.
CLEAR OBJECT-OUTBOXFLAG.
CLEAR OBJECT-ASYNCHRON.
CLEAR OBJECT-NEXTSENDER.
CLEAR OBJECT-GENERALNOTETYPE.
CLEAR OBJECT-GENERALNOTEYEAR.
CLEAR OBJECT-GENERALNOTENUMBER.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR270598 B40K011880
CLEAR OBJECT-LINKFOLDERTYPE.
CLEAR OBJECT-LINKFOLDERYEAR.
CLEAR OBJECT-LINKFOLDERNUMBER.
* Clear changed flag
* clear object-private-changed. "TR020698 B40K011880
* Clear SOMG key
CLEAR OBJECT-PRIVATE-SOMG_KEY.
* Clear flag that persistence is checked
CLEAR OBJECT-PRIVATE-PERSIST_CHECKED. "TR100798
* Clear flags that signal changes on document attributes
CLEAR OBJECT-PRIVATE-DOC_CHANGED.
PERFORM CLEAR_DOC_FLAGS.
ENDFORM. " INIT_MESSAGE_OBJECT
*&---------------------------------------------------------------------*
*& Form MODIFY_ABAP_MEMORY
*&---------------------------------------------------------------------*
* Increase enqueue counter for this object.
* Set global changed flag.
*----------------------------------------------------------------------*
FORM MODIFY_ABAP_MEMORY USING SOMG_KEY
CHANGING RCODE.
DATA: BEGIN OF ENQUEUE_TAB OCCURS 1,
SOMG_KEY LIKE SOMGK,
COUNTER LIKE SY-TABIX,
CHANGED LIKE SONV-FLAG,
END OF ENQUEUE_TAB.
DATA: ABAP_MEM_ID(32).
* Get data from ABAP memory.
CONCATENATE '$$%MESSAGE&RISCHAR' SY-UNAME INTO ABAP_MEM_ID.
IMPORT ENQUEUE_TAB FROM MEMORY ID ABAP_MEM_ID.
IF SY-SUBRC = 0.
READ TABLE ENQUEUE_TAB WITH KEY SOMG_KEY = SOMG_KEY
BINARY SEARCH.
IF SY-SUBRC NE 0.
ENQUEUE_TAB-SOMG_KEY = SOMG_KEY.
ENQUEUE_TAB-COUNTER = 1.
ENQUEUE_TAB-CHANGED = 'X'.
INSERT ENQUEUE_TAB INDEX SY-TABIX.
ELSE.
ADD 1 TO ENQUEUE_TAB-COUNTER.
ENQUEUE_TAB-CHANGED = 'X'.
MODIFY ENQUEUE_TAB INDEX SY-TABIX.
ENDIF.
ELSE.
CLEAR ENQUEUE_TAB.
REFRESH ENQUEUE_TAB.
ENQUEUE_TAB-SOMG_KEY = SOMG_KEY.
ENQUEUE_TAB-COUNTER = 1.
ENQUEUE_TAB-CHANGED = 'X'.
APPEND ENQUEUE_TAB.
ENDIF.
* Export to memory
EXPORT ENQUEUE_TAB TO MEMORY ID ABAP_MEM_ID.
ENDFORM. " MODIFY_ABAP_MEMORY
*&---------------------------------------------------------------------*
*& Form DEQUEUE_ALL
*&---------------------------------------------------------------------*
* Dequeue all message objects, but only if unchanged.
* Modify ABAP memory.
*----------------------------------------------------------------------*
FORM DEQUEUE_ALL.
DATA: BEGIN OF ENQUEUE_TAB OCCURS 1,
SOMG_KEY LIKE SOMGK,
COUNTER LIKE SY-TABIX,
CHANGED LIKE SONV-FLAG,
END OF ENQUEUE_TAB.
DATA: ABAP_MEM_ID(32),
LIN LIKE SY-TABIX.
* Get data from ABAP memory.
CONCATENATE '$$%MESSAGE&RISCHAR' SY-UNAME INTO ABAP_MEM_ID.
IMPORT ENQUEUE_TAB FROM MEMORY ID ABAP_MEM_ID.
IF SY-SUBRC = 0.
LOOP AT ENQUEUE_TAB.
CHECK ENQUEUE_TAB-CHANGED = SPACE.
DO ENQUEUE_TAB-COUNTER TIMES.
CALL FUNCTION 'DEQUEUE_ESOMG'
EXPORTING
MODE_SOMG = 'E'
MANDT = SY-MANDT
OBJTP = ENQUEUE_TAB-SOMG_KEY-OBJTP
OBJYR = ENQUEUE_TAB-SOMG_KEY-OBJYR
OBJNO = ENQUEUE_TAB-SOMG_KEY-OBJNO
_SCOPE = '1'
_SYNCHRON = 'X'
EXCEPTIONS
OTHERS = 1.
ENDDO.
DELETE ENQUEUE_TAB.
ENDLOOP.
ELSE.
* Nothing to do
EXIT.
ENDIF.
* Modify ABAP memory
DESCRIBE TABLE ENQUEUE_TAB LINES LIN.
IF LIN > 0.
EXPORT ENQUEUE_TAB TO MEMORY ID ABAP_MEM_ID.
ELSE.
FREE MEMORY ID ABAP_MEM_ID.
ENDIF.
ENDFORM. " DEQUEUE_ALL
*&---------------------------------------------------------------------*
*& Form CALL_DEQUEUE_MODULE_ONCE
*&---------------------------------------------------------------------*
* Make one call of DEQUEUE function module for this object
* No regard to global enqueue counter and changed flag
*----------------------------------------------------------------------*
FORM CALL_DEQUEUE_MODULE_ONCE USING SOMG_KEY LIKE SOMGK.
* Dequeue this MESSAGE object
CALL FUNCTION 'DEQUEUE_ESOMG'
EXPORTING
MODE_SOMG = 'E'
MANDT = SY-MANDT
OBJTP = SOMG_KEY-OBJTP
OBJYR = SOMG_KEY-OBJYR
OBJNO = SOMG_KEY-OBJNO
_SCOPE = '1' "TR020798 Basis99
_SYNCHRON = 'X'
EXCEPTIONS
OTHERS = 1.
ENDFORM. " CALL_DEQUEUE_MODULE_ONCE
*&---------------------------------------------------------------------*
*& Form CLEAR_GLOBAL_CHANGED_FLAG
*&---------------------------------------------------------------------*
* Clear global changed flag for given SOMG key
*----------------------------------------------------------------------*
FORM CLEAR_GLOBAL_CHANGED_FLAG USING SOMG_KEY.
DATA: BEGIN OF ENQUEUE_TAB OCCURS 1,
SOMG_KEY LIKE SOMGK,
COUNTER LIKE SY-TABIX,
CHANGED LIKE SONV-FLAG,
END OF ENQUEUE_TAB.
DATA: ABAP_MEM_ID(32).
* Get data from ABAP memory.
CONCATENATE '$$%MESSAGE&RISCHAR' SY-UNAME INTO ABAP_MEM_ID.
IMPORT ENQUEUE_TAB FROM MEMORY ID ABAP_MEM_ID.
IF SY-SUBRC = 0.
READ TABLE ENQUEUE_TAB WITH KEY SOMG_KEY = SOMG_KEY
BINARY SEARCH.
IF SY-SUBRC NE 0.
* * Nothing to do
EXIT.
ELSE.
ENQUEUE_TAB-CHANGED = SPACE.
MODIFY ENQUEUE_TAB INDEX SY-TABIX.
ENDIF.
ELSE.
* * Nothing to do
EXIT.
ENDIF.
* Export to memory
EXPORT ENQUEUE_TAB TO MEMORY ID ABAP_MEM_ID.
ENDFORM. " CLEAR_GLOBAL_CHANGED_FLAG
*&---------------------------------------------------------------------*
*& Form GET_SOOS1_FROM_RECIPIENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_RECIPIENT text
* <--P_RECEIVERS text
* <--P_FATAL_ERROR text
* <--P_ATTRIBUTE_ERROR text
*----------------------------------------------------------------------*
FORM GET_SOOS1_FROM_RECIPIENT USING P_RECIPIENT TYPE SWC_OBJECT
CHANGING SOOS1_STRUCT LIKE SOOS1
P_FATAL_ERROR
P_ATTRIBUTE_ERROR.
DATA:
KEY LIKE SWOTOBJID-OBJKEY,
RECIPIENT_ERROR LIKE SONV-FLAG,
DUMMY_RECIPIENT LIKE SONV-FLAG.
DATA: BEGIN OF RECIPIENT_KEY,
IDTYPE LIKE SOOS-RECTP,
IDYEAR LIKE SOOS-RECYR,
IDNUMBER LIKE SOOS-RECNO,
SENDTYPE LIKE SOOS-SNDART,
SEQUENCENUMBER LIKE SOES-LFDNR,
EXTIDYEAR LIKE SOMG-OBJYR,
EXTIDNUMBER LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
SWC_GET_OBJECT_KEY P_RECIPIENT KEY.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
P_FATAL_ERROR = 'X'.
ENDIF.
* * fill actual recipient
CLEAR SOOS1_STRUCT.
MOVE KEY TO RECIPIENT_KEY.
* * check for dummy recipient
IF RECIPIENT_KEY-SENDTYPE = '$$$'.
DUMMY_RECIPIENT = 'X'.
SOOS1_STRUCT-REC_FIX = 'X'.
ENDIF.
* * key data
clear soos1_struct-recesc. "note 206663
if recipient_key-idtype = 'ORG' "note 206663
and recipient_key-idyear = 'US'. "note 206663
* * Special case: org unit US... "note 206663
* * Convert to user "note 206663
soos1_struct-recnam = recipient_key-idnumber. "note 206663
soos1_struct-recesc = 'B'. "note 206663
elseif recipient_key-idtype = 'ORG'. "note 206663
MOVE: RECIPIENT_KEY-IDTYPE TO SOOS1_STRUCT-RECTP, "
recipient_key-idyear to soos1_struct-recnam, "
recipient_key-idnumber to soos1_struct-recnam+2. "
SOOS1_STRUCT-RECESC = 'H'. "send screen only knows 'H' "note 206663
else. "
MOVE: RECIPIENT_KEY-IDTYPE TO SOOS1_STRUCT-RECTP,
RECIPIENT_KEY-IDYEAR TO SOOS1_STRUCT-RECYR,
RECIPIENT_KEY-IDNUMBER TO SOOS1_STRUCT-RECNO,
RECIPIENT_KEY-SENDTYPE TO SOOS1_STRUCT-SNDART,
RECIPIENT_KEY-SEQUENCENUMBER TO SOOS1_STRUCT-LFDNR.
endif. "note 206663
* Get address name (just for better performance)
SWC_GET_PROPERTY P_RECIPIENT 'Name' SOOS1_STRUCT-ADR_NAME.
IF SY-SUBRC NE 0.
CLEAR SOOS1_STRUCT-ADR_NAME.
ENDIF.
* Get escape flag (need it necessaryly for DLIs) "von Sigo aus B4R
if soos1_struct-recesc = space. "note 206663
SWC_GET_PROPERTY P_RECIPIENT 'TypeId' SOOS1_STRUCT-RECESC.
IF SY-SUBRC NE 0.
CLEAR SOOS1_STRUCT-RECESC.
ENDIF.
endif. "note 206663
* Fill send attributes
* SendExpress
SWC_GET_PROPERTY P_RECIPIENT 'SendExpress' SOOS1_STRUCT-SNDEX.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* SendAsACopy
SWC_GET_PROPERTY P_RECIPIENT 'SendAsACopy' SOOS1_STRUCT-SNDCP.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* BlindCopy
SWC_GET_PROPERTY P_RECIPIENT 'BlindCopy' SOOS1_STRUCT-SNDBC.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* NoForwarding
SWC_GET_PROPERTY P_RECIPIENT 'NoForwarding' SOOS1_STRUCT-FORFB.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* NoPrinting
SWC_GET_PROPERTY P_RECIPIENT 'NoPrinting' SOOS1_STRUCT-PRIFB.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* SendPriority
SWC_GET_PROPERTY P_RECIPIENT 'SendPriority' SOOS1_STRUCT-SNDPRI.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* ToDoByAllRecipients
SWC_GET_PROPERTY P_RECIPIENT 'ToDoByAllRecipients' SOOS1_STRUCT-ACALL.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* ToDoByOne
SWC_GET_PROPERTY P_RECIPIENT 'ToDoByOne' SOOS1_STRUCT-ACONE.
IF SY-SUBRC NE 0.
* Dequeue (if sensible)
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* ReplyRequired
SWC_GET_PROPERTY P_RECIPIENT 'ReplyRequired' SOOS1_STRUCT-OBJRR.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* Deliver
SWC_GET_PROPERTY P_RECIPIENT 'Deliver' SOOS1_STRUCT-DELIVER.
IF SY-SUBRC NE 0.
SOOS1_STRUCT-DELIVER = 'X'. " it's default
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* NotDeliver
SWC_GET_PROPERTY P_RECIPIENT 'NotDeliver' SOOS1_STRUCT-NOT_DELI.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* Read
SWC_GET_PROPERTY P_RECIPIENT 'Read' SOOS1_STRUCT-READ.
IF SY-SUBRC NE 0.
SOOS1_STRUCT-READ = 'X'. " it's default
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* Resend
SWC_GET_PROPERTY P_RECIPIENT 'Resend' SOOS1_STRUCT-RESEND.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* StatusInfoByMail
SWC_GET_PROPERTY P_RECIPIENT
'StatusInfoByMail' SOOS1_STRUCT-MAILSTATUS.
IF SY-SUBRC NE 0.
SOOS1_STRUCT-MAILSTATUS = 'E'.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* NoReply
SWC_GET_PROPERTY P_RECIPIENT
'NoReply' SOOS1_STRUCT-OBJRN.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than send attribute
ENDIF.
* * Note
SWC_GET_PROPERTY P_RECIPIENT 'NoteType' SOOS1_STRUCT-NOTTP.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than personal note
ELSEIF NOT SOOS1_STRUCT-NOTTP IS INITIAL.
SWC_GET_PROPERTY P_RECIPIENT 'NoteYear' SOOS1_STRUCT-NOTYR.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than personal note
ENDIF.
SWC_GET_PROPERTY P_RECIPIENT 'NoteNumber' SOOS1_STRUCT-NOTNO.
IF SY-SUBRC NE 0.
RECIPIENT_ERROR = 'X'. "Don't cancel, address is more important
"than personal note
ENDIF.
ENDIF.
ENDFORM. " GET_SOOS1_FROM_RECIPIENT
*&---------------------------------------------------------------------*
*& Form PREPARE_DATA_FOR_SEND_SCREEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_DATA_FOR_SEND_SCREEN
TABLES OBJECTS STRUCTURE SOOD4
RECEIVERS STRUCTURE SOOS1
NOTE_TEXT STRUCTURE SOLI
P_EXCL_FCODE STRUCTURE SOXET
content structure soli
header structure soli
USING VALUE(DISPLAY_MODE)
value(cfn)
value(editor_settings)
CHANGING ch_dat
ch_tim
LINK_FOLDER_ID LIKE SOODK
FATAL_ERROR.
DATA:
SOOD_DATA LIKE SOODD,
RECIPIENT TYPE SWC_OBJECT,
RECEIVERS_OLD LIKE SOOS1 OCCURS 0 WITH HEADER LINE,
FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
FORWARDER LIKE SOUD-USRNAM,
NOTE_OBJHEAD LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_TEXT_OLD LIKE SOLI OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARA LIKE SELC OCCURS 0 WITH HEADER LINE,
NOTE_OBJPARB LIKE SOOP1 OCCURS 0 WITH HEADER LINE,
ATTRIBUTE_ERROR LIKE SONV-FLAG,
RCODE LIKE SY-SUBRC,
TABIX_TABLE LIKE SY-TABIX OCCURS 1,
* exclude_fcode like soxet occurs 0 with header line,
DUMMY_RECIPIENT LIKE SONV-FLAG.
DATA: LIN LIKE SY-TABIX. "TR280598 B40K011880
DATA: FILTER LIKE SOFOR,
l_OBJECT_HD_DISPLAY like SOOD2.
data hex_mode like sonv-flag. "TR UNICODE 5.0A
* Init
REFRESH RECEIVERS.
* Look at binded recipients
LOOP AT OBJECT-RECIPIENTS INTO RECIPIENT.
* * Fill corresponding soos1 structure
PERFORM GET_SOOS1_FROM_RECIPIENT USING RECIPIENT
CHANGING RECEIVERS
FATAL_ERROR
ATTRIBUTE_ERROR.
* * Error handling
IF FATAL_ERROR = 'X'.
EXIT. "Form
ENDIF.
IF ATTRIBUTE_ERROR = 'X'.
* * Do nothing, address is more important
ENDIF.
* * Make receiver unchangeable when display mode is on
IF DISPLAY_MODE = 'X'.
RECEIVERS-REC_FIX = 'X'.
RECEIVERS-ATT_FIX = 'X'.
ENDIF.
* Append soos1 structure to receivers
APPEND RECEIVERS.
ENDLOOP.
* if sy-subrc ne 0.
* There is not any receiver yet.
* But it's no error because you can input one
* endif.
* Split Message-Id (= SOFM-Id) into folder-id, object-id, forwarder name
MOVE: OBJECT-KEY-FOLDERTYPE TO FOLDER_ID-OBJTP,
OBJECT-KEY-FOLDERYEAR TO FOLDER_ID-OBJYR,
OBJECT-KEY-FOLDERNUMBER TO FOLDER_ID-OBJNO,
OBJECT-KEY-TYPE TO OBJECT_ID-OBJTP,
OBJECT-KEY-YEAR TO OBJECT_ID-OBJYR,
OBJECT-KEY-NUMBER TO OBJECT_ID-OBJNO,
OBJECT-KEY-FORWARDERNAME TO FORWARDER.
* Fill folder for (additional) link
LINK_FOLDER_ID-OBJTP = OBJECT-LINKFOLDERTYPE.
LINK_FOLDER_ID-OBJYR = OBJECT-LINKFOLDERYEAR.
LINK_FOLDER_ID-OBJNO = OBJECT-LINKFOLDERNUMBER.
** Save a copy of receivers
* receivers_old[] = receivers[].
* Fill object (document) data
CLEAR OBJECTS.
REFRESH OBJECTS.
IF NOT OBJECT-KEY-TYPE IS INITIAL
AND NOT OBJECT-KEY-YEAR IS INITIAL
AND NOT OBJECT-KEY-NUMBER IS INITIAL.
MOVE: OBJECT-KEY-FOLDERTYPE TO OBJECTS-FOLTP,
OBJECT-KEY-FOLDERYEAR TO OBJECTS-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO OBJECTS-FOLNO,
OBJECT-KEY-TYPE TO OBJECTS-OBJTP,
OBJECT-KEY-YEAR TO OBJECTS-OBJYR,
OBJECT-KEY-NUMBER TO OBJECTS-OBJNO,
OBJECT-KEY-FORWARDERNAME TO OBJECTS-FORNAM.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
* Get description and name of document and other document attributes
* PERFORM SOOD_SELECT(SAPFSSO0) USING OBJECT_ID
* SOOD_DATA
* RCODE.
FOLDER_ID-OBJTP = OBJECT-KEY-FOLDERTYPE.
FOLDER_ID-OBJYR = OBJECT-KEY-FOLDERYEAR.
FOLDER_ID-OBJNO = OBJECT-KEY-FOLDERNUMBER.
OBJECT_ID-OBJTP = OBJECT-KEY-TYPE.
OBJECT_ID-OBJYR = OBJECT-KEY-YEAR.
OBJECT_ID-OBJNO = OBJECT-KEY-NUMBER.
* * Get date/time of last change
FILTER-SNDI = SPACE. "No send information
if editor_settings = 'D'.
if OBJECT-PRIVATE-OBJCONT_CHANGED = space.
FILTER-NOCONT = space. "Get content
else.
FILTER-NOCONT = 'X'. "No content
content[] = object-private-objcont[].
endif.
else.
FILTER-NOCONT = 'X'. "No content
endif.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
FILTER = FILTER
FOLDER_ID = FOLDER_ID
OBJECT_ID = OBJECT_ID
IMPORTING
OBJECT_HD_DISPLAY = l_OBJECT_HD_DISPLAY
TABLES
objcont = content
objhead = header
EXCEPTIONS
OTHERS = 15
.
IF SY-SUBRC <> 0.
fatal_error = 'X'.
exit.
ENDIF.
* * Get content from KPro (if necessary)
if FILTER-NOCONT = space
and L_OBJECT_HD_DISPLAY-EXTCT = 'K'.
CALL FUNCTION 'SO_CONTENT_FROM_KPRO_GET'
* IMPORTING
* FILESIZE =
TABLES
OBJCONT = CONTENT
EXCEPTIONS
KPRO_MODEL_ERROR = 1
KPRO_INCONSISTENCY = 2
X_ERROR = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
fatal_error = 'X'.
exit.
ENDIF.
ENDIF.
OBJECTS-OBJDES = l_OBJECT_HD_DISPLAY-OBJDES.
OBJECTS-OBJNAM = l_OBJECT_HD_DISPLAY-OBJNAM.
ch_dat = l_OBJECT_HD_DISPLAY-chdat.
ch_tim = l_OBJECT_HD_DISPLAY-chtim.
APPEND OBJECTS.
ENDIF.
* Fill note text (for editing on send screen)
if editor_settings ne 'D'. "TR160799 4.6c
DESCRIBE TABLE OBJECT-PRIVATE-GENERAL_NOTE "TR280598 B40K011880
LINES LIN. "TR280598 B40K011880
IF LIN = 0. "TR280598 B40K011880
REFRESH NOTE_TEXT.
REFRESH NOTE_OBJHEAD.
REFRESH NOTE_OBJPARA.
REFRESH NOTE_OBJPARB.
IF NOT OBJECT-GENERALNOTENUMBER IS INITIAL.
* * Fill object id
OBJECT_ID-OBJTP = OBJECT-GENERALNOTETYPE.
OBJECT_ID-OBJYR = OBJECT-GENERALNOTEYEAR.
OBJECT_ID-OBJNO = OBJECT-GENERALNOTENUMBER.
PERFORM SOCX_SELECT(SAPFSSO0) TABLES NOTE_OBJHEAD
NOTE_TEXT
NOTE_OBJPARA
NOTE_OBJPARB
USING OBJECT_ID
hex_mode
RCODE.
IF RCODE NE 0.
REFRESH NOTE_TEXT.
ENDIF.
ENDIF.
ELSE. "TR280598 B40K011880
NOTE_TEXT[] = OBJECT-PRIVATE-GENERAL_NOTE[]. "TR280598 B40K011880
ENDIF. "TR280598 B40K011880
endif. "TR160799 4.6c
** OKCodes I want to deal myself
* REFRESH FCODE.
* FCODE = 'BAC'.
* APPEND FCODE.
* FCODE = 'SEND'.
* APPEND FCODE.
* Keep old note text in mind
NOTE_TEXT_OLD[] = NOTE_TEXT[].
* At least one dummy recipient?
IF DUMMY_RECIPIENT = 'X'
OR DISPLAY_MODE = 'X'.
P_EXCL_FCODE = 'SEND'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'RECG'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'USLI'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DLLI'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'USEX'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'USAD'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'ORG'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DX50'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'AWRC'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DOBJ'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DFAX'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DUNX'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DX40'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DRML'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DTLX'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'RERE'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DLCR'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'DLRS'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EINB'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EOUT'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EFPR'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EFPU'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EMRP'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'EWSP'.
APPEND P_EXCL_FCODE.
P_EXCL_FCODE = 'ELIN'.
APPEND P_EXCL_FCODE.
SORT P_EXCL_FCODE.
DELETE ADJACENT DUPLICATES FROM P_EXCL_FCODE.
ENDIF.
ENDFORM. " PREPARE_DATA_FOR_SEND_SCREEN
*&---------------------------------------------------------------------*
*& Form CREATE_LINK_TO_DARK_FOLDER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_DARK_SOFM_ID text
* <--P_RCODE text
*----------------------------------------------------------------------*
FORM CREATE_LINK_TO_DARK_FOLDER
CHANGING P_DARK_SOFM_ID LIKE SOFMK
P_RCODE.
DATA: FOLDER_REGION LIKE SOFD-FOLRG,
DARK_FOLDER_ID LIKE SOODK,
OBJECT_ID LIKE SOODK,
OLD_PARENT LIKE SOODK.
* Init
CLEAR P_DARK_SOFM_ID.
* Get ID of dark folder
MOVE 'B' TO FOLDER_REGION.
CALL FUNCTION 'SO_FOLDER_ROOT_ID_GET'
EXPORTING
REGION = FOLDER_REGION
IMPORTING
FOLDER_ID = DARK_FOLDER_ID
EXCEPTIONS
COMMUNICATION_FAILURE = 1
OWNER_NOT_EXIST = 2
SYSTEM_FAILURE = 3
OTHERS = 4.
P_RCODE = SY-SUBRC.
CHECK P_RCODE = 0.
* Check if this message object is in dark folder
IF OBJECT-KEY-FOLDERTYPE NE DARK_FOLDER_ID-OBJTP
OR OBJECT-KEY-FOLDERYEAR NE DARK_FOLDER_ID-OBJYR
OR OBJECT-KEY-FOLDERNUMBER NE DARK_FOLDER_ID-OBJNO.
* * Create additional link into dark folder
MOVE: OBJECT-KEY-TYPE TO OBJECT_ID-OBJTP,
OBJECT-KEY-YEAR TO OBJECT_ID-OBJYR,
OBJECT-KEY-NUMBER TO OBJECT_ID-OBJNO.
MOVE: OBJECT-KEY-FOLDERTYPE TO OLD_PARENT-OBJTP,
OBJECT-KEY-FOLDERYEAR TO OLD_PARENT-OBJYR,
OBJECT-KEY-FOLDERNUMBER TO OLD_PARENT-OBJNO.
CALL FUNCTION 'SO_DOCUMENT_LINK'
EXPORTING
NEW_PARENT = DARK_FOLDER_ID
OBJECT_ID = OBJECT_ID
OLD_PARENT = OLD_PARENT
EXCEPTIONS
NEW_FOLDER_NOT_EXIST = 1
OBJECT_ALREADY_IN_FOLDER = 2
OBJECT_NOT_EXIST = 3
OLD_FOLDER_NOT_EXIST = 4
OPERATION_NO_AUTHORIZATION = 5
PARAMETER_ERROR = 6
X_ERROR = 7
OTHERS = 8.
P_RCODE = SY-SUBRC.
CASE P_RCODE.
WHEN 0.
* * Just go on
WHEN 2.
* * Just go on
WHEN OTHERS.
EXIT.
ENDCASE.
MOVE: DARK_FOLDER_ID-OBJTP TO P_DARK_SOFM_ID-FOLTP,
DARK_FOLDER_ID-OBJYR TO P_DARK_SOFM_ID-FOLYR,
DARK_FOLDER_ID-OBJNO TO P_DARK_SOFM_ID-FOLNO.
MOVE: OBJECT-KEY-TYPE TO P_DARK_SOFM_ID-DOCTP,
OBJECT-KEY-YEAR TO P_DARK_SOFM_ID-DOCYR,
OBJECT-KEY-NUMBER TO P_DARK_SOFM_ID-DOCNO.
ENDIF.
ENDFORM. " CREATE_LINK_TO_DARK_FOLDER
**&---------------------------------
**------------------------------------*
**& Form CHECK_IF_PERSISTENT
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** <--P_NOT_PERSISTENT text
**----------------------------------
**------------------------------------*
*FORM CHECK_IF_PERSISTENT CHANGING P_NOT_PERSISTENT
* P_SOMG_DATA LIKE SOMGD.
*
*DATA:
** sofm_key like sofmk,
* OFFICE_ID LIKE SOUDK,
* SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
* RCODE LIKE SY-SUBRC.
*
*IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL "TR100798
*AND OBJECT-PRIVATE-PERSIST_CHECKED = SPACE. "TR100798
*
** Check if object is persistent
* MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
* OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
* OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
* OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
* OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
* OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
* PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
* USING OBJECT-KEY-FORWARDERNAME
* CHANGING OFFICE_ID
* RCODE.
** IF RCODE NE 0.
** SUBRC = '2013'.
** MSGV1 = 'SOFM-Key'.
** MSGV2 = OBJECT-KEY-FORWARDERNAME.
** MSGV3 = SPACE.
** MSGV4 = SPACE.
** ENDIF.
* MOVE: OFFICE_ID-USRTP TO P_SOFM_KEY-FORTP,
* OFFICE_ID-USRYR TO P_SOFM_KEY-FORYR,
* OFFICE_ID-USRNO TO P_SOFM_KEY-FORNO.
* P_NOT_PERSISTENT = 'X'.
* REFRESH SOMG_TAB.
* PERFORM SOMG_SELMSG(SAPFSSO5) TABLES SOMG_TAB
* USING P_SOFM_KEY
* CHANGING RCODE.
* IF RCODE = 0.
* LOOP AT SOMG_TAB
* WHERE OBJTP = 'MSG'.
* MOVE-CORRESPONDING SOMG_TAB TO OBJECT-PRIVATE-SOMG_KEY.
* MOVE-CORRESPONDING SOMG_TAB TO P_SOMG_DATA.
* P_NOT_PERSISTENT = SPACE.
* EXIT.
* ENDLOOP.
* ENDIF.
* OBJECT-PRIVATE-PERSIST_CHECKED = 'X'.
*ELSE. "TR100798
* IF OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
** * This is only possible if persist_checked = 'X'
** * That means it is already checked that object is not persistent
* P_NOT_PERSISTENT = 'X'.
* ELSE.
** * SOMG_KEY is filled => object is persistent
* P_NOT_PERSISTENT = SPACE.
* ENDIF.
*ENDIF. "TR100798
*
*ENDFORM. " CHECK_IF_PERSISTENT
*
**&---------------------------------
**------------------------------------*
**& Form REFRESH_FROM_DATABASE
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** --> p1 text
** <-- p2 text
**----------------------------------
**------------------------------------*
*FORM REFRESH_FROM_DATABASE USING VALUE(P_MESSAGE_DATA) LIKE SOMGD.
*
** Refresh only if message object is persistent
* CHECK NOT OBJECT-PRIVATE-SOMG_KEY IS INITIAL.
*
** Get message attributes
* CHECK NOT P_MESSAGE_DATA IS INITIAL.
*
** Recipient list
* REFRESH OBJECT-RECIPIENTS.
* REFRESH SOMG_TAB.
* MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
* OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
* OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
* OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
* OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
* OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
* PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
* USING OBJECT-KEY-FORWARDERNAME
* CHANGING OFFICE_ID
* RCODE.
* IF RCODE NE 0.
* SUBRC = '2013'.
* MSGV1 = 'SOFM-Key'.
* MSGV2 = OBJECT-KEY-FORWARDERNAME.
* MSGV3 = SPACE.
* MSGV4 = SPACE.
* ENDIF.
* MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
* OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
* OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
* PERFORM SOMG_SELRCP(SAPFSSO5) TABLES SOMG_TAB
* USING SOFM_KEY
* CHANGING RCODE.
* IF RCODE = 0.
* LOOP AT SOMG_TAB WHERE OBJTP = 'RCP'.
* MOVE-CORRESPONDING SOMG_TAB TO RECIPIENT_KEY.
* CLEAR OBJECT_KEY.
* MOVE RECIPIENT_KEY TO OBJECT_KEY.
* SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
* IF SY-SUBRC = 0.
* APPEND HANDLE TO OBJECT-RECIPIENTS.
* ENDIF.
* ENDLOOP.
* ENDIF.
* OBJECT-LINKFOLDERTYPE = SOMG_DATA-ARC_FOLTP.
* OBJECT-LINKFOLDERYEAR = SOMG_DATA-ARC_FOLYR.
* OBJECT-LINKFOLDERNUMBER = SOMG_DATA-ARC_FOLNO.
** General note
* OBJECT-GENERALNOTETYPE = SOMG_DATA-GEN_NOTTP.
* OBJECT-GENERALNOTEYEAR = SOMG_DATA-GEN_NOTYR.
* OBJECT-GENERALNOTENUMBER = SOMG_DATA-GEN_NOTNO.
* REFRESH OBJECT-PRIVATE-GENERAL_NOTE. "TR020698 B40K012112
** Synchronical sending
* OBJECT-ASYNCHRON = SOMG_DATA-ASYNCHRON.
** Next Sender
* OBJECT-NEXTSENDER = SOMG_DATA-SENDER.
** Outbox flag
* OBJECT-OUTBOXFLAG = SOMG_DATA-OUTBOX.
*
*ENDFORM. " REFRESH_FROM_DATABASE
*&---------------------------------------------------------------------*
*& Form GET_MESSAGE_SOMG_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_SOMG_DATA text
* <--P_SOFM_KEY text
* <--P_NOT_PERSISTENT text
*----------------------------------------------------------------------*
FORM GET_MESSAGE_SOMG_DATA CHANGING SOMG_DATA LIKE SOMGD
SOFM_KEY LIKE SOFMK
NOT_PERSISTENT.
DATA: OFFICE_ID LIKE SOUDK,
RCODE LIKE SY-SUBRC,
SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE.
* Check if object is persistent
MOVE: OBJECT-KEY-FOLDERTYPE TO SOFM_KEY-FOLTP,
OBJECT-KEY-FOLDERYEAR TO SOFM_KEY-FOLYR,
OBJECT-KEY-FOLDERNUMBER TO SOFM_KEY-FOLNO,
OBJECT-KEY-TYPE TO SOFM_KEY-DOCTP,
OBJECT-KEY-YEAR TO SOFM_KEY-DOCYR,
OBJECT-KEY-NUMBER TO SOFM_KEY-DOCNO.
PERFORM CONVERT_SAPNAM_TO_OFFICE_ID
USING OBJECT-KEY-FORWARDERNAME
CHANGING OFFICE_ID
RCODE.
IF RCODE NE 0.
* SUBRC = '2013'.
* MSGV1 = 'SOFM-Key'.
* MSGV2 = OBJECT-KEY-FORWARDERNAME.
* MSGV3 = SPACE.
* MSGV4 = SPACE.
ENDIF.
MOVE: OFFICE_ID-USRTP TO SOFM_KEY-FORTP,
OFFICE_ID-USRYR TO SOFM_KEY-FORYR,
OFFICE_ID-USRNO TO SOFM_KEY-FORNO.
NOT_PERSISTENT = 'X'.
REFRESH SOMG_TAB.
PERFORM SOMG_SELMSG(SAPFSSO5) TABLES SOMG_TAB
USING SOFM_KEY
CHANGING RCODE.
IF RCODE = 0.
LOOP AT SOMG_TAB
WHERE OBJTP = 'MSG'.
MOVE-CORRESPONDING SOMG_TAB TO OBJECT-PRIVATE-SOMG_KEY.
MOVE-CORRESPONDING SOMG_TAB TO SOMG_DATA.
NOT_PERSISTENT = SPACE.
EXIT.
ENDLOOP.
ENDIF.
OBJECT-PRIVATE-PERSIST_CHECKED = 'X'.
ENDFORM. " GET_MESSAGE_SOMG_DATA
**&---------------------------------
**------------------------------------*
**& Form REFRESH_RECIPIENTS
**&---------------------------------
**------------------------------------*
** text
**----------------------------------
**------------------------------------*
** -->P_SOFM_KEY text
**----------------------------------
**------------------------------------*
*FORM GET_RECIPIENTS USING P_SOFM_KEY.
*
*DATA: RCODE LIKE SY-SUBRC,
* SOMG_TAB LIKE SOMG OCCURS 0 WITH HEADER LINE,
* HANDLE TYPE SWC_OBJECT,
* OBJECT_KEY LIKE SWOTOBJID-OBJKEY.
*DATA: BEGIN OF RECIPIENT_KEY,
* RCP_ID_TP LIKE SOMG-RCP_ID_TP,
* RCP_ID_YR LIKE SOMG-RCP_ID_YR,
* RCP_ID_NO LIKE SOMG-RCP_ID_NO,
* RCP_SND_TP LIKE SOMG-RCP_SND_TP,
* RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
* OBJYR LIKE SOMG-OBJYR,
* OBJNO LIKE SOMG-OBJNO,
* END OF RECIPIENT_KEY.
*
* PERFORM SOMG_SELRCP(SAPFSSO5) TABLES SOMG_TAB
* USING P_SOFM_KEY
* CHANGING RCODE.
* IF RCODE = 0.
* LOOP AT SOMG_TAB WHERE OBJTP = 'RCP'.
* MOVE-CORRESPONDING SOMG_TAB TO RECIPIENT_KEY.
* CLEAR OBJECT_KEY.
* MOVE RECIPIENT_KEY TO OBJECT_KEY.
* SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
* IF SY-SUBRC = 0.
* APPEND HANDLE TO OBJECT-RECIPIENTS.
* ENDIF.
* ENDLOOP.
* ENDIF.
*
*ENDFORM. " REFRESH_RECIPIENTS
*&---------------------------------------------------------------------*
*& Form FILL_OBJECT_FROM_SOMG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SOMG_DATA text
*----------------------------------------------------------------------*
FORM FILL_OBJECT_FROM_SOMG TABLES RECIPIENT_TAB STRUCTURE SOMG
USING SOMG_DATA LIKE SOMGD.
DATA: HANDLE TYPE SWC_OBJECT,
OBJECT_KEY LIKE SWOTOBJID-OBJKEY.
DATA: BEGIN OF RECIPIENT_KEY,
RCP_ID_TP LIKE SOMG-RCP_ID_TP,
RCP_ID_YR LIKE SOMG-RCP_ID_YR,
RCP_ID_NO LIKE SOMG-RCP_ID_NO,
RCP_SND_TP LIKE SOMG-RCP_SND_TP,
RCP_SEQ_NO LIKE SOMG-RCP_SEQ_NO,
OBJYR LIKE SOMG-OBJYR,
OBJNO LIKE SOMG-OBJNO,
END OF RECIPIENT_KEY.
* Folder for archiving
OBJECT-LINKFOLDERTYPE = SOMG_DATA-ARC_FOLTP.
OBJECT-LINKFOLDERYEAR = SOMG_DATA-ARC_FOLYR.
OBJECT-LINKFOLDERNUMBER = SOMG_DATA-ARC_FOLNO.
* General note
OBJECT-GENERALNOTETYPE = SOMG_DATA-GEN_NOTTP.
OBJECT-GENERALNOTEYEAR = SOMG_DATA-GEN_NOTYR.
OBJECT-GENERALNOTENUMBER = SOMG_DATA-GEN_NOTNO.
REFRESH OBJECT-PRIVATE-GENERAL_NOTE.
* Synchronical sending
OBJECT-ASYNCHRON = SOMG_DATA-ASYNCHRON.
* Next Sender
OBJECT-NEXTSENDER = SOMG_DATA-SENDER.
* Outbox flag
OBJECT-OUTBOXFLAG = SOMG_DATA-OUTBOX.
* Recipients
REFRESH OBJECT-RECIPIENTS.
LOOP AT RECIPIENT_TAB WHERE OBJTP = 'RCP'.
MOVE-CORRESPONDING RECIPIENT_TAB TO RECIPIENT_KEY.
CLEAR OBJECT_KEY.
MOVE RECIPIENT_KEY TO OBJECT_KEY.
SWC_CREATE_OBJECT HANDLE 'RECIPIENT' OBJECT_KEY.
IF SY-SUBRC = 0.
APPEND HANDLE TO OBJECT-RECIPIENTS.
ENDIF.
ENDLOOP.
ENDFORM. " FILL_OBJECT_FROM_SOMG

You might also like