Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login

    Internal Server Error - Update von Kategorie

    Scheduled Pinned Locked Moved Entwicklung
    9 Posts 3 Posters 871 Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A Offline
      ahrensde
      last edited by ahrensde

      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

      1 Reply Last reply Reply Quote 0
      • A Offline
        ahrensde
        last edited by

        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

        1 Reply Last reply Reply Quote 0
        • F Offline
          franknagel
          last edited by

          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
          +}
          
          1 Reply Last reply Reply Quote 0
          • A Offline
            ahrensde
            last edited by

            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

            1 Reply Last reply Reply Quote 0
            • A Offline
              ahrensde
              last edited by

              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

              1 Reply Last reply Reply Quote 0
              • A Offline
                ahrensde
                last edited by

                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

                1 Reply Last reply Reply Quote 0
                • F Offline
                  franknagel
                  last edited by

                  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.

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    ahrensde
                    last edited by

                    Vielen Dank - sehr hilfreich!

                    1 Reply Last reply Reply Quote 0
                    • PatrickFeilerP Offline
                      PatrickFeiler i-doit Team
                      last edited by

                      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 überschrieben 🙂

                      Grüße aus Düsseldorf
                      Patrick

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post