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

    Objekt-Wiederherstellung per API

    Scheduled Pinned Locked Moved Entwicklung
    5 Posts 3 Posters 949 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.
    • M Offline
      msteuter
      last edited by

      Hallo,

      ich bin derzeit in der Programmierung einiger Skripte per API und musste feststellen, dass eine Wiederherstellung von archivierten Objekten in der API scheinbar nicht vorgesehen ist oder funktioniert.
      Auch die Benutzung des API-Clients von BHeisig brachte keinen Vorteil, da diese auf die API aufsetzt.
      Gibt es eine programmiertechnische Lösung, wie ich Objekte wiederherstellen kann (object.update mit neuem Status oder sowas wie object.restore)?

      Viele Grüße
      Michael

      V1.13.2 PRO mit diversen Modulen in Kombination mit ITSM-Stack (OpenITCockpit und OTRS) und ca. 40.000 Objekte

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

        lch denke nicht, dass ein Undelete mit der jetzigen API zu realisieren ist. Ich meine mich zu erinnern, dass ich schon mal vergeblich versucht habe mit cmdb.object.update den Status zu setzten. Das war allerdings bei Version 1.8, als cmdb.object.delete eine Regression hatte. Vielleicht ist es einen neuen Versuch wert.

        Die Funktion delete in src/classes/modules/api/model/cmdb/isys_api_model_cmdb_object.class.php ließe sich ganz gut als Basis benutzten, um die API um eine Funktion 'restore' zu erweitern. Das kann man selber machen, oder ein bischen Lobbyarbeit betreiben. 🙂

        1 Reply Last reply Reply Quote 0
        • M Offline
          msteuter
          last edited by

          Danke für die schnelle Rückmeldung.
          Ich könnte mir sowas als "quick and dirty"-Lösung erstmal vorstellen. Habe es aber noch nicht getestet. Die Funktion delete wird einfach mit dem Status Normal aufgerufen. Damit wird das Objekt im Logbuch als wiederhergestellt vermerkt und wieder in den Status Normal versetzt. Sollte man besser in eine eigene Funktion undelete auslagern.
          In Datei /var/www/html/otrs/i-doit/src/classes/modules/api/model/cmdb/isys_api_model_cmdb_object.class.php wird die delete-Funktion erweitert:

          [...]
          case C__RECORD_STATUS__NORMAL:
                                      $l_messageText  = 'deleted';
                                      $l_logbookEvent = 'C__LOGBOOK_EVENT__CATEGORY_RECYCLED';
                                      $l_result       = $this->m_dao->set_object_status($l_id, $l_status);
                                      break;
          [...]
          

          In der CMDBObject.php von BHeisig würde das dann so aussehen:

          
              public function restore($objectID) {
                  $result = $this->api->request(
                      'cmdb.category.delete',
                      [
                          'id' => $objectID,
                          'status' => 'C__RECORD_STATUS__NORMAL'
                      ]
                  );
          
                  if (!is_array($result) ||
                      !array_key_exists('success', $result) ||
                      $result['success'] === false) {
                      throw new \Exception(sprintf(
                          'Unable to restore object %s',
                          $objectID
                      ));
                  }
              }
          
          

          V1.13.2 PRO mit diversen Modulen in Kombination mit ITSM-Stack (OpenITCockpit und OTRS) und ca. 40.000 Objekte

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

            @msteuter:

            Danke für die schnelle Rückmeldung.
            Ich könnte mir sowas als "quick and dirty"-Lösung erstmal vorstellen. Habe es aber noch nicht getestet. Die Funktion delete wird einfach mit dem Status Normal aufgerufen. Damit wird das Objekt im Logbuch als wiederhergestellt vermerkt und wieder in den Status Normal versetzt. Sollte man besser in eine eigene Funktion undelete auslagern.
            In Datei /var/www/html/otrs/i-doit/src/classes/modules/api/model/cmdb/isys_api_model_cmdb_object.class.php wird die delete-Funktion erweitert:

            [...]
            case C__RECORD_STATUS__NORMAL:
                                        $l_messageText  = 'deleted';
                                        $l_logbookEvent = 'C__LOGBOOK_EVENT__CATEGORY_RECYCLED';
                                        $l_result       = $this->m_dao->set_object_status($l_id, $l_status);
                                        break;
            [...]
            

            Ein paar Zeilen darüber ist noch ein Konsistenzcheck von $p_params['status'], der müsste auch noch angepasst werden.

            1 Reply Last reply Reply Quote 0
            • kmauelK Offline
              kmauel
              last edited by

              Hallo msteuter und franknagel,

              zur Zeit kann die API kein ranking (archivieren, löschen, etc.) von bestehenden Objekten leisten.
              Allerdings wäre dies hilfreich und wir sehen das hiermit vor für eine kommende Major Version des API Add-Ons.

              Viele Grüße,

              Kevin Mauel

              Viele Grüße,

              Kevin Mauel

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