Background: A technical team maintains equipment in fueling stations. Each malfunction is reported via the PM notification in R3. Certain malfunctions are of very high priority and must reach the attention of a group of employees apart from the actual technicians that handle the problem.
Solution: Use Sap business workflow to send SMS messages to recipients.
Details
The first question that comes to mind is why use WF and not the alert framework in order to send out the messages. That was the initial thought in the project but we encountered many problems in the alert framework especially when handling long text with many variables - a strong demand from the customer.
WF is perhaps a bit more demanding to set up, but is far more flexible and easier to change.
The WF built is as follows:
1. Triggering event is BUS2080.Created a WF start condition takes care of the task to start the WF only for the relevant notifications, according to their priority.
2. A background step reads the long text of the notification using a custom method based on the 'read_text' function module
3. A responsibility rule based on the notification priority is created. Different responsibilities are created for each priority, linked to employee records.
A background step based on 'RH_GET_ACTORS' function module reads the rule and stores the result in a multiline container element based on WFSYST-AGENT
4. A background step reads the employee cell number from infotype 105 in the employee master data. (This can also be utilized via attributes in the business object of the employee) We did this in a method that uses multiline parameters in order to be able and retrieve many cell numbers at once.
5. The SMS message is composed and sent in another background step based on a custom function module that is wrapped around the 'SO_DOCUMENT_SEND_API1' function module.
6. Messages are delivered to the outgoing message queue (Transaction SOST) and delivered via a periodical job.
This WF is completely handled in background, e.g. there is no user intervention and no one gets a work item in their inbox. However, the WF mechanism enabled us to deliver a flexible solution with a minimum effort and very little code writing. The only maintenance to be done is to maintain the assignment of persons to the responsibilities and the different notification priorities in the WF start conditions.
Using the WF capabilities we managed to compose complex texts for the messages and include many variables in them.
Samples of code for the function modules mentioned above
Read notification long text
BEGIN_METHOD READ_TEXT CHANGING CONTAINER.
data lines type tline occurs 0 with header line.
*data header type thead occurs 0 with header lines.
data name like THEAD-TDNAME.
move OBJECT-KEY to name.
CALL FUNCTION 'READ_TEXT'
EXPORTING
CLIENT = SY-MANDT
ID = 'LTXT'
LANGUAGE = SY-LANGU
NAME = name
OBJECT = 'QMEL'
ARCHIVE_HANDLE = 0
LOCAL_CAT = SPACE
* IMPORTING
* HEADER = HEADER
TABLES
LINES = LINES
EXCEPTIONS
ID = 01
LANGUAGE = 02
NAME = 03
NOT_FOUND = 04
OBJECT = 05
REFERENCE_CHECK = 06
WRONG_ACCESS_TO_ARCHIVE = 07
OTHERS = 08.
SWC_SET_TABLE CONTAINER 'lines' LINES.
END_METHOD.
Reading the Rule result
BEGIN_METHOD GET_RULE_RESULT CHANGING CONTAINER.
Data: it_actor_tab like swhactor occurs 0 with header line.
swc_container role_container. "Define Container
SWC_GET_TABLE CONTAINER 'role_container' ROLE_CONTAINER.
CALL FUNCTION 'RH_GET_ACTORS'
EXPORTING
ACT_OBJECT = 'AC90000002'
* ACT_TASK =
* ACT_WI_ID =
ACT_PLVAR = '01'
SEARCH_DATE = SY-DATUM
* ACTOR_CONTAINER_OO =
TABLES
ACTOR_CONTAINER = role_container
* EXCLUDED_AGENTS =
ACTOR_TAB = it_actor_tab
* ERROR_TAB =
EXCEPTIONS
NO_ACTIVE_PLVAR = 01
NO_ACTOR_FOUND = 02
EXCEPTION_OF_ROLE_RAISED = 03
NO_VALID_AGENT_DETERMINED = 04
NO_CONTAINER = 05
OTHERS = 06.
CASE SY-SUBRC.
WHEN 0. " OK
WHEN 01. " to be implemented
WHEN 02. " to be implemented
WHEN 03. " to be implemented
WHEN 04. " to be implemented
WHEN 05. " to be implemented
WHEN OTHERS. " to be implemented
ENDCASE.
SWC_SET_TABLE CONTAINER 'it_actor_tab' IT_ACTOR_TAB.
END_METHOD.
Sending the SMS message
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = document_data
put_in_outbox = 'X'
sender_address = sender_address
sender_address_type = 'B'
commit_work = 'X'
TABLES
packing_list = packing_list
contents_txt = contents_txt
receivers = receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
No comments:
Post a Comment