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



  • 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



  • 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


Log in to reply
 


Datenschutz / Privacy Policy