Infuencing SAP ChaRM 2019

Hello, I just want to inform you about two important SAP Customer Influencing programs which are improving and rounding up the current SAP products of SAP CRM, SAP Web Client UI and SAP ChaRM. If you have any improvement or round-up ideas please use the programs, share your ideas and influence the products!

SAP Customer Connect „CRM 2019“:

https://influence.sap.com/crm2019 https://influence.sap.com/sap/ino/#/campaign/1425

23.10.2018 collection start
03.12.2018 collection end
Current status at 19.02.2019: Active, In discussion, In development

SAP Customer Connect „Change and Release Management 2019 in SAP Solution Manager“:

https://influence.sap.com/solman-charm2019
https://influence.sap.com/sap/ino/#/campaign/1717

08.01.2019 collection started
08.03.2019 collection end
Current status at 19.02.2019: Active, In Collection of improvement requests

My involvement (on ChaRM 2019, till 19.02.2019):

114 improvement requests at all
72 comments from Peter Weigel
19 improvement requests from Peter Weigel
10 improvement requests from Peter Weigel already scoped (more than 10 votes)

Systemaufrischung, ChaRM, Arbeitsmodus und Lebenszyklusstatus

Frage: Es ist bei uns eine Systemaufrischung mittels Systemkopie PRD -> QAS geplant. Laut SAP-Hinweis 885343 ist in der LMDB der Lebenszyklusstatus von „Aktiv“ auf „Inaktiv“ zu ändern. Laut Dokumentation zum Lebenszyklusstatus soll stattdessen der Arbeitsmodus im Work Mode Management geändert werden. Was denn nun? Reicht eines oder besser beides?

Antwort: Beides.

Details:

Der SAP Solution Manager bestand früher aus vielen einzelnen Funktionalität die gar nicht oder schlecht miteinander integriert waren. Teilweise ist das ja immer noch so.

‎Das Work Mode Management hieß früher Downtime Management und war ein Bestandteil der Technical Administration (früher Central System Administration). Diese Funktionalität nutzte schon immer den IT-Kalender und gehörte thematisch zum ALM-Prozess Technical Operation. Dort ist auch das Technical Monitoring angesiedelt. Später kamen noch weitere Monitorings, das Job Scheduling Management, das Service Level Management etc. hinzu, welche teilweise willkürlich dem Business Process Operations zugeordnet wurden (warum gehört das Job Scheduling Management zum BPO aber das End-User Experience Monitoring zum TO?). Später wurden die verschiedenen Monitore in der Monitoring und Alerting Infrastructure (MAI) vereinheitlicht. Aus dieser Historie heraus ist auch verständlich, dass das Monitoring und SLA-Management die Work Modes berücksichtigt, um das Auslösen von Alerts temporär zu unterbinden, Jobs temporär auszuplanen oder geplante Downtimes in der SLA-Berechnung zu berücksichtigen.

Ein völlig unabhängiger Solman-Zweig ist das ChaRM. Dieses hat schon immer eine hohe Integration in das TMS und das Landscape Management. Vor der LMDB gab es ja die SMSY (Solution Manager System ‎Administration Database oder so ähnlich). Dort gab es ein Flag „Temporary Inactive“ welches beim Umbau zur LMDB durch den Lifecyclestatus abgelöst wurde. Aus dieser Historie heraus ist verständlich, dass ChaRM den Lifecyclestatus verwendet, um zu erkennen, dass ein Nutzen der RFC-Verbindungen (READ, TWM, TRUSTED) temporär nicht möglich ist und folglich alle Funktionen mit Bezug zum Managed System nicht ausführbar sind.

Tatsächlich wird der Lifecyclestatus benötigt. Ich habe Fälle erlebt, in denen ein System nicht verfügbar war und eine RFC-Destination echt eingefroren ist, statt einen Fehler zu werfen. Das würde dann dazu führen, dass ChaRM einfriert, also hängen bleibt. Und genau das verhindert der Lifecycle-Status.

Der Lifecyclestatus hat übrigens noch eine weitere Funktion. Wenn eine Systemlandschaft aufgebaut wird, dann sind ja einige Systeme nicht von Anfang an da. Da man aber diese Systeme bereits für verschiedene Funktionen wie Transportwesen (Sammeln von Transporten in Importqueue) oder Solution Dokumentation (Dokumentieren von Testfällen) benötigt, legt man die im TMS als virtuelles System und in der LMDB mit Lifecyclestatus „Planned“ an. Die Wirkung ist die selber wie Inaktiv: RFC-Destinationen werden sofern überhaupt existent, nicht genutzt und das Fehlen der RFC-Destinationen‎ wird nicht angemeckert. Eine äquivalente Funktion im Work Mode Management gibt es nicht.

Mittlerweile werden die Features immer mehr integriert. Der IT-Kalender wird mittlerweile von ChaRM genutzt und die Guided Procedure welche ursprünglich für SOLMAN_SETUP entwickelt wurde, dann für das Monitoring entdeckt wurde, wird mittlerweile auch von ITSM verwendet.

Eine Zusammenführung‎ von Work Mode und Lifecyclestatus ist mir jedoch nicht bekannt. Und wie ich SAP SE kenne finden die dafür eine super Begründung: Ein Administrator möchte eine Wartung durchführen. Hierfür plant er im Work Mode Management eine Downtime, um während dieser Zeit Jobs zu suspendieren, Alerts abzuschalten, User-Logins zu deaktivieren und vor allem um die Downtime für das SLA-Management als geplante Downtime zu dokumentieren. Teil der Wartung ist auch das Einspielen von Support Packages und das Transportieren von Transporten. Hierfür wird ChaRM genutzt. Während eines kleinen Zeitfensters wird das System dann tatsächlich technisch nicht verfügbar sein. Hier wird temporär der Lifecyclestatus gesetzt um technische Fehlfunktionen aufgrund der Nichterreichbarkeit zu vermeiden. Folglich können Workmode „Planned Downtime“ und Lifecyclestatus nicht zusammen geführt werden.

Natürlich ist das quatsch. Eine Zusammenführung macht sehr wohl Sinn, allerdings in Form einer Unterscheidung zwischen Business Downtime und Technical Downtime. Mir ist jedoch bis zum heutigen Tag nicht bekannt, dass dies von einem Kunden vorgeschlagen und von SAP umgesetzt wurde. Möglicherweise gibt es diese Integration, aber bereits und keiner (oder ich) weiß es nicht.

Machen Sie sich bewusst, dass es Unterschiede zwischen beiden Schaltern gibt und nutzen Sie beide. Wenn Sie den Lifecyclestatus nicht setzen, wird der Solman im schlimmsten Fall ‎bei ein paar Aktionen hängen bleiben oder merkwürdige Fehler auslösen. Es wird aber nichts schlimmes passieren, nichts kaputt gehen und keine aufwendigen Nacharbeiten/Datenbereinigungen erforderlich machen. Wenn Sie den Work Mode nicht setzten, werden Sie nur von tausenden Alerts überschwemmt und Ihre Endkunden freuen sich über die Strafzahlungen wegen den gerissenen SLAs ;-). Wenn Sie eine Landschaft neu aufbauen, gibt es keine Alternative zum Lifecyclestatus, da das Work Mode Management erst im laufenden Betrieb relevant wird.

TSOCM_CR_CONTEXT

One of the most important and at the same time one of the worst designed tables in ChaRM is TSOCM_CR_CONTEXT. This table is used to store cycle assignment of CR and CD. At the same time it is used to plan the scope of a CR. There is no proper API existing, there are a lot of code snippets which are manipulating or evaluating the entries of this table mostly without sense.

This blog should help you to understand this table from technical point of view.

Code snippets / Reference:

  • CL_IM_AI_CRM_COPY_BADI->IF_EX_CRM_COPY_BADI~ORDERADM_H
  • cl_al_crm_cm_utility=>get_sub_docs_4_cyc_by_cr_ctxt (SAP note 2592607)
  • cl_wdcm_extchreq_scoping_asst=>GET_CR_PROJECT_BY_FOLLOW_ON (SAP note 2581812)

API:

  • CL_AI_CRM_CM_CR_CONT_RUN_BTIL=>GET_CR_CONTEXT
  • cl_ai_crm_cm_cr_cont_run_btil=>update_cr_context
  • cl_wdcm_extchreq_scoping_asst=>read_context_db
  • cl_wdcm_extchreq_scoping_asst=>update_context_db
  • cl_aic_cm_scope_backend_api=>read
  • cl_aic_cm_scope_backend_api=>UPDATE
  • cl_aic_cm_scope_backend_api=>SAVE_INTO_DB

Header Context:

  • GUID: GUID of Transaction
  • ITEM_GUID: = GUID
  • CREATED_GUID: Empty for CR, = GUID for CD
  • CREATED_BY: Empty
  • CREATED_ON: Empty
  • PROCESS_TYPE: Process Type of Transaction (CR and CD)
  • IBASE: Empty
  • IBASE_INSTANCE: Empty
  • PRODUCT_ID: Empty
  • SID: Empty
  • MANDT: Empty
  • PROJECT_ID: Assigned change cycle (SM 7.0/7.1: ID of assigned Project)
  • SOLUTION_ID: Empty (SM 7.0/7.1: ID of assigned Solution)
  • SLAN_ID: Change Control landscape or Solution
  • SBRA_ID: Branche
  • APPR_RESULT: Empty
  • APPROVED: Empty
  • APPROVE_STATUS: Empty
  • OBJECT_ID_DESCR: Empty

Scope Context:

  • GUID: GUID of CR Transaction
  • ITEM_GUID: = Unique GUID (can be GUID of CD if scope context was created after CD creation)
  • CREATED_GUID: Empty if CD is not created yet, otherwise GUID of CD
  • CREATED_BY: Creator of CD (see CRMD_ORDERADM_H-CREATED_BY of CD)
  • CREATED_ON: Creation Timestamp (see CRMD_ORDERADM_H-CREATED_AT of CD)
  • PROCESS_TYPE: Process Type of CD Transaction (see CRMD_ORDERADM_H-PROCESS_TYPE of CD)
  • IBASE: Ibase (will be transferred to REFOBJ on CD creation)
  • IBASE_INSTANCE: IBase Instance (will be transferred to REFOBJ on CD creation)
  • PRODUCT_ID: Product ID of IBase Component
  • SID: System ID of IBase Component (if LMDB object)
  • MANDT: Client of IBase Component (if LMDB object)
  • PROJECT_ID: Assigned change cycle
  • SOLUTION_ID: Empty
  • SLAN_ID: Change Control landscape or Solution
  • SBRA_ID: Branche
  • APPR_RESULT: „A“ or „F“ for approved, „“ for unapproved
  • APPROVED: Empty
  • APPROVE_STATUS: Used to store user status of CR in case of scope extension process
  • OBJECT_ID_DESCR: Description of CD (see CRMD_ORDERADM_H-DESCRIPTION of CD)

How to get configuration item system data fresh from CR/CD (maybe to update TSOCM_CR_CONTEXT)?

Solution 1 (working for LMDB and CMDB objects but not for text components):

  1. cl_ai_crm_object_api=>get_object_id_from_order
  2. cl_hf_helper=>get_sys_data
  3. cl_hf_helper=>get_ibase_comp_4_product
  4. CRM_IBASE_COMP_GET_DETAIL

Solution 2 (working for text components as well):

  1. cl_hf_helper=>get_ibase_instance_of_chng_doc
  2. CRM_IBASE_COMP_GET_DETAIL
  3. Extract OBJECT_ID (not PRODUCT_ID!)
  4. cl_hf_helper=>get_sys_data

How to get transaction data (needed to build context entries)?

  • cl_hf_helper=>get_header_of_chng_doc
  • cl_hf_helper=>get_proc_type_of_chng_doc
  • cl_hf_helper=>get_predoc_of_chng_doc
  • cl_hf_helper=>get_sucdocs_of_chng_doc
  • cl_hf_helper=>get_bo_links_of_chng_doc (to get assigned cycle of CD)
  • cl_hf_helper=>get_bo_tasklist_of_chng_doc (to get assigned tasklist of CD)
  • cl_al_crm_cm_utility=>get_smi_project_by_tasklist (to get cycle id or SM 7.0/7.1 project id of task list)

 

Note: These information are taken from my ABAP report which was developed to create entries in TSOCM_CR_CONTEXT table for old SM 7.0/7.1 change transactions after upgrade to SM 7.2. These information are not sufficient to re-implement this report. However I hope it will help you to understand the technical dependencies.

 

 

 

Gesicherte Suchen teilen

Gesicherte Suchen als Lösung zum Bereitstellen von „Arbeitsvorräten“:

Im SAP Solution Manager 7.0 wurden mittels Varianten des Reports CRM_DNO_SERVICE_MONITOR (Transaktion CRM_DNO_MONITOR) verschiedene Arbeitsvorräte für Endanwender geschaffen. Es gibt mehrere Möglichkeiten, diese Arbeitsvorräte im SAP Web Client UI wieder bereit zu stellen:

  1. Normale Vorgangssuche nach komplexen Kriterien
  2. Gesicherte Suche
  3. MyMessageWidget
  4. Inbox
  5. Servicemonitor

Die Lösung der „Gesichterten Suchen“ entspricht am ehesten dem aus dem SAP GUI und Work Center gewohnten Arbeitsvorrat.

Folgende Suchkriterien sind i.R. zu verwenden:

  • Vorgangsart
  • Status
  • Zugeordnet zu „Ich“ (ggf. alternativ: Mit meiner Beteiligung)

Gesicherte Suchen strukturieren:

Gesicherte Suchen werden aktuell als Flache Liste angezeigt. Eine Verwaltung als Baumstruktur mit Zusatzinformationen (z.B. Anzahl der Treffer) ist möglich: 2468458 – Neues Tray für eigene gesicherte Suche auf Startseite.

Gesicherte Suchen teilen:

Das Teilen von Gesicherten Suchen für alle Anwender einer Benutzerrolle ist mit dem Central Sharing Tool möglich. Allerdings erfüllt das nicht unsere Zwecke, da der Endanwender aktiv werden muss um die geteilten Suchen zu importieren. Außerdem steht die Suche dann zwar als zentrale Suche zur Verfügung, wird aber nicht auf der Startseite als „Von mir gesicherte Suche“ angezeigt.

Aus diesem Grund nutzen wir die andere Lösung mittels Anpassung der Einträge in Tabelle CRMD_SHORTCUT und CRMD_SHORTCUT_T. Zur Automatisierung wurde Report ZWUI_SHARE_SAVED_SEARCHES entwickelt.

Ablauf:

  1. Suche alle gesicherten Suchen welche mit dem Namen „SHARE:“ beginnen. Schränke Suche ggf. auf Benutzerrolle (APPLICATION), Ersteller (OWNER KEY) oder Bezeichnung (DESCRIPTION) ein.
  2. Ändere AUDIENCE TYPE von USER zu ROLE. Trage in AUDIENCE KEY die Benutzerrolle (Wert aus Feld APPLICATION) ein. Pflege Bezeichnung in Tabelle CDMD_SHORTCUT_T (Bezeichnung ohne „SHARE:“).

Hinweise:

  • Anwender welche teilbare gesicherte Suchen erstellen wollen, müssen diese nur mit „SHARE:“ benennen und den Report ausführen. Der Zusatz „SHARE:“ wird hierbei entfernt.
  • Alternative zur Identifizierung mittels „SHARE:“: Alle gesicherte Suchen eines dedizierter User oder eine dedizierte Benutzerrolle.
  • Die so geteilten gesicherten Suchen lassen sich nach Ausführung ändern. Hier dürfen jedoch nur die Suchwerte nicht jedoch die Selektionskriterien geändert werden.
  • Ändern sich auch die Suchkriterien, so müssen neue gesicherte Suchen angelegt werden. Wird der exakt selbe Name gewählt (ohne SHARE:), so wird die Gesicherte Suche überschrieben und ist dann nicht mehr geteilt. Anschließend ist der Name zu ändern + zu speichern, die andere gesicherte Suche (ohne „SHARE:“) zu löschen und der Report auszuführen um eine erneute Teilung zu erwirken. Alternative kann die zu ändernde gesicherte Suche gelöscht werden. Dann wird eine neue gesicherte Suche inkl. Namenszusatz „SHARE:“ erstellt und der Report ausgeführt.
  • Das Überschreiben von geteilten gesicherten Suchen ist nur vom Eigentümer der gesicherten Suche erlaubt, ansonsten erscheint eine Fehlermeldung. Der Eigentümer (OWNER) kann mittels SE16 in Tabelle CRMD_SHORTCUT geändert werden.
  • Beim Speichern von Gesicherten Suchen im Web UI kann nur ein sehr kurzer Name gewählt werden. Tatsächlich kann der Name aber bis zu 80 Zeichen lang sein. Hierzu müssen mittels SE16 die Texte in den Tabellen CRMD_SHORTCUT und CRMD_SHORTCUT_T angepasst werden.
  • Verweise: http://sapuniversity.eu/saved-searches-publish-a-search-to-all-users-of-a-sap-crm-business-role/

Gesicherte Suchen transportieren:

Gesicherte Suchen sind Personalisierungen und damit nicht transportierbar. Wir wollen aber ausnahmsweise einmalig alle Gesicherten Suchen aus DEV nach PRD transportieren, um die GoLive-Aktivitäten maximal zu automatisieren. Hierzu können wir in den GoLive-Workbench-Transport R3TR-TABU-Einträge für CRMD_SHORTCUT, CRMD_SHORTCUT_T und CRMT_DYN_QUERY mit Schlüssel „*“ aufnehmen. Hierdurch werden alle Gesicherten Suchen zum Zeitpunkt der Freigabe transportiert. Es ist keine manuelle GoLive-Aktivität erforderlich.

Der Report ZWUI_SHARE_SAVED_SEARCHES führt aktuell keine Transporte durch. Sofern häufig Änderungen an den geteilten gesicherten Suchen vorgenommen werden und ein Transport benötigt wird, wäre dies eine sinnvolle Erweiterung. Aktuell wird jedoch von einem einmaligen Transport aufgegangen.

*&---------------------------------------------------------------------*
*& Report  ZWUI_SHARE_SAVED_SEARCHES
*&
*&---------------------------------------------------------------------*
*& Share saved search to all users of a business role.
*&---------------------------------------------------------------------*
REPORT zwui_share_saved_searches.

TABLES:
crmd_shortcut.

SELECT-OPTIONS:
s_appl FOR crmd_shortcut-application,
s_owner FOR crmd_shortcut-owner_key,
s_descr FOR crmd_shortcut-description.

PARAMETER:
p_prefix TYPE crmd_shortcut-description DEFAULT 'SHARE:',
p_test TYPE oax DEFAULT abap_true.

*-------------------------------------------------------------------------
START-OF-SELECTION.

DATA(lv_description) = p_prefix && '%'.
DATA(lv_start) = strlen( p_prefix ).

*Get datasets according to search criteria.
SELECT *
INTO TABLE @DATA(lt_shortcut)
FROM crmd_shortcut
WHERE application IN @s_appl AND
owner_type = 'USER' AND
owner_key IN @s_owner AND
description IN @s_descr AND
description LIKE @lv_description.

*-------------------------------------------------------------------------
END-OF-SELECTION.

DATA:
lt_shortcut_update   TYPE TABLE OF crmd_shortcut,
lt_shortcut_t_insert TYPE TABLE OF crmd_shortcut_t.

*process every found entry.
LOOP AT lt_shortcut ASSIGNING FIELD-SYMBOL(<fs_shortcut>).

WRITE: / <fs_shortcut>-description.

*Sharing already done.
IF <fs_shortcut>-audience_type = 'ROLE'.

*Inform end-user.
WRITE: '> Is already shared. Nothing to do.'.

*Share now!
ELSE.

*CRMD_SHORTCUT
<fs_shortcut>-audience_type = 'ROLE'.
<fs_shortcut>-audience_key = <fs_shortcut>-application.
APPEND <fs_shortcut> TO lt_shortcut_update.

*CRMD_SHORTCUT_T
APPEND INITIAL LINE TO lt_shortcut_t_insert ASSIGNING FIELD-SYMBOL(<fs_shortcut_t>).
MOVE-CORRESPONDING <fs_shortcut> TO <fs_shortcut_t>.
<fs_shortcut_t>-langu = sy-langu. "No multi language support.
<fs_shortcut_t>-description = <fs_shortcut>-description+lv_start.
SHIFT <fs_shortcut_t>-description LEFT DELETING LEADING space.

*Inform end-user.
WRITE: |> Is now shared to all users of business role { <fs_shortcut>-audience_key }.|.

ENDIF.

ENDLOOP.

*Perform database update to CRMD_SHORTCUT and CRMD_SHORTCUT_T.
*No update on CRMT_DYN_QUERY needed yet.
IF p_test = abap_false AND lt_shortcut_update IS NOT INITIAL.
UPDATE crmd_shortcut FROM TABLE lt_shortcut_update.
MODIFY crmd_shortcut_t FROM TABLE lt_shortcut_t_insert.

COMMIT WORK AND WAIT.
ENDIF.

Kundenfelder auf mehrere Zuordnungsblöcke verteilen

SAP CRM Geschäftsvorgänge (inkl. SAP Solution Manager ITSM und ChaRM) können sehr einfach um kundeneigene Felder erweitert werden. Die Erweiterung erfolgt üblicherweise mittels Application Enhancement Tool (AET). Hierbei wird die Tabelle CRMD_CUSTOMER_H entsprechend erweitert.

Alternativ können auch CRMD_ORDERADM_H, CRMD_SERVICE_H und andere Teile des Geschäftsvorganges erweitert werden. Alternativ zum AET kann auch die Easy Enhancement Workbench (EEWB) genutzt werden. Oder aber man prägt manuell die Customer-Includes aus oder hängt Append-Strukturen an. Hier ist zu beachten, dass die Erweiterung mittels AET die bevorzugte Variante ist und die einzige Möglichkeit darstellt, um sicherzustellen, dass die neuen Felder auch von der Web UI Suche, dem SAP CRM Interactive Reporting etc. unterstützt werden.

Im SAP Web Client UI ist es vorgesehen, dass diese zusätzlichen Felder entweder im Detailsformular oder im Zuordnungsblock „Kundenspezifische Felder“ (manchmal auch „Benutzerspezifische Felder“ genannt) angezeigt werden. Bei sehr vielen kundeneigenen Feldern ist jedoch eine Verteilung auf mehrere Zuordnungsblöcke sinnvoll, erst recht wenn einige Zuordnungsblöcke abhängig von Berechtigungen ausgeblendet werden sollen. Hierfür sind folgende „Programmieraktivitäten“ durchzuführen:

  1. Paket ZWUI o.ä. anlegen.
  2. Erweiterungsset ZWUI o.ä. anlegen.
  3. Erweiterungsset aktivieren in View BSPWDV_EHSET_ASG. (Dies wird nicht transportiert und muss bei Go-Live wiederholt werden!)
  4. UI-Komponente AIC_CMCR_H erweiteren zu ZAIC_CMCR_H. (AIC_CMCD_H, AIC_INCIDENT_H etc. analog)
  5. Component Usages ZUBTCustomerH_01, ZUBTCustomerH_02, ZUBTCustomerH_03 o.ä. mit Verweis auf UI-Komponente BT_CUSTOMER_H hinzugefügen.
  6. Zuvor angelegte Component Usages der Overview Page zugewiesen.
  7. Kontextknotenbindung für „ZUBTCustomerH*“ implementieren (Component-Controller -> WD_USAGE_INITIALIZE).
  8. Konfiguration der Übersichtsseite und hierbei Einblenden der Zuordnungsblöcke abhängig von der Vorgangsart.
  9. Konfiguration der Zuordnungsblöcke abhängig vom Namen der Component Usage.
  10. Zum Steuern der Sichtbarkeit der neuen Zuordnungsblöcke sei auf Blog Zuordnungsblöcke bzw. Tabs im SAP Web Client UI dynamisch ausblenden verwiesen.