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

    Report Manager

    Scheduled Pinned Locked Moved Entwicklung
    5 Posts 2 Posters 380 Views
    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.
    • C Offline
      cherif
      last edited by cherif

      Hallo zusammen,
      ich habe eigene 2 Kategorien programmiert und funktioniert soweit gut.
      Ich habe jetzt aber folgende Probleme:

      • Eine von 2 Kategorien lässt sich nicht beim Reportmanager erscheinen. Also ist nicht auf der Liste...
        de4b1c3c-4f3b-494f-a80b-3592f2288b59-image.png

      • Die 2. Kategorie hat Attributen mit Multi-Value, also dialog_plus mit "isys_cmdb_dao_category_pattern::multiselect()"
        Hier bekomme ich immer eine Fehlermeldung, wenn ich versuche, einen Report zu erstellen. Unknown column 'j.isys_catg_servicebook_list_2_isys_catg_svb_ori' in 'field list'

      Woran liegt das Problem?
      Wie kann ich gespeicherte Werten ausgeben?
      Unten Code

      protected function properties()
          {
              return [
                  
                  'orientation'         => array_replace_recursive(isys_cmdb_dao_category_pattern::multiselect(), [
                      C__PROPERTY__INFO => [
                              C__PROPERTY__INFO__TITLE => 'LC__CMDB__CATG_SERVICEBOOK__ORIENTATION',
                              C__PROPERTY__INFO__DESCRIPTION => 'Orientation'
                          ],
                          C__PROPERTY__DATA => [
                              C__PROPERTY__DATA__FIELD        => 'isys_catg_servicebook_list__id',
                              C__PROPERTY__DATA__TABLE_ALIAS  => 'service_orientation',
                              C__PROPERTY__DATA__SOURCE_TABLE => 'isys_catg_svb_ori',
                              C__PROPERTY__DATA__REFERENCES   => [
                                  'isys_catg_servicebook_list_2_isys_catg_svb_ori',
                                  'isys_catg_servicebook_list__id'
                                  ],
                              
                              C__PROPERTY__DATA__SELECT       => idoit\Module\Report\SqlQuery\Structure\SelectSubSelect::factory(
                                  'SELECT ori.isys_catg_svb_ori__title
                                      FROM isys_catg_servicebook_list sel
                                      INNER JOIN isys_catg_servicebook_list_2_isys_catg_svb_ori AS sercice2 ON sercice2.isys_catg_servicebook_list__id = sel.isys_catg_servicebook_list__id
                                      INNER JOIN isys_catg_svb_ori AS ori ON ori.isys_catg_svb_ori__id = sercice2.isys_catg_svb_ori__id',
                                  'isys_catg_servicebook_list',
                                  'sel.isys_catg_servicebook_list__id',
                                  'sel.isys_catg_servicebook_list__isys_obj__id',
                                  'sel.isys_catg_servicebook_list__id',
                                  '',
                                  idoit\Module\Report\SqlQuery\Structure\SelectCondition::factory([]),
                                  idoit\Module\Report\SqlQuery\Structure\SelectGroupBy::factory(['isys_catg_servicebook_list__isys_obj__id'])
                              ),
                              C__PROPERTY__DATA__JOIN         => [
                                  idoit\Module\Report\SqlQuery\Structure\SelectJoin::factory(
                                      'isys_catg_servicebook_list_2_isys_catg_svb_ori',
                                      'LEFT',
                                      'isys_catg_servicebook_list__id',
                                      'isys_catg_servicebook_list_2_isys_catg_svb_ori',
                                      'sel2',
                                      'sel2ori',
                                      'sel2ori'
                                  ),
                                  idoit\Module\Report\SqlQuery\Structure\SelectJoin::factory(
                                      'isys_catg_svb_ori',
                                      'LEFT',
                                      'isys_catg_svb_ori__id',
                                      'isys_catg_svb_ori__id', 
                                      'sel',
                                      'selori',
                                      'selori'
                                  ),
                                  idoit\Module\Report\SqlQuery\Structure\SelectJoin::factory(
                                      'isys_catg_servicebook_list',
                                      'LEFT',
                                      'isys_catg_servicebook_list__isys_obj__id',
                                      'isys_obj__id'
                                  )
                              ]
                          ],
                      C__PROPERTY__UI       => [
                          C__PROPERTY__UI__ID      => 'C__CATG_SERVICEBOOK_ORIENTATION',
                          C__PROPERTY__UI__PARAMS  => [
                              'type'           => 'f_popup',
                              'p_strPopupType' => 'dialog_plus',
                              'p_strTable'     => 'isys_catg_svb_ori',
                              'placeholder'    => isys_application::instance()->container->get('language')
                                  ->get('LC__UNIVERSAL__CHOOSEN_PLACEHOLDER'),
                              'multiselect'    => true
                          ],
                          C__PROPERTY__UI__DEFAULT => null
                      ],
                      C__PROPERTY__PROVIDES => [
                          C__PROPERTY__PROVIDES__REPORT     => true,
                          C__PROPERTY__PROVIDES__LIST       => false,
                          C__PROPERTY__PROVIDES__SEARCH     => true,
                          C__PROPERTY__PROVIDES__VALIDATION => false,
                          C__PROPERTY__PROVIDES__MULTIEDIT  => true
                      ],
                      C__PROPERTY__FORMAT   => [
                          C__PROPERTY__FORMAT__CALLBACK => [
                              'isys_export_helper',
                              'dialog_multiselect'
                          ]
                      ]
                  ])
      
      protected function dynamic_properties()
          {
              return [
                  '_orientation' => new DynamicProperty(
                      'LC__CMDB__CATG_SERVICEBOOK__ORIENTATION',
                      'isys_catg_servicebook_list__id',
                      'isys_catg_servicebook_list',
                      [
                          $this,
                          'dynamic_property_callback_ori'
                      ]
                  ),
                  
              ];
          }
      
      public function dynamic_property_callback_ori($p_row)
          {
              $l_dao = isys_cmdb_dao_category_g_servicebook::instance(isys_application::instance()->database);
              $l_res = $l_dao->retrieve('SELECT ori.isys_catg_svb_ori__title AS val
                  FROM isys_catg_servicebook_list AS svcb
                  INNER JOIN isys_catg_servicebook_list_2_isys_catg_svb_ori AS svcb2ori ON svcb2ori.isys_catg_servicebook_list__id = svcb.isys_catg_servicebook_list__id
                  INNER JOIN isys_catg_svb_ori AS ori ON ori.isys_catg_svb_ori__id = svcb2ori.isys_catg_svb_ori__id
                  WHERE svcb.isys_catg_servicebook_list__id = ' . $l_dao->convert_sql_id($p_row['isys_catg_servicebook_list__id']));
              $l_return = isys_tenantsettings::get('gui.empty_value', '-');
      
              if ($l_res->num_rows() > 0) {
                  $l_return = '';
                  while ($l_row = $l_res->get_row()) {
                      $l_return .= $l_row['val'] . ', ';
                  }
                  $l_return = rtrim($l_return, ', ');
              }
      
              return $l_return;
          }
      

      Danke im Voraus

      LFischerL 1 Reply Last reply Reply Quote 0
      • LFischerL Offline
        LFischer @cherif
        last edited by LFischer

        Hallo @cherif

        warum die Kategorien im Property-Selector nicht auftauchen kann ich leider nicht so pauschal beantworten. Hast du die Kategorie-Attribute indizieren lassen?

        Schau mal hier in der Verwaltung:
        d0f14cb2-d68a-4887-8d8e-10e08a224742-image.png

        Bzgl. dem SQL Fehler - da wird aus irgendeinem Grund der "Join" nicht richtig gebildet. Du könntest probieren anstatt isys_cmdb_dao_category_pattern::multiselect die neuen "Property" Klassen zu nutzen - das ist für gewöhnlich einfacher und könnte helfen 🙂

        Schau mal ob du den Code

        
        'orientation' => array_replace_recursive(isys_cmdb_dao_category_pattern::multiselect(), [
            C__PROPERTY__INFO => [
                C__PROPERTY__INFO__TITLE => 'LC__CMDB__CATG_SERVICEBOOK__ORIENTATION',
                C__PROPERTY__INFO__DESCRIPTION => 'Orientation'
            ],
            C__PROPERTY__DATA => [
                    /* ... */
        

        Hiermit tauschen kannst:

        use idoit\Component\Property\Type\DialogPlusMultiselectProperty;
        
        'orientation' => new DialogPlusMultiselectProperty(
            'C__CATG_SERVICEBOOK_ORIENTATION',
            'LC__CMDB__CATG_SERVICEBOOK__ORIENTATION',
            'isys_catg_servicebook_list__id',
            'isys_catg_servicebook_list',
            'isys_catg_servicebook_list_2_isys_catg_svb_ori',
            'isys_catg_svb_ori'
        ),
        

        Die "Multiselect" Properties sind leider immer etwas schwierig zu handhaben aufgrund der N2M Tabelle 😕

        Sollte das nicht helfen kann ich mal einen Kollegen fragen ob er weiterhelfen kann.

        VG Leo

        C 1 Reply Last reply Reply Quote 0
        • C Offline
          cherif @LFischer
          last edited by

          Hallo @LFischer
          vielen Dank für deine Hilfe
          Ich habe Kategorie-Attribute neu indizieren ausgeführt. Danach wurden die beiden Probleme behoben.

          Meine Frage: Hat diese Funktion einen Nachteil ? z.B Datenverlust ?

          Nochmal Danke für deine Hilfe

          VG, Cherif

          LFischerL 1 Reply Last reply Reply Quote 0
          • LFischerL Offline
            LFischer @cherif
            last edited by

            Hey @cherif

            super, das freut mich 🙂 Die Funktion hat keinen Nachteil - ich kann dir kurz erklären wofür sie benutzt wird:

            Alle Attribute sind ja im Kategorie Code hinterlegt - also über hunderte Dateien verteilt. Und für Stellen wie z.B. die Reports brauchen wir "schnell" alle verfügbaren Attribute.

            Damit i-doit nicht immer alle Dateien laden muss um alle Attribute zu finden werden diese quasi in der Datenbank "gecached". Und genau das tut die Funktion "Kategorie-Attribute neu indizieren" - sie aktualisiert diesen Cache in der Datenbank, damit i-doit schnell auf alle Attribut-Daten zugreifen kann ohne im Code nachzusehen.

            Die Funktion wird übrigens auch immer nach dem i-doit Update ausgeführt oder nachdem man ein Add-on installiert hat.

            Viele Grüße
            Leo

            C 1 Reply Last reply Reply Quote 0
            • C Offline
              cherif @LFischer
              last edited by

              Hi @LFischer

              nochmal danke für Deine Hilfe und die Erklärung 🙂

              VG, Cherif

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