Upload
vijaya-rami-reddy-kolli
View
21
Download
1
Embed Size (px)
DESCRIPTION
Oasis sample method
Citation preview
***** 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
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.
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
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.
*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.
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
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.
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
*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.
*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 '
'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
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
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.