14
***** Implementation of object type ZPO_BO905 ***** INCLUDE <OBJECT>. BEGIN_DATA OBJECT. " Do not change.. DATA is generated * only private members may be inserted into structure private DATA: " begin of private, " to declare private attributes remove comments and " insert private attributes here ... " end of private, BEGIN OF KEY, EBELN LIKE EKKO-EBELN, END OF KEY, NAME1 TYPE LFA1-NAME1, _EKKO LIKE EKKO. END_DATA OBJECT. " Do not change.. DATA is generated

Methods ZPO_BO905.docx

Embed Size (px)

DESCRIPTION

Oasis sample method

Citation preview

Page 1: Methods ZPO_BO905.docx

***** Implementation of object type ZPO_BO905 *****

INCLUDE <OBJECT>.

BEGIN_DATA OBJECT. " Do not change.. DATA is generated

* only private members may be inserted into structure private

DATA:

" begin of private,

" to declare private attributes remove comments and

" insert private attributes here ...

" end of private,

BEGIN OF KEY,

EBELN LIKE EKKO-EBELN,

END OF KEY,

NAME1 TYPE LFA1-NAME1,

_EKKO LIKE EKKO.

END_DATA OBJECT. " Do not change.. DATA is generated

Page 2: Methods ZPO_BO905.docx

BEGIN_METHOD DISPLAY_DOCUMENT CHANGING CONTAINER.

*Business logic

*Set the document number in first screen

SET PARAMETER ID 'BES' FIELD OBJECT-KEY-EBELN.

*Display PO

CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.

END_METHOD.

Page 3: Methods ZPO_BO905.docx

BEGIN_METHOD GET_OUTLOOK_EMAIL CHANGING CONTAINER.

*1.Data declaration

DATA:

APPROVER TYPE WFSYST-AGENT,

MANAGER TYPE WFSYST-AGENT,

EMAIL_MANAGER TYPE SZA5_D0700-SMTP_ADDR,

EMAIL_APPROVER TYPE SZA5_D0700-SMTP_ADDR.

*2.Get IMPORT Parameters

SWC_GET_ELEMENT CONTAINER 'APPROVER' APPROVER.

SWC_GET_ELEMENT CONTAINER 'MANAGER' MANAGER.

*3.Business logic

*Remove prefix 'US' from user ids

APPROVER = APPROVER+2(12).

MANAGER = MANAGER+2(12).

CALL FUNCTION 'EFG_GEN_GET_USER_EMAIL'

EXPORTING

I_UNAME = APPROVER

IMPORTING

E_EMAIL_ADDRESS = EMAIL_APPROVER.

CALL FUNCTION 'EFG_GEN_GET_USER_EMAIL'

EXPORTING

I_UNAME = MANAGER

IMPORTING

E_EMAIL_ADDRESS = EMAIL_MANAGER.

*4.Set EXPORT Parameters

Page 4: Methods ZPO_BO905.docx

SWC_SET_ELEMENT CONTAINER 'EMAIL_MANAGER' EMAIL_MANAGER.

SWC_SET_ELEMENT CONTAINER 'EMAIL_APPROVER' EMAIL_APPROVER.

END_METHOD.

BEGIN_METHOD UPDATE_DOCUMENT CHANGING CONTAINER.

*BDC Recording to update fields in a CHANGE(ME22) transaction

*OR

*Call BAPI to update PO Status

*OR

UPDATE EKKO

SET STATU = 'A'

WHERE EBELN = OBJECT-KEY-EBELN.

END_METHOD.

BEGIN_METHOD GET_REMINDERS CHANGING CONTAINER.

*Data declaration

DATA:

DATE_REM TYPE SYST-DATUM,

TIME_REM TYPE SYST-UZEIT,

duration type c.

*Business logic

DO 3 TIMES.

Page 5: Methods ZPO_BO905.docx

*set the duration

if sy-index = '1'. duration = '2'.

elseif sy-index = '2'. duration = '4'.

elseif sy-index = '3'. duration = '6'.

endif.

*get next working date using DURATION

CALL FUNCTION 'END_TIME_DETERMINE'

EXPORTING

DURATION = duration "2 OR 4 OR 6

* UNIT = by default in days-TAG, Week-WCH, Minutes-MIN

FACTORY_CALENDAR = '01' "Germany Standard factory Calendar-SCAL

IMPORTING

END_DATE = DATE_REM "Calculated Reminder Date

END_TIME = TIME_REM "Calculated Reminder time

CHANGING

START_DATE = SY-DATUM "start date

START_TIME = SY-UZEIT. "Start time

*Set EXPORT Parameters

IF SY-INDEX = 1.

SWC_SET_ELEMENT CONTAINER 'DATE_REM1' DATE_REM.

ELSEIF SY-INDEX = 2.

SWC_SET_ELEMENT CONTAINER 'DATE_REM2' DATE_REM.

ELSEIF SY-INDEX = 3.

Page 6: Methods ZPO_BO905.docx

SWC_SET_ELEMENT CONTAINER 'TIME_REM' TIME_REM.

SWC_SET_ELEMENT CONTAINER 'DATE_REM3' DATE_REM.

ENDIF.

ENDDO.

END_METHOD.

BEGIN_METHOD GET_APPROVERS CHANGING CONTAINER.

*data declaration

DATA:

APPROVER TYPE WFSYST-AGENT,

MANAGER TYPE WFSYST-AGENT,

I_APPRL_MATRIX TYPE STANDARD TABLE OF ZAPPRL_MATRIX WITH HEADER LINE,

i_return_tab type standard table of DDSHRETVAL with header line.

*Business logic

*Access Approvers and Managers from database table

SELECT * FROM ZAPPRL_MATRIX INTO TABLE I_APPRL_MATRIX.

*Display listbox for Approver selection

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

RETFIELD = 'APPROVER' "Column value to be returned

DYNPPROG = SY-REPID "Program name

DYNPNR = SY-DYNNR "Screen Number

VALUE_ORG = 'S' "Structural display

TABLES

Page 7: Methods ZPO_BO905.docx

VALUE_TAB = I_APPRL_MATRIX "Data Internal table

RETURN_TAB = I_RETURN_TAB. "Return Internal table

*Check the APPROVER(I_RETURN_TAB-FIELDVAL) selected

READ TABLE I_RETURN_TAB INDEX 1.

*Get his manager

READ TABLE I_APPRL_MATRIX with key APPROVER = I_RETURN_TAB-FIELDVAL.

*Prefix US to user ids

Concatenate 'US' I_APPRL_MATRIX-APPROVER INTO I_APPRL_MATRIX-APPROVER.

Concatenate 'US' I_APPRL_MATRIX-MANAGER INTO I_APPRL_MATRIX-MANAGER.

*set export parameters

SWC_SET_ELEMENT CONTAINER 'APPROVER' I_APPRL_MATRIX-APPROVER.

SWC_SET_ELEMENT CONTAINER 'MANAGER' I_APPRL_MATRIX-MANAGER.

END_METHOD.

BEGIN_METHOD SEND_OUTLOOK_EMAIL CHANGING CONTAINER.

*DATA DECLARATIONS

DATA:

EMAIL_APPROVER TYPE SZA5_D0700-SMTP_ADDR,

REM_LEVEL TYPE SYST-INPUT,

EMAIL_MANAGER TYPE SZA5_D0700-SMTP_ADDR.

*GET IMPORT PARAMETERS

SWC_GET_ELEMENT CONTAINER 'EMAIL_APPROVER' EMAIL_APPROVER.

SWC_GET_ELEMENT CONTAINER 'REM_LEVEL' REM_LEVEL.

Page 8: Methods ZPO_BO905.docx

SWC_GET_ELEMENT CONTAINER 'EMAIL_MANAGER' EMAIL_MANAGER.

*----------------------------------------------------------

*Business logic:

*----------------------------------------------------------

*1. Prepare Email Subject

Data psubject(100).

concatenate 'WF905: Reminder' REM_LEVEL ':PO Approval Request:'

OBJECT-KEY-EBELN into psubject separated by space.

*2. Fill Control Information

DATA gd_doc_data LIKE sodocchgi1.

gd_doc_data-obj_name = 'SAPRPT'.

gd_doc_data-obj_descr = psubject.

gd_doc_data-obj_langu = sy-langu.

* "Confidential P,functional F, Standard 0

gd_doc_data-sensitivty = 'F'.

gd_doc_data-doc_size = 1.

*3.Specify Recepient Email IDs

data:it_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE.

it_receivers-receiver = EMAIL_APPROVER.

*Receiver Type

*U -> Internet Address

*B -> SAP User

*R -> SAP User in another SAP System

Page 9: Methods ZPO_BO905.docx

*A -> External Address

*F -> Fax Number

*L -> Telex Number

*H -> Organizational unit/Position

*K -> Pager/SMS

it_receivers-rec_type = 'U'.

*Transmission Method:Fax TELFAX, Telex TELEX, SAPoffice internal INT

it_receivers-com_type = 'INT'.

*Acknowledgment of receipt expected

it_receivers-notif_del = 'X'.

APPEND it_receivers.

* Give the Email Of MANAGER for 2nd and 3rd Reminders only

if REM_LEVEL > 1.

CLEAR it_receivers.

it_receivers-receiver = EMAIL_Manager.

it_receivers-rec_type = 'U'.

it_receivers-com_type = 'INT'.

*Send: As copy / blindcopy

it_receivers-copy = 'X'.

* it_receivers-blindcopy = 'X'.

APPEND it_receivers.

endif.

Page 10: Methods ZPO_BO905.docx

*4. Prepare Email body text

*Data formating

data : V_REM(3) , v_rdays(15).

if REM_LEVEL = 1.

v_rem = '1st'. v_rdays = '4 working days'.

elseif rem_level = 2.

v_rem = '2nd'. v_rdays = '2 working days'.

elseif REM_LEVEL = 3.

v_rem = '3rd'. v_rdays = ''.

endif.

*Paragraph 1 : Line 1 -Max 255 characters

DATA: it_message TYPE STANDARD TABLE OF solisti1

WITH HEADER LINE.

data v_text(255).

concatenate 'Purchase Order' object-key-EBELN

'is blocked for processing' into v_text separated by space.

APPEND v_text TO it_message.

*Paragraph 2 / line 2------------------------------------

concatenate

'This is the' v_rem

'reminder email to a workflow mail sent to you as the'

'Purchase Order Approver.'

'Unfortunately we have not received your answer yet and the '

Page 11: Methods ZPO_BO905.docx

'referenced Purchase Order cannot be processed.'

into v_text separated by space.

APPEND v_text TO it_message.

*Paragraph 3 / line 3------------------------------------

if rem_level le 2.

concatenate

'After' v_rdays 'this work item will be removed from your workflow'

'inbox and forwarded to your manager' into v_text separated by space.

APPEND v_text TO it_message.

else.

concatenate

'work item is ALREADY removed from your workflow inbox and'

'forwarded to your manager FOR ESCALATION'

into v_text separated by space.

APPEND v_text TO it_message.

endif.

*Call function to generate an email

IF NOT IT_RECEIVERS[] IS INITIAL.

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = gd_doc_data "2.Control Data + 1.Subject

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

Page 12: Methods ZPO_BO905.docx

OBJECT_CONTENT = it_message "4.Message Body text

RECEIVERS = it_receivers. "3.Email IDs

IF SY-SUBRC <> 0.

ENDIF.

ENDIF.

END_METHOD.

TABLES EKKO.

*

GET_TABLE_PROPERTY EKKO.

DATA SUBRC LIKE SY-SUBRC.

* Fill TABLES EKKO to enable Object Manager Access to Table Properties

PERFORM SELECT_TABLE_EKKO USING SUBRC.

IF SUBRC NE 0.

EXIT_OBJECT_NOT_FOUND.

ENDIF.

END_PROPERTY.

*

* Use Form also for other(virtual) Properties to fill TABLES EKKO

FORM SELECT_TABLE_EKKO USING SUBRC LIKE SY-SUBRC.

* Select single * from EKKO, if OBJECT-_EKKO is initial

IF OBJECT-_EKKO-MANDT IS INITIAL

AND OBJECT-_EKKO-EBELN IS INITIAL.

SELECT SINGLE * FROM EKKO CLIENT SPECIFIED

WHERE MANDT = SY-MANDT

Page 13: Methods ZPO_BO905.docx

AND EBELN = OBJECT-KEY-EBELN.

SUBRC = SY-SUBRC.

IF SUBRC NE 0. EXIT. ENDIF.

OBJECT-_EKKO = EKKO.

ELSE.

SUBRC = 0.

EKKO = OBJECT-_EKKO.

ENDIF.

ENDFORM.

GET_PROPERTY NAME1 CHANGING CONTAINER.

*Business logic

SELECT SINGLE NAME1 INTO OBJECT-NAME1

FROM LFA1

WHERE LIFNR = OBJECT-_EKKO-LIFNR.

SWC_SET_ELEMENT CONTAINER 'NAME1' OBJECT-NAME1.

END_PROPERTY.