How to Create new Instance of an App from Code
Auto-Generated Forms
Forms can be configured so that instances of the Form can be generated automatically based on some programmed logic. For example, all open work-items of a particular type can be scanned for and an auto-generated Form created and sent to particular users, based on data associated with the work-item.
This can be achieved in FAB by
- configuring which Forms should be auto-generated,
- scheduling a job to process the Forms
- implement logic for selecting the basis for each Form (ie each instance of Form based on what?)
- implement logic for selecting data for each instance (Form contents for each instance)
Configure any Forms to be generated automatically via /IQX/CONFIG - >Auto-Generated Forms
Schedule /IQX/FAB_AUTO_GENERATE_FORM
Create a variant for the Form and schedule it as desired, or execute immediately.
FAB_DEMO_APPROVE_NOTIF
Implement
Via the Implementation Class of the Form/App, implement methods:
AUTO_GENERATED_FORMS_SELECT
AUTO_GENERATED_FORM_CREATE
AUTO_GENERATED_FORMS_SELECT
In this method, write the logic for selecting the data that is the basis of the auto-generated forms.
Fill the exporting parameter ET_KEYS with a unique key and value pair (ZKEY, ZVALUE) for each record identified for automatic generation.
For example, it could be open work-items of a particular type:
* Example 2 - retrieve open workflows of a particular type
DATA: lt_work_items TYPE STANDARD TABLE OF swwwihead,
ls_work_items LIKE LINE OF lt_work_items,
lt_wi_agent TYPE STANDARD TABLE OF swwuserwi.
SELECT * FROM swwwihead INTO TABLE lt_work_items
WHERE wi_rh_task = 'TS98100231' "example demo workflow WS98100290, task TS98100231
AND wi_stat = 'READY'.
* keep only those with agents
IF lt_work_items IS NOT INITIAL.
SELECT *
FROM swwuserwi
INTO TABLE lt_wi_agent
FOR ALL ENTRIES IN lt_work_items
WHERE wi_id = lt_work_items-wi_id
AND no_sel = space.
SORT lt_wi_agent BY wi_id.
DELETE ADJACENT DUPLICATES FROM lt_wi_agent COMPARING wi_id.
LOOP AT lt_work_items INTO ls_work_items.
READ TABLE lt_wi_agent WITH KEY wi_id = ls_work_items-wi_id BINARY SEARCH TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
ls_keys-zkey = 'WorkitemId'.
ls_keys-zvalue = ls_work_items-wi_id.
APPEND ls_keys TO et_keys.
ENDIF.
ENDLOOP.
ENDIF.
AUTO_GENERATED_FORM_CREATE
In this method, we
- write the logic for selecting the actual data for each Form that will be generated (based on the key,value pairs generated via AUTO_GENERATED_FORM_SELECT )
- Set a starting Action in EV_ACTION (such as GENERATE or SAVE).
This simulates a user filling out the form with some data and pressing a button that invokes the configured action.
It is then up to the Form logic and workflow as usual to carry on processing the Form.
Example: for each work item id, retrieve the associated Notification and set some attributes of the Form.
FIELD-SYMBOLS <fs_form_data> LIKE LINE OF ct_form_data.
DEFINE set_field.
READ TABLE ct_form_data ASSIGNING <fs_form_data> WITH KEY zfield_name = &1.
IF sy-subrc = 0.
<fs_form_data>-zfield_value = &2.
ENDIF.
END-OF-DEFINITION.
CASE iv_key.
WHEN 'WorkitemId'.
" given key - WorkitemId "get Notification from workflow container
DATA: lv_wi_id TYPE sww_wiid,
ls_object TYPE swr_obj_2.
lv_wi_id = iv_key_value.
CALL FUNCTION 'SAP_WAPI_GET_OBJECTS'
EXPORTING
workitem_id = lv_wi_id
* LANGUAGE = SY-LANGU
* USER = SY-UNAME
* BUFFERED_ACCESS = 'X'
IMPORTING
* LEADING_OBJECT =
* RETURN_CODE =
leading_object_2 = ls_object
* TABLES
* OBJECTS =
* MESSAGE_LINES =
* MESSAGE_STRUCT =
* OBJECTS_2 =
.
lv_qmnum = ls_object-instid.
IF lv_qmnum IS NOT INITIAL.
CALL FUNCTION 'BAPI_ALM_NOTIF_GET_DETAIL'
EXPORTING
number = lv_qmnum
IMPORTING
notifheader_export = ls_notifheader_export
notifhdtext = ls_notifhdtext.
ENDIF.
" set workitem id into Form
set_field 'WorkitemId' iv_key_value.
ENDCASE.
"set fields from Notification into Form
set_field 'NotificationNumber' lv_qmnum.
set_field 'Description' ls_notifheader_export-short_text.
set_field 'NotificationNumber' lv_qmnum.
set_field 'LocationDescription' ls_notifhdtext-funcldescr.
set_field 'EquipmentDescription' ls_notifhdtext-equidescr.
set_field 'StartDate' ls_notifheader_export-notif_date.
ev_action = 'GENERATE'.
Related articles