{"id":30523,"date":"2021-08-13T11:12:37","date_gmt":"2021-08-13T09:12:37","guid":{"rendered":"https:\/\/www.blue.works\/?p=30523"},"modified":"2026-02-17T13:55:11","modified_gmt":"2026-02-17T12:55:11","slug":"alm-kaffekraenzchen-iii-charm-warum-weshalb-wieso-teil-2","status":"publish","type":"post","link":"https:\/\/www.blue.works\/de\/alm-kaffekraenzchen-iii-charm-warum-weshalb-wieso-teil-2\/","title":{"rendered":"ALM Kaffeekr\u00e4nzchen III \u2013 ChaRM, warum, weshalb, wieso? \u2013 Teil 2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Die Technik hinter ChaRM<\/h2>\n\n\n\n<p>Im ersten Teil haben wir uns allgemeinen Themen gewidmet. In diesem zweiten Teil unserer Sommerblog-Serie geht es um die Technik des ChaRM.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Technik<\/h2>\n\n\n\n<p>Technisch betrachtet ist der ChaRM eine Legierung bestehend aus dem <a href=\"https:\/\/wiki.scn.sap.com\/wiki\/display\/CRM\/CRM+Business+Transactions\">CRM OneOrder<\/a>, dem Post Processing Framework (PPF), dem Aufgabenplan des Schedule Managers (SCMA \u2013 da der Hauptentwickler aus dem HR Bereich kam, hat er dieses dort sehr beliebte Werkzeug zum Starten von Reports mitgebracht) und dem Transport Management System (TMS mit CTS) mit einer Prise SMSY\/LMDB und IBase\/Configuration Items.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Grundger\u00fcst<\/h2>\n\n\n\n<p>Am Grundger\u00fcst hat sich in diesen f\u00fcnfzehn Jahren nichts Wesentliches ge\u00e4ndert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Status getriebener Workflow<\/h3>\n\n\n\n<p>Der Transport Workflow wird durch Statuswechsel realisiert. Die Statuswerte werden nicht direkt \u00fcber das Statusfeld ausgew\u00e4hlt, sondern \u00fcber <a href=\"https:\/\/help.sap.com\/viewer\/8b923a2175be4939816f0981b73856c7\/7.2.12\/de-DE\/925dcd51db328873e10000000a44538d.html\">PPF-Aktionen<\/a> gesetzt, die beim Sichern die \u201eMethode\u201c HF_SET_STATUS verwendet.<\/p>\n\n\n\n<p>Welcher Status wann gesetzt werden kann, entscheiden wiederum sogenannte \u201eScheduling\/Start Conditions\u201c des PPF Frameworks. Alle diese PPF Elemente arbeiten mit konstanten Status-Werten, was eine \u00c4nderung des Statusschemas sehr m\u00fchsam macht.<\/p>\n\n\n\n<p>Bisher befanden wir uns noch ziemlich im CRM Standard. ChaRM spezifisch ist hingegen das ChaRM Framework.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">ChaRM Framework<\/h3>\n\n\n\n<p>Zu jedem gesetzten Status gibt es eine Liste von ChaRM \u201eAktionen\u201c und \u201eKonsistenzpr\u00fcfungen\u201c, die bei Fehler eine Meldung generieren und eventuell den Statuswechsel abbrechen.<\/p>\n\n\n\n<p>Ein Beispiel: Beim Statuswechsel eines \u00c4nderungsdokuments auf ToBeTested wird zuerst die Aktion \u201eCLEAR_EMPTY\u201c ausgef\u00fchrt, die alle leeren Aufgaben und Transporte beseitigt, danach wird die Aktion \u201eCOPY_ALL_ENH\u201c ausgef\u00fchrt, die die St\u00fcckliste des \u201eechten\u201c Transports in einen frisch erzeugten Transport of Copies (ToC) kopiert, diesen exportiert und in das Testsystem importiert. \u00dcberpr\u00fcft wird, ob alle Aufgaben freigegeben sind (eine Bedingung) und ob der ToC fehlerfrei in das QA-System importiert wurde (ein Ergebnischeck).<\/p>\n\n\n\n<p>Anfangs gab es nur eine Liste von Aktionen gefolgt von den Konsistenzpr\u00fcfungen. Letztere haben aber einen doppelten Charakter. Einige sind Bedingungen f\u00fcr Aktionen, andere \u00fcberpr\u00fcfen das Ergebnis von Aktionen. So begannen viele Anwender, zus\u00e4tzliche Status anzulegen, um feinzutunen. Also hat SAP die sp\u00e4tere Ausf\u00fchrungszeit von Aktionen eingef\u00fchrt (d.h. die Aktion wird nach den Pr\u00fcfungen ausgef\u00fchrt). Schlie\u00dflich wurde das Ganze mit der sp\u00e4teren Ausf\u00fchrungszeit von Pr\u00fcfungen abgerundet, womit auch der Erfolg der sp\u00e4ten Aktionen \u00fcberpr\u00fcft werden kann.<\/p>\n\n\n\n<p>Die Hoffnung, dass dieses wackelige vierschichtige Gebilde mit dem neuen Datenmodell zu 7.2 vereinfacht wurde (1. Ausf\u00fchrungsbedingung \u2192 2. Aktion \u2192 3. Ergebnischeck) hat sich leider nicht erf\u00fcllt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Aufgabenplan-Reports<\/h3>\n\n\n\n<p>Die richtige Arbeit wird durch spezialisierte Reports ausgef\u00fchrt, die alle mit dem Pr\u00e4fix \u201e\/TMWFLOW\/SCMA_\u201c im aktiven Aufgabenplan startbereit sind und die intern \u00fcber den Funktionsbaustein \/TMWFLOW\/TASK_START1 aufgerufen werden.<\/p>\n\n\n\n<p>Man kann diese Aufrufe, deren Parametrisierung und die Meldungen der Laufzeit im Assignment Block \u201eApplication Log\u201c sehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zwei Arbeitsweisen<\/h3>\n\n\n\n<p>Seit Ersteinf\u00fchrung gibt es zwei Varianten, den ChaRM zu leben: Projekt- und Phasen-orientiert mit der Normaler \u00c4nderung (SDMI\/SMMJ) und als Menge von Einzel\u00e4nderung mit dem Hotfix (SDHF\/SMHF).<\/p>\n\n\n\n<p>Diese zwei Arbeitsweisen unterscheiden sich durch die Art des Imports: Erstere (Projekt) importiert immer mit dem tp Befehl \u201eIMPORT PROJECT ALL\u201c alles, was f\u00fcr ein ChaRM Projekt in der Import Queue bereitsteht, letztere (Hotfix) mit dem tp Befehl \u201eIMPORT SUBSET\u201c genau die Transporte, die zu dem Hotfix geh\u00f6ren.<\/p>\n\n\n\n<p>Da der Hotfix Transporte aus der richtigen Reihenfolge herausrei\u00dft, werden diese bei Projekt- und Phasen-Orientierung nur \u201evorab\u201c importiert, d.h. sie warten weiterhin auf den finalen Projekt-Import, um diesmal mit Einhaltung der richtigen Reihenfolge importiert zu werden. Au\u00dfer: man will es nicht, weil man nur in Einzel\u00e4nderungen denkt (s.u.), und daher statt der Aufgabenplanvariante SAP0 (Hotfix als Vorabimport) die Variante SAP1 verwendet, die nur finale Importe kennt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hotfix<\/h3>\n\n\n\n<p>Da der Hotfix der Mentalit\u00e4t der Einzel\u00e4nderung entspricht (s.u.), war er sehr beliebt, doch er war auch sehr teuer, denn jeder Hotfix legt einen eigenen Aufgabenplan mit Pr\u00e4fix H an, der aus hunderten von Tabelleneintr\u00e4gen besteht. Oft war das, als ob man mit einem Panzer die Zeitung holte. Seitdem die normale \u00c4nderung (SMMJ) sich in eine dringende verwandeln kann, sollte man ihn meiden und nur in der Test oder Go-Life Phase (s.u.) einsetzen, denn er ist sehr gef\u00e4hrlich, da er beim Statuswechsel auf ToBeTested den originalen Transport freigibt. Wehe wenn er zu lange in diesem Status verfault: Man riskiert schnell einen Downgrade durch einen \u00dcberholer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Normale \u00c4nderung<\/h3>\n\n\n\n<p>Die normale \u00c4nderung ist hingegen sehr komfortabel und sicher. F\u00fcr die funktionalen Tests innerhalb des Dokuments (Status ToBeTested) wird das QA System nur durch ToCs (s.o.) beliefert, der originale Transport bleibt \u00e4nderbar, bis der Tester sein OK gibt. Zweiter Vorteil der ToCs: Sie bef\u00fcllen nicht die Import Warteschlange des Folgesystems mit Vormerkungen. Erst wenn der Tester sein OK gibt, wird der echte Transport freigegeben und in das QA System importiert, und damit in das Belieferungssystem vorgemerkt.<\/p>\n\n\n\n<p>Wenn man in diesen Vorgang nicht manuell eingreift, kann nichts schief gehen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>ChaRM, warum, weshalb, wieso? \u2013 Ein kurzer Abriss eines ALM-Enthusiaten &#8211; Teil 2<\/p>\n","protected":false},"author":16,"featured_media":30524,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[344],"tags":[295,336],"class_list":["post-30523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-alm-kaffeekraenzchen-das-alm-magazin","tag-charm","tag-kaffeekraenzchen"],"acf":[],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/www.blue.works\/wp-content\/uploads\/2021\/08\/history-in-hd-2MUqdhKBMzw-unsplash-scaled.jpg","_links":{"self":[{"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/posts\/30523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/comments?post=30523"}],"version-history":[{"count":5,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/posts\/30523\/revisions"}],"predecessor-version":[{"id":45251,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/posts\/30523\/revisions\/45251"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/media\/30524"}],"wp:attachment":[{"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/media?parent=30523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/categories?post=30523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blue.works\/de\/wp-json\/wp\/v2\/tags?post=30523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}