Show TOC

Sample ProviderLocate this document in the navigation structure

This sample provider in available in the system in class /IWNGW/CL_DEMO_NOTIF_PROVIDER.

Sample Code
CLASS /iwngw/cl_demo_notif_provider DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES /iwngw/if_notif_provider .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS /IWNGW/CL_DEMO_NOTIF_PROVIDER IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method /IWNGW/CL_DEMO_NOTIF_PROVIDER=>/IWNGW/IF_NOTIF_PROVIDER~GET_NOTIFICATION_PARAMETERS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_NOTIFICATION_ID             TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION-ID
* | [--->] IV_TYPE_KEY                    TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-TYPE_KEY
* | [--->] IV_TYPE_VERSION                TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-VERSION
* | [--->] IV_LANGUAGE                    TYPE        SPRAS
* | [<---] ET_PARAMETER                   TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_T_NOTIFICATION_PARAMETER
* | [!CX!] /IWNGW/CX_NOTIF_PROVIDER
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD /iwngw/if_notif_provider~get_notification_parameters.
    DATA ls_parameter LIKE LINE OF et_parameter.
    DATA lv_rand_int TYPE i.
    DATA lv_rand_str TYPE string.
    DATA lv_quantity TYPE p DECIMALS 0.
    DATA lv_order_date TYPE d.

    " Don't specify a specific ID, since it will be generated, put all parameters in the "context"
*    if iv_notification_id = '001'.
    CALL FUNCTION 'GENERAL_GET_RANDOM_INT'
      EXPORTING
        range  = 5000
      IMPORTING
        random = lv_rand_int.
    lv_rand_str = lv_rand_int.
    CONDENSE lv_rand_str.

    ls_parameter-name         = 'po_number'.
    CONCATENATE '#' lv_rand_str INTO ls_parameter-value.
    ls_parameter-type         = /iwngw/if_notif_provider=>gcs_parameter_types-type_string.
    ls_parameter-is_sensitive = abap_false.
    APPEND ls_parameter TO et_parameter.

    ls_parameter-name         = 'lr_number'.
    CONCATENATE '#' lv_rand_str INTO ls_parameter-value.
    ls_parameter-type         = /iwngw/if_notif_provider=>gcs_parameter_types-type_string.
    ls_parameter-is_sensitive = abap_false.
    APPEND ls_parameter TO et_parameter.

    CALL FUNCTION 'GENERAL_GET_RANDOM_INT'
      EXPORTING
        range  = 10
      IMPORTING
        random = lv_rand_int.
    lv_rand_str = lv_rand_int.
    CONDENSE lv_rand_str.

    IF iv_language = 'D'.
      ls_parameter-name         = 'cost'.
      CONCATENATE 'USD ' lv_rand_str '.000' INTO ls_parameter-value.
      ls_parameter-type         = /iwngw/if_notif_provider=>gcs_parameter_types-type_string.
      ls_parameter-is_sensitive = abap_true.
      APPEND ls_parameter TO et_parameter.
    ELSE.
      ls_parameter-name         = 'cost'.
      CONCATENATE '$' lv_rand_str ',000' INTO ls_parameter-value.
      ls_parameter-type         = /iwngw/if_notif_provider=>gcs_parameter_types-type_string.
      ls_parameter-is_sensitive = abap_true.
      APPEND ls_parameter TO et_parameter.
    ENDIF.

    ls_parameter-name         = 'quantity'.
    ls_parameter-type         = 'Edm.Decimal'.
    lv_quantity = 10000.
    ls_parameter-value        = lv_quantity.
    ls_parameter-is_sensitive = abap_true.
    APPEND ls_parameter TO et_parameter.

    ls_parameter-name         = 'requester_name'.
    ls_parameter-value        = 'Gavin Gradel'.
    ls_parameter-type         = /iwngw/if_notif_provider=>gcs_parameter_types-type_string.
    ls_parameter-is_sensitive = abap_true.
    APPEND ls_parameter TO et_parameter.

    ls_parameter-name         = 'order_date'.
    ls_parameter-value        = sy-datum.
    ls_parameter-type         = 'Edm.DateTime'.
    ls_parameter-is_sensitive = abap_true.
    APPEND ls_parameter TO et_parameter.
*    endif.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method /IWNGW/CL_DEMO_NOTIF_PROVIDER=>/IWNGW/IF_NOTIF_PROVIDER~GET_NOTIFICATION_TYPE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_TYPE_KEY                    TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-TYPE_KEY
* | [--->] IV_TYPE_VERSION                TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-VERSION
* | [<---] ES_NOTIFICATION_TYPE           TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE
* | [<---] ET_NOTIFICATION_ACTION         TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_T_NOTIFICATION_ACTION
* | [!CX!] /IWNGW/CX_NOTIF_PROVIDER
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD /iwngw/if_notif_provider~get_notification_type.
    DATA ls_naction LIKE LINE OF et_notification_action.

    IF ( iv_type_key = 'PurchaseOrderTypeKey' OR iv_type_key = 'PurchaseOrderType2Key' ) AND iv_type_version = '1'.
      es_notification_type-is_groupable = abap_true.

      ls_naction-action_key = 'AcceptPOActionKey'.
      ls_naction-nature = /iwngw/if_notif_provider=>gcs_action_natures-positive.
      APPEND ls_naction TO et_notification_action.

      ls_naction-action_key = 'RejectPOActionKey'.
      ls_naction-nature = /iwngw/if_notif_provider=>gcs_action_natures-negative.
      APPEND ls_naction TO et_notification_action.
    ELSEIF iv_type_key = 'LeaveRequestTypeKey' AND iv_type_version = '1'.
      es_notification_type-is_groupable = abap_true.

      ls_naction-action_key = 'ApproveLRActionKey'.
      ls_naction-nature = /iwngw/if_notif_provider=>gcs_action_natures-positive.
      APPEND ls_naction TO et_notification_action.

      ls_naction-action_key = 'DenyLRActionKey'.
      ls_naction-nature = /iwngw/if_notif_provider=>gcs_action_natures-negative.
      APPEND ls_naction TO et_notification_action.
    ELSE.
      " TODO: raise error, unexpected notification type/version
    ENDIF.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method /IWNGW/CL_DEMO_NOTIF_PROVIDER=>/IWNGW/IF_NOTIF_PROVIDER~GET_NOTIFICATION_TYPE_TEXT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_TYPE_KEY                    TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-TYPE_KEY
* | [--->] IV_TYPE_VERSION                TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-VERSION
* | [--->] IV_LANGUAGE                    TYPE        SPRAS
* | [<---] ES_TYPE_TEXT                   TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_TEXT
* | [<---] ET_ACTION_TEXT                 TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_T_NOTIFICATION_ACTION_TEXT
* | [!CX!] /IWNGW/CX_NOTIF_PROVIDER
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD /iwngw/if_notif_provider~get_notification_type_text.
    DATA ls_naction_t LIKE LINE OF et_action_text.
    DATA lv_tmptext TYPE string.
    DATA lv_tmpattr TYPE string.

    IF ( iv_type_key = 'PurchaseOrderTypeKey' OR iv_type_key = 'PurchaseOrderType2Key' ) AND iv_type_version = '1' AND iv_language = 'D'. "language specific handling
      es_type_text-template_public    = 'A purchase order requires your approval'. "TEXT-001.  "german text should go here
      lv_tmptext = 'Purchase order &1 for &2 by &3 requires your approval'. "TEXT-002.
      REPLACE '&1' WITH '{po_number}' INTO lv_tmptext.
      REPLACE '&2' WITH '{cost}' INTO lv_tmptext.
      REPLACE '&3' WITH '{requester_name}' INTO lv_tmptext.
      es_type_text-template_sensitive = lv_tmptext.
      es_type_text-template_grouped   = 'Purchase orders requiring your approval'. "TEXT-003.


      ls_naction_t-action_key = 'AcceptPOActionKey'.
      ls_naction_t-display_text = 'Accept'. "TEXT-004.
      ls_naction_t-display_text_grouped = 'Accept all'. "TEXT-005.
      APPEND ls_naction_t TO et_action_text.

      ls_naction_t-action_key = 'RejectPOActionKey'.
      ls_naction_t-display_text = 'Reject'. "TEXT-006.
      ls_naction_t-display_text_grouped = 'Reject all'. "TEXT-007.
      APPEND ls_naction_t TO et_action_text.
    ELSEIF ( iv_type_key = 'PurchaseOrderTypeKey' OR iv_type_key = 'PurchaseOrderType2Key' ) AND iv_type_version = '1'.
      es_type_text-template_public    = 'A purchase order requires your approval'. "TEXT-001.
      lv_tmptext = 'Purchase order &1 for &2  and &3 items by &4 on &5 requires your approval'. "TEXT-008.
      REPLACE '&1' WITH '{po_number}' INTO lv_tmptext.
      REPLACE '&2' WITH '{cost}' INTO lv_tmptext.
      REPLACE '&3' WITH '{quantity}' INTO lv_tmptext.
      REPLACE '&4' WITH '{requester_name}' INTO lv_tmptext.
      REPLACE '&5' WITH '{order_date}' INTO lv_tmptext.
      es_type_text-template_sensitive = lv_tmptext.
      es_type_text-template_grouped   = 'Purchase orders requiring your approval'. "TEXT-003.


      ls_naction_t-action_key = 'AcceptPOActionKey'.
      ls_naction_t-display_text = 'Accept'. "TEXT-004.
      ls_naction_t-display_text_grouped = 'Accept all'. "TEXT-005.
      APPEND ls_naction_t TO et_action_text.

      ls_naction_t-action_key = 'RejectPOActionKey'.
      ls_naction_t-display_text = 'Reject'. "TEXT-006.
      ls_naction_t-display_text_grouped = 'Reject all'. "TEXT-007.
      APPEND ls_naction_t TO et_action_text.
    ELSEIF iv_type_key = 'LeaveRequestTypeKey' AND iv_type_version = '1' AND iv_language = 'D'.
      es_type_text-template_public    = 'A leave request requires your attention'. "TEXT-009.
      lv_tmptext = 'Leave request &1 by &2 requires your attention'. "TEXT-010.
      REPLACE '&1' WITH '{lr_number}' INTO lv_tmptext.
      REPLACE '&2' WITH '{requester_name}' INTO lv_tmptext.
      es_type_text-template_sensitive = lv_tmptext.

      lv_tmptext = 'You have &1 leave requests requiring your attention'. "TEXT-011.
      CONCATENATE '{' /iwngw/if_notif_provider=>gcs_parameter_reserved_names-group_count '}' INTO lv_tmpattr.
      REPLACE '&1' WITH lv_tmpattr INTO lv_tmptext.
      es_type_text-template_grouped = lv_tmptext.

      ls_naction_t-action_key = 'ApproveLRActionKey'.
      ls_naction_t-display_text = 'Approve'. "TEXT-012.
      ls_naction_t-display_text_grouped = 'Approve all'. "TEXT-013.
      APPEND ls_naction_t TO et_action_text.

      ls_naction_t-action_key = 'DenyLRActionKey'.
      ls_naction_t-display_text = 'Deny'. "TEXT-014.
      ls_naction_t-display_text_grouped = 'Deny all'. "TEXT-015.
      APPEND ls_naction_t TO et_action_text.
    ELSEIF iv_type_key = 'LeaveRequestTypeKey' AND iv_type_version = '1'.
      es_type_text-template_public    = 'A leave request requires your attention'. "TEXT-009.
      lv_tmptext = 'Leave request &1 by &2 requires your attention'. "TEXT-010.
      REPLACE '&1' WITH '{lr_number}' INTO lv_tmptext.
      REPLACE '&2' WITH '{requester_name}' INTO lv_tmptext.
      es_type_text-template_sensitive = lv_tmptext.


      lv_tmptext = 'You have &1 leave requests requiring your attention'. "TEXT-011.
      CONCATENATE '{' /iwngw/if_notif_provider=>gcs_parameter_reserved_names-group_count '}' INTO lv_tmpattr.
      REPLACE '&1' WITH lv_tmpattr INTO lv_tmptext.
      es_type_text-template_grouped = lv_tmptext.


      ls_naction_t-action_key = 'ApproveLRActionKey'.
      ls_naction_t-display_text = 'Approve'. "TEXT-012.
      ls_naction_t-display_text_grouped = 'Approve all'. "TEXT-013.
      APPEND ls_naction_t TO et_action_text.

      ls_naction_t-action_key = 'DenyLRActionKey'.
      ls_naction_t-display_text = 'Deny'. "TEXT-014.
      ls_naction_t-display_text_grouped = 'Deny all'. " TEXT-015.
      APPEND ls_naction_t TO et_action_text.
    ELSE.
      " TODO: raise error, unexpected notification type/version
    ENDIF.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method /IWNGW/CL_DEMO_NOTIF_PROVIDER=>/IWNGW/IF_NOTIF_PROVIDER~HANDLE_ACTION
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_NOTIFICATION_ID             TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION-ID
* | [--->] IV_TYPE_KEY                    TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-TYPE_KEY
* | [--->] IV_TYPE_VERSION                TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_TYPE_ID-VERSION
* | [--->] IV_ACTION_KEY                  TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_ACTION-ACTION_KEY
* | [<---] ES_RESULT                      TYPE        /IWNGW/IF_NOTIF_PROVIDER=>TY_S_NOTIFICATION_ACTN_RESULT
* | [!CX!] /IWNGW/CX_NOTIF_PROVIDER
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD /iwngw/if_notif_provider~handle_action.
    DATA lt_notif_id TYPE /iwngw/if_notif_provider=>ty_t_notification_id.
    DATA ls_notif_id LIKE LINE OF lt_notif_id.


    " For now always return success if ids are set, since no persistence in this test provider
    IF iv_notification_id IS INITIAL OR iv_action_key IS INITIAL.
      es_result-success = abap_false.
    ELSE.
      es_result-success = abap_true.
      es_result-delete_on_return = abap_true.
*
*      ls_notif_id-id = iv_notification_id.
*      APPEND ls_notif_id TO lt_notif_id.
*
*      /iwngw/cl_notification_api=>delete_notifications(
*        EXPORTING
*          iv_provider_id = 'IWNGW_DEMO1'
*          it_notification_id = lt_notif_id ).
    ENDIF.
  ENDMETHOD.
ENDCLASS.