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

    Report Manager

    Scheduled Pinned Locked Moved Entwicklung
    5 Posts 2 Posters 549 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.
    • cherifC 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

        cherifC 1 Reply Last reply Reply Quote 0
        • cherifC 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

            cherifC 1 Reply Last reply Reply Quote 0
            • cherifC 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

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              • First post
                Last post