{"id":13,"date":"2012-07-04T13:17:34","date_gmt":"2012-07-04T11:17:34","guid":{"rendered":"http:\/\/workplace.skyworker.de\/?p=13"},"modified":"2023-08-22T10:39:24","modified_gmt":"2023-08-22T08:39:24","slug":"das-speichern-dieses-paketes-ist-aufgrund-eines-zirkelbezuges-nicht-moeglich","status":"publish","type":"post","link":"http:\/\/workplace.skyworker.de\/?p=13","title":{"rendered":"Das Speichern dieses Paketes ist aufgrund eines Zirkelbezuges nicht m\u00f6glich"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"13\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">0    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"13\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-down\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\">0<\/span>\r\n<\/div><\/div><p style=\"text-align: justify;\">In einigen Kundenumgebungen stand ich schon oft vor dem Problem, das beim setzen einer Abh\u00e4ngigkeit in den Eigenschaften eines Softwarepaketes die folgende Meldung auftrat:<br \/>\nDas Speichern dieses Paketes ist aufgrund eines Zirkelbezuges nicht m\u00f6glich.<\/p>\n<p><a href=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14\" alt=\"mx42_Zirkel_01\" src=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_01.jpg\" width=\"361\" height=\"129\" srcset=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_01.jpg 361w, http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_01-300x107.jpg 300w\" sizes=\"(max-width: 361px) 85vw, 361px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p style=\"text-align: justify;\">Diese Fehlermeldung hat nichts mit dem eigentlichen Paket zu tun, das man gerade bearbeitet, sondern wird aufgrund fehlerhafter Abh\u00e4ngigkeitseintr\u00e4ge aus anderen Paketen hervorgerufen. Das Problem ist, das in Paketen mehr als eine Abh\u00e4ngigkeit hinterlegt ist, und zwischen den Abh\u00e4ngigkeiten der Operator fehlt. Durch was diese fehlerhaften Eintr\u00e4ge erzeugt werden, kann ich nicht beurteilen, soll aber in der Vergangenheit auch in \u00e4lteren Versionen schon vorgekommen sein.<\/p>\n<p><a href=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_02.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-15\" alt=\"mx42_Zirkel_02\" src=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_02-300x173.png\" width=\"300\" height=\"173\" srcset=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_02-300x173.png 300w, http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_02.png 482w\" sizes=\"(max-width: 300px) 85vw, 300px\" \/><\/a><\/p>\n<p><strong>Bild 1<\/strong> (Hier fehlt in dem Bild der Operator (AND | OR) zwischen den Paketen)<\/p>\n<p style=\"text-align: justify;\">Um das Problem jetzt zu beheben, soll man die fehlerhaften Abh\u00e4ngigkeiten l\u00f6schen, damit man generell wieder Abh\u00e4ngigkeiten setzen kann. Leider erscheint beim Versuch die fehlerhaften Abh\u00e4ngigkeiten \u00fcber die Empirum Konsole zu l\u00f6schen die gleiche Fehlermeldung :-).<\/p>\n<p style=\"text-align: justify;\">Also muss man entweder das komplette Paket l\u00f6schen und wieder neu einbinden, was nat\u00fcrlich nicht immer sehr einfach ist, wenn es in der Administration mehrfach zugewiesen ist, oder man muss direkt in der Empirum Datenbank die fehlerhaften Abh\u00e4ngigkeiten korrigieren.<\/p>\n<p style=\"text-align: justify;\">Bevor wir aber soweit sind, muss man erst mal das, oder die Pakete ermitteln, die fehlerhafte Abh\u00e4ngigkeiten besitzen. In Umgebungen, die nur wenige Pakete verwenden, kann man dies noch \u00fcber die Empirum Konsole bew\u00e4ltigen und jedes Paket pr\u00fcfen. In Umgebungen mit mehreren hundert Paketen, w\u00e4re dieser Aufwand aber zu gro\u00df.<\/p>\n<p style=\"text-align: justify;\">Hierf\u00fcr habe ich ein PowerShell Skript geschrieben, welches die DDS Datei im User Verzeichnis auf dem Empirum Server pr\u00fcft und fehlerhafte Requirements mit entsprechenden Paketinformationen in eine Log Datei schreibt.<\/p>\n<p style=\"text-align: justify;\">Powershell Skript:\u00a0\u00a0 [ddownload id=188]<\/p>\n<p>[php]# Setzen diverser Variablen<\/p>\n<p>$cc_EmpUserPath = &quot;\\\\$Env:empirumserver\\configurator$\\User&quot;<\/p>\n<p>$cc_ddsFile = &quot;$cc_EmpUserPath\\swdepot.dds&quot;<br \/>\n$cc_ddsOutPut = &quot;$Env:TEMP\\swdepot_requirements.log&quot;<br \/>\n$a = [char]34<br \/>\n$cc_output = &quot;&quot;<\/p>\n<p># L\u00f6scht die Ausgabedatei, falls diese schon vorhanden ist<br \/>\nIf (test-path $cc_ddsOutPut) {Remove-Item $cc_ddsOutPut}<\/p>\n<p># Einlesen der DDS in eine Variable<br \/>\n$cc_input_dds = Get-Content $cc_ddsFile<\/p>\n<p># Anzahl der Zeilen in der DDS<br \/>\n$cc_NumberOfLines = Get-Content $cc_ddsFile | Measure-Object<br \/>\n$cc_NumberOfLinesCount = $cc_NumberOfLines.Count<\/p>\n<p># Einlesen jeder DDS Zeile. Es wird auf den Eintrag Requirements=* gepr\u00fcft, ist dieser vorhanden und nicht nur Requirements=, wird die Zeile in die Ausgabedatei geschrieben<\/p>\n<p># Z\u00e4hler f\u00fcr die Anzahl der abgearbeiteten Zeilen<br \/>\n$cc_counter = 0<br \/>\nforeach ($cc_line in $cc_input_dds) {<br \/>\n# Errechnung in Prozent der abgearbeiteten Zeilen<br \/>\n$cc_percent = $cc_counter \/ $cc_NumberOfLinesCount * 100<br \/>\n$cc_percent_int = [int]$cc_percent<\/p>\n<p># Ersetze &quot; durch \u00a7 und [ durch ~, damit diese als Vergleichgswert in den IF Abfragen angewendet werden k\u00f6nnen<br \/>\n$cc_lineReplaced_1 = $cc_line.replace(&quot;$a&quot;,&quot;\u00a7&quot;)<br \/>\n$cc_lineReplaced = $cc_lineReplaced_1.replace(&quot;[&quot;,&quot;~&quot;)<\/p>\n<p># Zwischenspeichern des Paketnamens<br \/>\nIf ($cc_lineReplaced -like &quot;~*&quot;){<br \/>\n$cc_package_name = $cc_line<br \/>\n}<\/p>\n<p># Zwischenspeichern der Paket ID<br \/>\nIf ($cc_lineReplaced -like &quot;SoftwareID=*&quot;){<br \/>\n$cc_package_id = $cc_line<br \/>\n}<\/p>\n<p># Abfrage welche Zeile Requirements=* beinhaltet<br \/>\nIf ($cc_lineReplaced -like &quot;Requirements=*&quot;){<br \/>\n# Grafische Ausgabe<br \/>\ncls<br \/>\nwrite-host &quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&quot;<br \/>\nwrite-host &quot;&#8212;&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Requirements Check\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8212;&#8211;&quot;<br \/>\nwrite-host &quot;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&quot;<br \/>\nwrite-host &quot; &quot;<br \/>\nwrite-host &quot;$cc_percent_int % von 100% ausgewertet&quot;<br \/>\nwrite-host &quot; &quot;<br \/>\nwrite-host &quot; &quot;<br \/>\nwrite-host &quot;Fehlerhafte Requirements&quot;<br \/>\nwrite-host &quot; &quot;<br \/>\nwrite-host $cc_output<\/p>\n<p># Abfrage welche Zeile nicht nur Requirements= beinhaltet<br \/>\nIf ($cc_lineReplaced -ne &quot;Requirements=&quot;){<\/p>\n<p># Abfrage welche Requirements fehlerhafte Eintr\u00e4ge haben<br \/>\nIf ($cc_lineReplaced -like &quot;*\u00a7\u00a7*&quot; -OR $cc_lineReplaced -like &quot;*\u00a7! \u00a7*&quot;){<\/p>\n<p># Ersetze &quot; durch \u00a7 und [ durch ~<br \/>\n$cc_lineReplaced_1 = $cc_line.replace(&quot;\u00a7&quot;,&quot;$a&quot;)<br \/>\n$cc_lineReplaced = $cc_lineReplaced_1.replace(&quot;~&quot;,&quot;[&quot;)<\/p>\n<p># Ausgabe und schreiben der fehlerhaften Pakete in die Ausgabedatei<br \/>\n$cc_output = $cc_output + &quot;$cc_package_name`r`n$cc_package_id`r`n$cc_lineReplaced`r`n`r`n&quot;<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p>$cc_output | out-file -Encoding Ascii $cc_ddsOutPut<br \/>\n$cc_counter++<br \/>\n}[\/php]<\/p>\n<p>Gepr\u00fcft werden zwei Arten von fehlerhaften Requirement Eintr\u00e4gen in der DDS. Zum einen Pakete ohne Operator zwischen zwei Abh\u00e4ngigkeiten, und zum anderen Pakete ohne Operator zwischen zwei Abh\u00e4ngigkeiten, die mit NOT (NOT = ! in der DDS) markiert sind.<\/p>\n<p style=\"padding-left: 30px;\">Requirement Packages mit einem fehlenden Operator dazwischen<br \/>\n<span style=\"color: #000000;\">Requirements=&#8220;Test\\Anwendung\\1.0<span style=\"color: #ff0000;\"><strong>&#8222;&#8220;<\/strong><\/span>Test\\Anwendung\\2.0&#8243;<\/span><br \/>\nRequirement Packages mit einem NOT Flag (in der DDS ist NOT = !) und einem fehlenden Operator dazwischen<br \/>\n<span style=\"color: #000000;\">Requirements=! &#8222;Test\\Anwendung\\1.0<span style=\"color: #ff0000;\"><strong>&#8222;! &#8222;<\/strong><\/span>Test\\Anwendung\\2.0&#8243;<\/span><\/p>\n<p style=\"text-align: justify;\">In dem PowerShell Skript werden die rot markierten Zeichenfolgen in den Requirements Eintr\u00e4gen der DDS gepr\u00fcft, und das Ergebnis im %TEMP% Verzeichnis des Anwenders der das PowerShell Skript ausf\u00fchrt in die Datei swdepot_requirements.log geschrieben. Ebenfalls wird die SoftwareID des Paketes, die man im weiteren Verlauf noch braucht, ausgelesen und in die Log Datei geschrieben.<\/p>\n<p>Beispiel Log Datei:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #000000;\">[Test\\Anwendung\\3.0] SoftwareID=DCD0C921-A2CE-493B-9243-111111111111 Requirements=! &#8220; Test\\Anwendung\\1.0&#8243;! &#8222;Test\\Anwendung\\2.0&#8220;<\/span><\/p>\n<p><strong><span style=\"color: #ff0000;\"><a href=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/bt-attention-icon.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-91\" alt=\"bt-attention-icon\" src=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/bt-attention-icon.png\" width=\"32\" height=\"32\" \/><\/a>\u00a0 Die folgenden Schritte nur nach R\u00fccksprache mit dem MX42 Support durchf\u00fchren!<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\">Um die Abh\u00e4ngigkeit jetzt korrigieren, und einen Operator zwischen zwei Pakete einf\u00fcgen zu k\u00f6nnen, sucht man in der Empirum Datenbank in der Tabelle <strong>SwDependencies<\/strong> alle Eintr\u00e4ge anhand der SoftwareID (Spalte 2) heraus, die zu dem Paket geh\u00f6ren, das die fehlerhaften Abh\u00e4ngigkeiten beinhaltet.<\/p>\n<p><a href=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_04.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17\" alt=\"mx42_Zirkel_04\" src=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_04.png\" width=\"526\" height=\"141\" srcset=\"http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_04.png 526w, http:\/\/workplace.skyworker.de\/wp-content\/uploads\/2013\/11\/mx42_Zirkel_04-300x80.png 300w\" sizes=\"(max-width: 526px) 85vw, 526px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Die erste Zeile bezieht sich auf den ersten Paketeintrag unter Abh\u00e4ngigkeiten und die zweite Zeile auf den zweiten Paketeintrag unter Abh\u00e4ngigkeiten (<strong>Siehe Bild 1<\/strong>). Die Abh\u00e4ngigen Pakete sollte man sicherheitshalber \u00fcber die DepSoftwareID gegenpr\u00fcfen\u00a0 (kann man \u00fcber die DDS abgleichen).<\/p>\n<p style=\"text-align: justify;\">In der <strong>ANDOR<\/strong> Spalte der ersten Zeile ist, wie auch im <strong>Bild 1<\/strong> zu sehen, kein Operator f\u00fcr die Abh\u00e4ngigkeit gesetzt. Hier kann man jetzt die Datenbank manipulieren und einen Operator einf\u00fcgen 1 = AND und 2 = OR.<\/p>\n<p style=\"text-align: justify;\">Dies muss man f\u00fcr alle Pakete, die fehlerhafte Abh\u00e4ngigkeiten besitzen durchf\u00fchren.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>0 0 In einigen Kundenumgebungen stand ich schon oft vor dem Problem, das beim setzen einer Abh\u00e4ngigkeit in den Eigenschaften eines Softwarepaketes die folgende Meldung auftrat: Das Speichern dieses Paketes ist aufgrund eines Zirkelbezuges nicht m\u00f6glich.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,3,38],"tags":[5,9,4],"_links":{"self":[{"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/posts\/13"}],"collection":[{"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":7,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":190,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions\/190"}],"wp:attachment":[{"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/workplace.skyworker.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}