Hintergrund:
Zahlreiche Aktivitäten im ChaRM fügen Einträge im Textprotokoll hinzu. Nicht alle Einträge sind sinnvoll/hilfreich. Bei zu vielen Einträge leidet jedoch die Übersichtlichkeit.
Anforderung:
Ausblenden von ausgewählten Einträgen. Z.B. Erzeugen von ToCs.
Beispiele:
- Leerer Auftrag DEVK908714 in Aufgabenplan M000000082 wurde gelöscht
- Aktion Aufträge freigeben ohne offene Transportaufträge ausgeführt!
- Aufträge werden gelöscht
- Für die Aufträge DEVK908722 wurden Kopien DEVK908725 transportiert
Lösung 1:
Das Schreiben von Textprotokolleinträgen erfolgt mittels Methode „cl_hf_helper=>insert_notice“. Übergabeparameter ist die vollständige Textzeile.
Hier kann mittels Mustererkennung (z.B. regulärer Ausdruck) nach bestimmten Einträgen gesucht und das Schreiben unterbunden werden. Nachteil: Mustererkennung ist teilweise aufwendig und sprachabhängig.
Vorteil: Diese Lösung klappt für fast alle Einträge.
Lösung 2:
Das Schreiben von Textprotokolleinträgen erfolgt in den meisten Fällen mit „cl_chm1_instance->handle_message“ welche wiederum u.a. cl_hf_helper=>insert_notice ruft. Übergabeparameter sind hier Nachrichtenklasse, Nachrichtennummer und Nachrichtenparameter.
Hier kann somit die Filterung mittels Nachrichtenklasse/-nummer erfolgen. Nachteil: Funktioniert nicht für Fälle in denen cl_hf_helper=>insert_notice direkt benutzt wird (z.B. Statuswechsel, Protokollierungen des Aufgabenplans). Vorteil: Sehr einfach und sprachunabhängig.
Lösung 3:
Für transportbasierte ChaRM-Aktionen (z.B. Transportauftrag anlegen, freigeben, …) aus dem Transportverwaltung-Zuordnungsblock wird Methode CL_AI_CRM_ACTION_UTILITY->HANDLE_ACTION_LOG verwendet um Nachrichten ins Textlog zu schreiben. Der Text wird hier abhängig vom Aktionsnamen dem Customizing TSOCM_ACT_DEF entnommen. Sind hier keine Nachrichten für die betreffende Aktion gepflegt, wird keine Nachricht geschrieben. Folglich können Nachrichten durch entsprechendes Customizing ausgeblendet oder geändert werden. Beispieltext: „Aufträge DEVK908729 angelegt“
Lösung 4:
In der Regel lösen alle Aktionen des Aufgabenplanes eine Protokollierung im Textlog aus. Um hier Nachrichten auszufiltern oder zu ändern, ist Funktionsbaustein /TMWFLOW/APPL_STAT_MESSAGE am Ende zu erweitern. Es ist hierbei zu beachten, dass Nachrichtenklasse und –nummer der Pseudo-Konsistenzbedingung 0POSITIVE_FEEDBACK oder 0NEGATIVE_FEEDBACK aus Tabelle TSOCM_COND_DEF entnommen werden und für alle Aktionen gleich sind. Hier muss also eine Einbeziehung des Aktionsnamens (L_ACTION_MESSAGE-TASK_ID) sowie ggf. weiterer Parameter erfolgen, um eine sinnvolle Filterung zu ermöglichen. Funktionsbaustein /TMWFLOW/APPL_STAT_MESSAGE wird von Methode CL_AI_CRM_ACTION_UTILITY-> HANDLE_ACTION_LOG für Aktionen des Tansportmanagement-ABs und von Methode IF_EX_SOCM_PROCESS_ACTION~PROCESS_ACTION der ChaRM-Proxy-Klassen für ChaRM-Aktionen mit Aufgabenplaninteraktionen gerufen. Methode IF_EX_SOCM_PROCESS_ACTION~PROCESS_ACTION nutzt wiederum cl_chm1_instance->handle_message aus Lösung 2. Beispieltext: „Die Aktion Transportauftrag anlegen in System DEV 100 des Typs Ausgangssysteme ist erfolgreich abgeschlossen.“
Lösung 5:
Es gibt noch einzelne weitere Stellen, die eine Protokollierung im Textlog vornehmen. Beispielhaft sei auf CL_AIC_CM_S_SYSTEMLANDSCA_IMPL->LOGON_SYSTEM beim Anmelden am System verwiesen. Ein Eingriff ist hier in der Regel nur mittels spezifischer Modifikation möglich. Beispieltext: „Systemanmeldungsprotokoll. Zielsystem: DEV 100“
Vorschlag A: Lösung 2 mit selbstpflegender Customizingtabelle
- Aufwand: 4h
- Customizingtabelle mit Pflegedialog (Klasse, Type, Nummer, Parameter 1-4, Text, Flag [Aktiv, Inaktiv, Unbestimmt])
- Enhancement in cl_chm1_instance->handle_message am Anfang
- Algorithmus zum automatischen Befüllen mit bisher unbekannten Nachrichten
- Logik zum ausblenden/ausfiltern von Nachrichten gemäß Customizingtabelle
- Test
Vorschlag B: Zusätzlich Lösung 4 implementieren
- Aufwand 1h (zusätzlich)
- Customizingtabelle um Feld TASK_ID ergänzen
- Lösung aus cl_chm1_instance->handle_message in leicht abgewandelter Form auch am Ende von FUBA /TMWFLOW/APPL_STAT_MESSAGE implementieren.
Code-Schnipsel:
METHOD CL_CHM1_INSTANCE->HANDLE_MESSAGE . ENHANCEMENT 1 ZSM_TEXT_LOG_FILTER. "active version DATA: ls_tlf TYPE ZSM_TLF. *Build message text. MESSAGE ID im_message-msgid TYPE im_message-msgty NUMBER im_message-msgno INTO me->msg_text WITH im_message-msgv1 im_message-msgv2 im_message-msgv3 im_message-msgv4. *Get customizing entry. *We are not looking at message parameters actually...maybe in future. SELECT SINGLE * INTO ls_tlf FROM ZSM_TLF WHERE MSGID = im_message-msgid AND MSGNO = im_message-msgno AND MSGTY = im_message-msgty. *Create customizing entry if not existing yet. IF sy-subrc <> 0. ls_tlf-MSGID = im_message-msgid. ls_tlf-MSGNO = im_message-msgno. ls_tlf-MSGTY = im_message-msgty. ls_tlf-ACTIVE_FLAG = ''. ls_tlf-MSGV1 = im_message-msgv1. ls_tlf-MSGV2 = im_message-msgv2. ls_tlf-MSGV3 = im_message-msgv3. ls_tlf-MSGV4 = im_message-msgv4. ls_tlf-langu = sy-langu. ls_tlf-MSGTX = me->msg_text. INSERT INTO ZSM_TLF values ls_tlf. ENDIF. *Check whether message should be filtered out. IF ls_tlf-active_flag = '-'. * write message into ppf-log CALL METHOD cl_log_ppf=>add_message EXPORTING ip_problemclass = '4' ip_handle = im_appl_log. * Exit routine without writing message to text log. RETURN. ENDIF. ENDENHANCEMENT. MESSAGE ID im_message-msgid TYPE im_message-msgty NUMBER im_message-msgno INTO me->msg_text WITH im_message-msgv1 im_message-msgv2 im_message-msgv3 im_message-msgv4. * write message into ppf-log CALL METHOD cl_log_ppf=>add_message EXPORTING ip_problemclass = '4' ip_handle = im_appl_log. DATA l_text255 TYPE char255. l_text255 = me->msg_text. * write message into action-log (text in change document) CALL METHOD cl_hf_helper=>insert_notice EXPORTING im_text = l_text255 im_guid = me->if_socm_instance_attributes~change_document_id. ENDMETHOD.