Keine Referenzierbaren Objekte in der Standort-Liste
-
Hallo Zusammen,
Wir verwenden die I-Doit Version 0.9.9-8 PRO als Produktivsystem und die version 0.9.9-9 PRO als Testumgebung.
Dabei haben wir folgendes Problem:
In der -9 Version kann man ganz normal die Standorte über Server->Editieren->Standort auswählen, in der -8 Version jedoch nicht, das Standort-Popup ist leer und zeige keine Objekte an, obwohl die Objekte in Räume / Gebäude exisitieren.Nachdem ich etwas gedebuggt habe, habe ich herrausgefunden das es einen kleinen unterschied zwischen den SQL Befehlen gibt, die die Standort-Liste liefern sollen.
Der normal funktionierende Befehl auf der Version 9 ist:
SELECT (SELECT COUNT(child.isys_catg_location_list__id) FROM isys_catg_location_list child INNER JOIN isys_obj childObject ON child.isys_catg_location_list__isys_obj__id = childObject.isys_obj__id INNER JOIN isys_obj_type childType ON childObject.isys_obj__isys_obj_type__id = childType.isys_obj_type__id INNER JOIN isys_cmdb_status ON childObject.isys_obj__isys_cmdb_status__id = isys_cmdb_status__id WHERE child.isys_catg_location_list__parentid = parentObject.isys_obj__id AND childType.isys_obj_type__container = 1) AS ChildrenCount, parent.*, parentObject.*, parentType.* FROM isys_catg_location_list parent INNER JOIN isys_obj parentObject ON parent.isys_catg_location_list__isys_obj__id = parentObject.isys_obj__id INNER JOIN isys_obj_type parentType ON parentObject.isys_obj__isys_obj_type__id = parentType.isys_obj_type__id WHERE TRUE AND parent.isys_catg_location_list__parentid = '1' AND parentType.isys_obj_type__container = 1 AND parentObject.isys_obj__status = '2' GROUP BY parent.isys_catg_location_list__id ORDER BY parentObject.isys_obj__title
und der nicht funktionierende Code der Version -8:
SELECT (SELECT COUNT(child.isys_catg_location_list__id) FROM isys_catg_location_list child INNER JOIN isys_obj childObject ON child.isys_catg_location_list__isys_obj__id = childObject.isys_obj__id INNER JOIN isys_obj_type childType ON childObject.isys_obj__isys_obj_type__id = childType.isys_obj_type__id INNER JOIN isys_cmdb_status ON childObject.isys_obj__isys_cmdb_status__id = isys_cmdb_status__id WHERE child.isys_catg_location_list__parentid = parentObject.isys_obj__id AND childType.isys_obj_type__container = 1) AS ChildrenCount, parent.*, parentObject.*, parentType.* FROM isys_catg_location_list parent INNER JOIN isys_obj parentObject ON parent.isys_catg_location_list__isys_obj__id = parentObject.isys_obj__id INNER JOIN isys_obj_type parentType ON parentObject.isys_obj__isys_obj_type__id = parentType.isys_obj_type__id WHERE TRUE AND parent.isys_catg_location_list__isys_obj__id = '1' AND parentType.isys_obj_type__container = 1 AND parentObject.isys_obj__status = '2' GROUP BY parent.isys_catg_location_list__id ORDER BY parentObject.isys_obj__title
( sorry für das posten des gesamten sql statements..)
Der Unterschied der beiden Statements ist beim Attribut:
… WHERE TRUE AND parent.isys_catg_location_list__isys_obj__id = '1' ... -> falsches statement
... WHERE TRUE AND parent.isys_catg_location_list__parentid = '1' ... -> richtiges statementich habe beide Abfragen bei beiden Datenbanken getestet und die falsche Abfrage gab immer nur 1 Ergebnis zurück (Die root-location), die richtige Abfrage gab als Ergebnisse bei beiden Datenbanken die korrekte Liste der Standorte zurück.
Also denke ich, dass bei dem SQL Statement der Fehler auftritt.
Gibt es irgendwelche Möglichkeiten zu ändern wie das SQL Statement aufgebaut wird, um zu sehen ob sich an der I-Doit ausgabe etwas ändert?
Oder gibt es vielleicht noch andere Ideen?vielen Dank schonmal im vorraus
Gruß Duffkess( PS: habe bereits im englischen Teil gepostet und leider erst dannach gesehn, dass es auch einen deutschen Teil gibt..)
-
Ich habe den I-Doit Ordner aus dem Archiv von vor einigen Wochen zurückkopiert und es noch einmal versucht. Dabei konnte ich feststellen das vorher das andere SQL Statement (das von -9) verwendet wurde.
Scheinbar scheint sich dort etwas irgendwie geändert zu haben.. -
Hallo,
wurden irgendwelche Module oder Extensions von Dritten installiert oder verwendet? Das System wird die eigenen Dateien nie ändern (das passiert nur während des Setups und i-doit Updates)
I-doit versucht zwar nicht von selbst Queries zu optimieren, baut sie allerdings so zusammen wie sie benötigt werden um die gewünschten Daten abzurufen.Dies sollte in der Regel in src/classes/cmdb/dao/category/global/isys_cmdb_dao_category_g_location.class.php passieren.
Wir könnten den Fehler lokal reproduzieren und empfehlen den Umstieg auf die 0.9.9-9
Viele Grüße,
LFischer