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

    Reports im csv format ueber cli idoit controller.php funktionieren nichtmehr

    Scheduled Pinned Locked Moved Entwicklung
    2 Posts 2 Posters 473 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.
    • F Offline
      frisbee23
      last edited by

      hi entwickler von idoit, oder andere anwender die das selbe problem haben,

      wir sind auf i-doit 1.8.3 pro

      ich hab einen frischen report generiert, und im i-doit webgui werden bei Check ergebnisse angezeigt,
      also der report funktioniert dort.

      allerdings habe ich ein fast leeres file bekommen, wenn ich ueber das cli script 'controller' abgefragt habe.
      ueber xml funktionierte, csv/txt nicht.

      ich hab das 2 stunden debugged, und gesehen, dass die datenbank abfrage abbricht, weil in src/classes/modules/report/src/Report.php,
      function execute, zeilenummer ca. 162, bei folgendem block:
        // Break if there are no more entries available
                              if ($l_num === 0 || $rows >= $queryLimit)
                              {
                                      verbose ("break".$l_num." ".$rows." ". $queryLimit);
                                  break;
                              }

      weiter oben wird querylimit so berechnet:
      if (stripos($this->query, 'LIMIT'))
                          {
                              $matches = [];
                              preg_match('/LIMIT [0-9,\s](?=;)/i', trim($this->query), $matches);
                              $queryLimit = (int) filter_var($matches[0], FILTER_SANITIZE_NUMBER_INT);
                              $this->query = preg_replace('/LIMIT [0-9,\s]
      (?=;)/i', '', trim($this->query));
                          }

      aber in meiner abfrage, die ich mit dem querybuilder gemacht habe, war keine limit klausel, daher hat die funktion nichtmal eine einzige row gefetched !!

      workaround war also im webgui/reportmanager neben edit gibts das runterklapp menue mit dreieck gekennzeichnet, da gibts den sql editor,
      und dort halt eine limitklausel vor dem strichpunkt hinzufuegen, ca. so:

      SELECT
      obj_main.isys_obj__id AS 'id',
      obj_main.isys_obj__title AS 'LC__UNIVERSAL__TITLE###1'

      FROM isys_obj AS obj_main
      INNER JOIN isys_cmdb_status AS obj_main_status ON obj_main_status.isys_cmdb_status__id = obj_main.isys_obj__isys_cmdb_status__id
      LEFT JOIN isys_obj_type AS j3 ON j3.isys_obj_type__id = obj_main.isys_obj__isys_obj_type__id

      WHERE TRUE
      AND  ( (j3.isys_obj_type__id != '60' ) AND (j3.isys_obj_type__id != '63' ) ) AND ( (j3.isys_obj_type__id = '5' ) )
      ORDER BY obj_main.isys_obj__title ASC
      limit 1000;

      na ich hoffe das hilft wem,
      fil

      1 Reply Last reply Reply Quote 0
      • J Offline
        jd administrators
        last edited by

        Hallo frisbee23,

        vielen Dank für deinen Hinweis und den Lösungsansatz. Das Verhalten ist unseren Entwicklern bereits bekannt und es gibt einen offiziellen Hotfix für dieses Verhalten.
        Dieser ist in unserer Knowledge Base in folgendem Artikel zu finden: https://kb.i-doit.com/pages/viewpage.action?pageId=10223732

        Lieben Gruß
        JD

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