Internal Server Error - Update von Kategorie
-
Hallo!
mir stirbt die idoit API aktuell immer wieder bei dem Update einer Kategorie auf einem einzelnen Objekt ab.
Kurzer Hintergrund: Ich bin nach einigen Monaten wieder zurück zur Schnittstellen Programmierung gegen die idoit API gekommen. Vorher lief das Ganze so recht und schlecht - seitdem haben Kollegen unser idoit auf 1.12.
21 gezogen (von 1.11.x).Folgender request body löst den 500er aus:
[ { "method":"cmdb.category.update", "jsonrpc":"2.0", "params":{ "category":"C__CATG__MEMORY", "data":{ "category_id":2453, "unit":2, "capacity":4096.0, "title":7 }, "apikey":"********", "objID":45253 }, "id":0 } ]
im Apache2 Error Log steht dann folgendes:
PHP Fatal error: Uncaught Error: Call to a member function memory() on null in /var/www/html/idoit/src/classes/modules/logbook/isys_module_logbook.class.php:566 Stack trace: #0 /var/www/html/idoit/src/classes/modules/api/model/cmdb/isys_api_model_cmdb_category.class.php(1072): isys_module_logbook->prepare_changes(Object(isys_cmdb_dao_category_g_memory), Array, Array) #1 /var/www/html/idoit/src/classes/modules/api/model/cmdb/isys_api_model_cmdb_category.class.php(1377): isys_api_model_cmdb_category->sync_wrapper(Array, 2) #2 /var/www/html/idoit/src/classes/modules/api/model/isys_api_model_cmdb.class.php(258): isys_api_model_cmdb_category->update(Array) #3 [internal function]: isys_api_model_cmdb->route('category', Array) #4 /var/www/html/idoit/src/classes/modules/api/src/Controller/JsonRpcController.php(84): call_user_func_array(Array, Array) #5 /var/www/html/idoit/src/classes/modules/api/src/Controller/JsonRpcController.php(194): idoit\\Module\\Api\\Controller\\JsonRpcController::runModel(Object(isys_api_model_cmdb), Array) #6 /v in /var/www/html/idoit/src/classes/modules/logbook/isys_module_logbook.class.php on line 566
Lesender Zugriff auf die API ist kein Problem.
Fehlt da ggf. nach dem Update noch ein Schritt, oder ist das einfach was kaputt? Hilfe!
LG Dennis Ahrens
-
Ich habe jetzt erstmal nur den Part für
C__CATG__MEMORY
auskommentiert und der Datenabgleich funktioniert dann. D.h. grundsätzlich kann ich auch schreiben - nur halt nicht die genannte Kategorie. LG -
Spielen Sie mal diesen Patch ein:
diff --git a/www_root/src/classes/modules/api/src/ApiEnvironmentShell.php b/www_root/src/classes/modules/api/src/ApiEnvironmentShell.php index 80f0c037..aa6703a1 100644 --- a/www_root/src/classes/modules/api/src/ApiEnvironmentShell.php +++ b/www_root/src/classes/modules/api/src/ApiEnvironmentShell.php @@ -150,7 +150,7 @@ class ApiEnvironmentShell */ private function boot() { - global $g_absdir, $g_db_system, $g_config, $g_product_info; + global $g_absdir, $g_db_system, $g_config, $g_product_info, $g_convert; // Define web context constant define('WEB_CONTEXT', false); @@ -216,4 +216,4 @@ class ApiEnvironmentShell { $this->setIdoitRootDirectoryPath($idoitRootDirectoryPath); } -} \ No newline at end of file +}
-
Bei mir sieht die veränderte Zeile aktuell so aus:
global $g_absdir, $g_db_system, $g_config, $g_product_info, $g_crypto_hash;
Soll ich da trotzdem "einfach" mal
$g_convert
ergänzen?LG
-
Ja, also das hat geholfen, Danke!
Bleiben nur noch die Fragen offen:
- Warum sah mein Code anders aus, als der von Ihnen?
- Wie stelle ich sicher, dass das nicht durch ein Update überschrieben wird?
LG
-
Okay, die Antwort auf die erste Frage habe ich selbst gefunden. Mein API code scheint älter zu sein als der des aktuellen Plugins, v1.10. Daraus ergibt sich folgende weitere Frage:
Was ist hier der empfohlene Weg bei Updates?
Aktuell macht das ein Kollege mittels eures grafischen PHP clicky Updaters.
LG
-
Andersherum: Sie scheinen bereits idoit-api-1.10.1 einzusetzen, mein Patch war gegen Version 1.10.
Wir setzen zusätzlich git ein mit zwei Branches:
- synetics: Hier befindet sich der source code wie von Synetics ausgeliefert
- master: Eigene Änderungen werden hier eingepflegt
Updates sehen dann so aus:
# git checkout synetics
Update über die Web-Oberfläche machen
# git add -A
# git commit
# git checkout master
# git merge synetics
In Ihrem Fall handelt es sich um einen Synetics bekannten Bug, der hoffentlich in der nächsten Version der API behoben sein wird.
-
Vielen Dank - sehr hilfreich!
-
Hallo zusammen,
hierfür hat der TE auch ein ticket bei uns erstellt.
Die ist wie bereits festgestellt ein bekannter BUG in der API welcher zum nächsten Release gefixed ist.
Der Hotfix wird durch ein Update des Add-ons natürlich überschriebenGrüße aus Düsseldorf
Patrick