Löschen/Purgen von 'single value categories' über JSON-RPC-API
-
Hallo zusammen.
Ich suche derzeit eine Möglichkeit in einem Objekt 'single value categories' wie z.B. 'C__CATG__OPERATING_SYSTEM' über die JSON-API zu löschen.
Auf herkömmliche Weise mit cmdb.category.delete erhalte ich folgenden Fehler:{ "error": { "code": -32603, "data": { "error": "Your category is not multi-valued. It is not possible to delete a single value category." }, "message": "Internal error" }, "id": 1, "jsonrpc": "2.0" }
Im Webinterface wird allerdings eine purge-Funktion angeboten, also muss die Funktionalität ja in irgendeiner Form schon gegeben sein. Gibt es dafür in der API vielleicht einen anderen Weg?
Viele Grüße
Tobias -
Hallo Tobias,
mit dem Loeschen von single-value-Kategorie-Eintraegen habe ich mich noch nie beschaeftigt. Aber ich denke, es sollte zumindest moeglich sein, diese mit "" (leer) zu ueberschreiben?
Gruss,
jkondek -
Hallo jkondek.
Mit dem folgenden Aufruf überschreibe ich den Eintrag praktisch leer:
{ "version": "2.0", "method": "cmdb.category.update", "params": { "apikey": "123456789", "objID": 42, "category": "C__CATG__OPERATING_SYSTEM", "data": { "category_id": "1337", "application": "0", "assigned_variant": "0", "assigned_version": "0", "description": "" } }, "id": 1 }
Überschreiben ist allerdings nicht gleich Löschen. Der Purge Button im Webinterface löscht den Eintrag tatsächlich. Lese ich ihn nämlich danach aus erhalte ich ein leeres "result".
Wenn ich den eintrag nach diesem update allerdings auslese, hat er immernoch die genullten Attribute + seine ID:{ "id": 1, "jsonrpc": "2.0", "result": [ { "application": [], "application_priority": { "const": "C__CATG__APPLICATION_PRIORITY__PRIMARY", "id": "1", "title": "Primary", "title_lang": "LC__CATG__APPLICATION_PRIORITY__PRIMARY" }, "application_type": { "const": "C__CATG__APPLICATION_TYPE__OPERATING_SYSTEM", "id": "2", "title": "Operating system", "title_lang": "LC__CATG__APPLICATION_TYPE__OPERATING_SYSTEM" }, "assigned_database_schema": false, "assigned_it_service": false, "assigned_license": false, "assigned_variant": null, "assigned_version": null, "bequest_nagios_services": { "title": "No", "value": "0" }, "description": "", "id": "1337", "objID": "42" } ] }
Was für mich optimal wäre, ist nunmal ein leeres result.
Viele Grüße
Tobias -
Hallo Tobias,
hab mir jetzt doch mal angeschaut, wie das Loeschen ueber die API funktioniert. Scheinbar bisher leider nur fuer Multi-Value Kategorien, darauf laesst zumindest die Fehlermeldung schliessen:
"error":"Your category is not multi-valued. It is not possible to delete a single value category."
Eine andere Idee, wie Du zumindest die Eintraege los wirst, ist das Loeschen auf DB Ebene. Dafuer sollte man sich aber ziemlich gut dort auskennen und auch abhaengige Tabellen beruecksichtigen.
Vielleicht sollte man vorher beim Support fragen, ob es ueber die API moeglich ist, zu loeschen. Und wenn es nur ein Bug ist
Gruss,
jkondek -
Hallo,
Ich bin auf dasselbe Problem gestoßen, und Google führte mich hierher
fast wie in dem XKCD 979.Bei dem "Location" gibt es kein "Purge" in dem GUI. Es ist also unmöglich
eine Zuweisung wieder loszuwerden. Falls der OP dafür eine Lösung gefunden
hat –- bitte posten!MfG,
Alexei
-
Hallo,
ich hole den Thread mal aus der Versenkung. Ich habe dasselbe Bedürfnis wie thaefner.
Ich versuche über die JSON-RPC API die Kategorie 'C__CATG__OPERATING_SYSTEM' zu löschen und bekomme weiterhin die Meldung
Your category is not multi-valued. It is not possible to delete a single value category.
Ich benutze Version 1.9.0 PRO.
-
Die API bietet die undokumentierte (?) Funktion cmdb.category.quickpurge an, die auch bei Single-Value Kategorien funktioniert. Startpunkt für weiter Versuche ist dann der Quellcode in src/classes/modules/api/model/cmdb/isys_api_model_cmdb_category.class.php .
-
cmdb.category.quickpurge funktioniert wie gewünscht. Dankeschön.
In der aktuellen Doku, die in der Knowledge Base hinterlegt ist, ist der Methodenparameter nicht dokumentiert. Da gibt es nur cmdb.object.quickpurge