adesso orange🍊Stellenangebote:
Software Engineer Trainee · Senior | (Senior) Cloud Software Engineer BTP
(Senior) Consultant Technologie · Consultant ABAP
Werkstudent Softwareentwicklung · Fiori / UI5 · Consulting · Application Management

Ich habe manuell über mehrere Versionen das Wiki geupdated. Evtl. läuft es noch nicht ganz rund ツ

Eigene Fiori Push Benachrichtigungen erzeugen

Aus SAP Wiki ツ
Version vom 24. November 2024, 19:38 Uhr von M1ch3lde (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Im Fiori Launchpad gibt es das Icon "Glocke". Hier werden alle Fiori Push Notifications angezeigt. Ziel dieses Wiki-Artikels ist es, dass man in der Lage ist dort eigene Meldungen anzeigen zu lassen. Voraussetzung ist, dass die technische Einrichtung und Konfiguration im System erfolgt ist.

Überblick der benötigten Objekte und Customizing

  • Erstellung Y/Z Notification-Klasse
    • Interface /iwngw/if_notif_provider
    • Implementierung Methode /iwngw/if_notif_provider~get_notification_parameters
    • Implementierung Methode /iwngw/if_notif_provider~get_notification_type
    • Implementierung Methode /iwngw/if_notif_provider~get_notification_type_text
    • Implementierung Methode /iwngw/if_notif_provider~handle_action
    • Implementierung Methode send_notification

C

    • Notification Provider registrieren
    • Notification Provider verwalten

Erstellung Y/Z Notification-Klasse

Für Methode send_notification ist selber zu überlegen welche Paramater benötigt werden. Ebenso das Erfolgs/Fehler-Handling.

 CLASS ycl_your_class_notifprov DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    INTERFACES /iwngw/if_notif_provider .

    CONSTANTS mc_notification_provider_id TYPE /iwngw/notif_provider_id  VALUE 'YMM_PUR_WE_MSG_PO_ITEM' ##NO_TEXT.

    CONSTANTS:
      BEGIN OF mc_notification_type,
        general_gr                 TYPE /iwngw/notification_type_key VALUE 'GenGrForAPoItem',
        gr_with_ref_to_sales_order TYPE /iwngw/notification_type_key VALUE 'SalesOrderGrForAPoItem',
      END OF mc_notification_type.

    CLASS-METHODS: send_notification
                    IMPORTING iv_purchaseorder TYPE I_PurchaseOrderAPI01-PurchaseOrder
                    EXPORTING ev_is_sending_successful TYPE abap_bool
                              ev_ex_msg TYPE string.
  PROTECTED SECTION.
  PRIVATE SECTION.
   CLASS-DATA: _mt_parameters type /iwngw/if_notif_provider=>ty_t_notification_parameter.
 ENDCLASS.
 
 CLASS ycl_your_class_notifprov IMPLEMENTATION.
  METHOD /iwngw/if_notif_provider~get_notification_parameters ##NEEDED.
   CLEAR:et_parameter.
   
    SET LANGUAGE iv_language.

    LOOP AT _mt_parameters ASSIGNING FIELD-SYMBOL(<ls_para>).
     MOVE-CORRESPONDING <ls_para> TO et_parameter.
    ENDLOOP.
    SET LANGUAGE lv_lang.
  ENDMETHOD.

  METHOD /iwngw/if_notif_provider~get_notification_type.
    DATA ls_notif_action LIKE LINE OF et_notification_action ##NEEDED.

    CLEAR es_notification_type.
    CLEAR et_notification_action.

    CASE iv_type_key.
      WHEN mc_notification_type-general_gr.
        es_notification_type-type_key     = mc_notification_type-general_gr.
        es_notification_type-version      = 0.
        es_notification_type-is_groupable = abap_true.
      WHEN mc_notification_type-gr_with_ref_to_sales_order.
        es_notification_type-type_key     = mc_notification_type-gr_with_ref_to_sales_order.
        es_notification_type-version      = 0.
        es_notification_type-is_groupable = abap_true.
      WHEN OTHERS.
        RAISE EXCEPTION TYPE /iwngw/cx_notif_provider.
    ENDCASE.
  ENDMETHOD.

   METHOD /iwngw/if_notif_provider~get_notification_type_text.
    DATA lv_tmp_text TYPE string.

    CLEAR es_type_text.
    CLEAR et_action_text.

    SET LANGUAGE iv_language.

    CASE iv_type_key.
      WHEN mc_notification_type-general_gr.
        lv_tmp_text = TEXT-100.
        REPLACE '&1' WITH '{po}' INTO lv_tmp_text.
        REPLACE '&2' WITH '{poitem}' INTO lv_tmp_text.
        es_type_text-template_public    = lv_tmp_text.
        es_type_text-template_grouped   = TEXT-101.
        CLEAR lv_tmp_text.
        lv_tmp_text = TEXT-102.
        REPLACE '&1' WITH '{article}' INTO lv_tmp_text.
        REPLACE '&2' WITH '{plant}' INTO lv_tmp_text.
        es_type_text-subtitle           = lv_tmp_text.
        es_type_text-description        = TEXT-103.
      WHEN mc_notification_type-gr_with_ref_to_sales_order.
        lv_tmp_text = TEXT-200.
        REPLACE '&1' WITH '{po}' INTO lv_tmp_text.
        REPLACE '&2' WITH '{poitem}' INTO lv_tmp_text.
        REPLACE '&3' WITH '{so}' INTO lv_tmp_text.
        es_type_text-template_public    = lv_tmp_text.
        es_type_text-template_grouped   = TEXT-201.
        CLEAR lv_tmp_text.
        lv_tmp_text = TEXT-202.
        REPLACE '&1' WITH '{article}' INTO lv_tmp_text.
        REPLACE '&2' WITH '{plant}' INTO lv_tmp_text.
        es_type_text-subtitle           = lv_tmp_text.
        es_type_text-description        = TEXT-203.
      WHEN OTHERS.
        RAISE EXCEPTION TYPE /iwngw/cx_notif_provider.
    ENDCASE.

  ENDMETHOD.

 METHOD /iwngw/if_notif_provider~handle_action.
    CLEAR es_result.

*   For now always return success if ids are set, since no persistence in this provider
    IF iv_notification_id IS INITIAL.
      es_result-success = abap_false.
    ELSEIF iv_action_key IS INITIAL.
      es_result-success = abap_false.
    ELSE.
      es_result-success          = abap_true.
      es_result-delete_on_return = abap_true.
    ENDIF.
 ENDMETHOD.
 
   METHOD /iwngw/if_notif_provider~handle_bulk_action.
*   no bulk notifications supported
    CLEAR et_notif_result.
  ENDMETHOD.
  
 METHOD send_notification.

   CLEAR _mt_parameters.

    TRY.

     DATA: lt_recipients type /iwngw/if_notif_provider=>ty_t_notification_recipient,
           lt_parameters type /iwngw/if_notif_provider=>ty_t_notification_parameter,
           lv_type_key type /iwngw/notification_type_key.

     IF iv_so_creator IS INITIAL.
      lt_recipients = VALUE #( ( id = iv_po_creator ) ).
      _mt_parameters = VALUE #(  ( name = 'po' value = iv_purchaseorder type = 'Edm.String' is_sensitive = abap_false )
                                ( name = 'poitem' value = iv_poitem type = 'Edm.String' is_sensitive = abap_false )
                                ( name = 'article' value = iv_product type = 'Edm.String' is_sensitive = abap_false )
                                ( name = 'plant' value = iv_plant type = 'Edm.String' is_sensitive = abap_false ) ).
      lv_type_key =  mc_notification_type-general_gr.
     ELSE.
      lt_recipients = VALUE #( ( id = iv_po_creator ) ( id = iv_so_creator ) ).
      _mt_parameters = VALUE #( ( name = 'po' value = iv_purchaseorder type = 'Edm.String' is_sensitive = abap_false )
                               ( name = 'poitem' value = iv_poitem type = 'Edm.String' is_sensitive = abap_false )
                               ( name = 'so' value = iv_salesorder type = 'Edm.String' is_sensitive = abap_false )
                               ( name = 'article' value = iv_product type = 'Edm.String' is_sensitive = abap_false )
                               ( name = 'plant' value = iv_plant type = 'Edm.String' is_sensitive = abap_false ) ).
      lv_type_key =  mc_notification_type-gr_with_ref_to_sales_order.
     ENDIF.

     /iwngw/cl_notification_api=>create_notifications(
                EXPORTING
                  iv_provider_id  = mc_notification_provider_id
                  it_notification = VALUE #( ( id = cl_uuid_factory=>create_system_uuid( )->create_uuid_x16( )
                                             type_key = lv_type_key
                                             type_version = '0'
                                             priority = 'NEUTRAL'
                                             navigation_parameters = VALUE #( ( name = 'MaterialDocument' value = iv_matdoc )
                                                                              ( name = 'MaterialDocumentYear' value = iv_matdoc_year )
                                                                              ( name = 'sap-fiori-id' value = 'F1077' )
                                                                              ( name = 'StockCHangeContext' value = '' )
                                                                              ( name = 'StockCHangeContext' value = '01' )
                                                                              ( name = 'StockChangeType' value = '05')
                                                                              ( name = 'sap-keep-alive' value = 'restricted' )
                                                                              ( name = 'MaterialDocumentItem' value = iv_matdoc_item ) )
                                             navigation_target_object = 'MaterialDocument'
                                             navigation_target_action = 'displayFactSheet'
                                             recipients = lt_recipients
                                             parameters = VALUE #( language = sy-datum
                                                                 ( parameters = _mt_parameters ) ) ) ) ).
      CATCH cx_uuid_error INTO DATA(lrx_uuid_error).
       ev_ex_msg = lrx_uuid_error->get_text( ).
        RETURN.
      CATCH /iwngw/cx_notification_api INTO DATA(lrx_api).
        " HANDLE ERROR
        ev_ex_msg = lrx_api->get_text( ).
        RETURN.
    ENDTRY.
    ev_is_sending_successful = abap_true.
  ENDMETHOD.

 ENDCLASS.

Notwendiges Customizing

Notification Provider registrieren

Mit Button "Provider registrieren" ist der Notification Provider zu registrieren. Hier wird eine Name für den Provider z.B. YMM_..." und die zuvor angelegte Provider Klasse zugeordnet.

Hinweis
Die angelegten Einträge werden in der jeweiligen eingeloggten Systemsprache angelegt (Zeitpunkt Erstellung des Wiki-Artikels bei Release 2023). Bedeutet ist der Customizing Eintrag in Deutsch gemacht worden, so ist dieser bei EN Anmeldung nicht zu sehen. Im Projekt sollte abgestimmt werden, welche Sprache fürs Customizing genutzt wird.

Notification Provider verwalten

Perse ist der Provider nicht aktiviert, weshalb man diesen noch aktivieren muss.