Community
    • Categories
    • Recent
    • Popular
    • Users
    • Search
    • Register
    • Login
    1. Home
    2. StefanP74
    3. Posts
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 118
    • Posts 299
    • Groups 0

    Posts

    Recent Best Controversial
    • RE: Inventarisierung von organisationsfremden Diensten (Cloud-Tools)

      Servus,

      als Gedankenanstoß kann ich dir "Service" empfehlen.
      Organisationsfremde Dienste kannst du unter "Service" anlegen und via ISMS beleuchten.
      So habe ich es zumindest mal gemacht.

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • Organisation und Kundennummer

      Hallo,

      das ist jetzt etwas peinlich, aber .... wo pflegt man bei der Organisation die Kundennummer?
      Sehe ich es nicht oder gibt es dieses Feld nicht?
      Unter Vertrag ist es angeführt, nur muss ich ja keinen Vertrag als solchen mit einer Organisation haben, um die Kundennummer pflegen zu wollen, sondern einfach nur eine 0815 geschäftliche Beziehung betreibe - zB. Shop.
      Gibt es das Feld tatsächlich nur in der Kategorie Vertrag?

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Recht: Eigene Objekte archivieren + löschen

      Hallo allerseits,

      hat vielleicht jemand das Recht "eigene Objekte archivieren/löschen" bereits erfolgreich umgesetzt?

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Listenansicht Standardsortierung

      Hallo @LFischer

      perfekt 👍

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Report nach Datum sortieren

      Hallo @LFischer

      das ist eine sehr gute Nachricht 👌

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Standortansicht der dem Arbeitsplatz zugewiesenen Objekte

      Servus @robbyhuebner

      Mach ich auch so. 👌

      Gebäude --> Etage --> Raum --> Arbeitsplatz --> Clients (das ganze Zeug)
      Der logische Standort des Arbeitsplatzes ist der Mitarbeiter bzw. Gruppen.

      Warum?
      Der Arbeitsplatz ändert sich faktisch nie.
      Bei einem möglichen Umzug zieht der gesamte Arbeitsplatz mit allem drum und dran in zB. einen anderen Raum um. Zu ändern sind dann nur die Netzwerkanschlüsse, welche bei mir im Raum selbst hinterlegt sind.
      Ändert sich der Mitarbeiter, ändert sich nur der logische Standort.

      Ich sehe bei mir seit Jahren keinen Nachteil, ganz im Gegenteil.
      Übersichtlich, logisch und ratz fatz geändert.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • Recht: Eigene Objekte archivieren + löschen

      Hallo,

      ich habe ein Problem mit den Berechtigungen, vielleicht kann mir jemand dabei helfen.

      Ich möchte, dass eine Benutzergruppe selbst erstellte Objekte archivieren sowie auch löschen darf.
      Die Rechte der Gruppe wurden im Bereich CMDB wie folgt gesetzt:

      idoit_20250415_01.PNG

      Soweit funktioniert alles wie es sein soll, nur nicht das Editieren sowie Archivieren aus der Objektliste heraus.

      idoit_20250415_02.PNG

      Sobald das Objekt geöffnet ist, kann ich editieren ... doch wie archivieren?

      idoit_20250415_03.PNG

      Bin ich am Holzweg?
      Was fehlt denn da?
      Ich stehe auf der Leitung.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Benachrichtigung als Rundemail?

      Hallo,

      ich denke schon.
      Wenn ich mich täusche, dann so:

      • Prüfen, ob bei allen Kontakten etc. die die besagten Clients nutzen und auch entsprechend den Clients zugeordnet sind, eine eMail-Adresse hinterlegt ist.
      • Einen Report anlegen, der dir die Personen ausgibt, welche auf deren Clients Windows 10 drauf haben.
      • Unter Kontakte eine Personengruppe anlegen, welche die Mitglieder nach diesem Report wählt. (Personengruppen Mitglieder nach Report)
      • Einen weiteren Report anlegen, welcher die Windows 10 Clients ermittelt.
      • Nun über Benachrichtigungen / Reportbasierende Benachrichtigung den Client-Auswahl-Report entsprechend hinterlegen.
      • Für die Empfänger die Gruppe hinterlegen.

      Testen ...

      Es klappt vermutlich auch ohne der Benutzergruppe, direkt nur mit Reports, vielleicht sogar auch nur mit einem Report.

      PS: Nicht vergessen, dynamische Gruppen müssen per Cron-Job aktualisiert werden:
      sudo -u www-data php /var/www/html/console.php sync-dynamic-groups --user admin --password ******* --tenantId 1

      LG
      Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: API Konstrukt via PHP benutzerdefiniertes Objekt

      Guten Morgen @LFischer,

      danke für den Input, bei Multi-Value hat es dann geklingelt.

      $jsonData = [
      		'version' => '2.0',
      		'method'  => 'cmdb.object.create',
      		'params'  => [
      			'apikey'   => $apiKey,
      			'type'     => 'C__OBJTYPE__SD_LSCHPROTOKOLL',
      			'title'    => $vartitle,
      			'categories' => [
      				'C__CATG__CUSTOM_FIELDS_PI_LSCHPROTOKOLL' => [
      					[
      						'f_popup_c_1675341962187' => $currentDateTime,
      						'f_popup_c_1675342078466' => [ $datenbereich ],
      						'f_popup_c_1675342171620' => $loeschverfahren,
      						'f_popup_c_1675342277156' => [ $varwho ],
      						'description' => $vardescript
      					]
      				]
      			],
      		],
      		'id' => 3 // ID für die Anfrage
      	];
      

      Ich musste zusätzlich zu deiner Lösung die beiden Multi-Value Felder nochmal in eckige Klammern packen.
      Perfekt, danke.

      Lustig wie oft man im api log über diese Zeile an einem Freitag drüberlesen kann:
      "There was an validation error: f_popup_c_1675342277156: (object_browser) Property has to be an array."
      😌

      So kann der Montag beginnen 😉

      LG Stefan

      posted in Entwicklung
      StefanP74S
      StefanP74
    • API Konstrukt via PHP benutzerdefiniertes Objekt

      Hallo,

      ich stecke fest und würde am Boden kriechend Hilfe benötigen.
      Aus einem PHP-Script wird via API in eine benutzerdefinierte Kategorie sowie eines Benutzerdefinierten Objekts geschrieben.

      Der Datensatz wird in i-doit erstellt, der Titel wird hinterlegt im Feld Bezeichnung.
      Doch der Rest kommt nicht an. Die Variablen, die übergeben werden, sind befüllt.
      Ab C__CATG__CUSTOM_FIELDS_PI_LSCHPROTOKOLL ist wohl ein Fehler.

      Erkennt jemand den Fehler?

      $jsonData = [
      	'version' => '2.0',
      	'method'  => 'cmdb.object.create',
      	'params'  => [
      		'apikey'   => $apiKey,
      		'type'     => 'C__OBJTYPE__SD_LSCHPROTOKOLL',
      		'title'    => $vartitle,
      		'categories' => [
      			'C__CATG__CUSTOM_FIELDS_PI_LSCHPROTOKOLL' => [
      				'f_popup_c_1675341962187' => $currentDateTime,
      				'f_popup_c_1675342078466' => $datenbereich,
      				'f_popup_c_1675342171620' => $loeschverfahren,
      				'f_popup_c_1675342277156' => $varwho,
      				'description' => $vardescript
      				]
      			],
      		],
      	'id' => 3 // ID für die Anfrage
      ];
      

      Danke
      LG Stefan

      posted in Entwicklung
      StefanP74S
      StefanP74
    • eMail-Benachrichtigung: Von ASCII Tabelle zu HTML-Tabelle

      Servus,

      i-doit V34

      ich habe mir gedacht, baue ich doch heute die eMail-Notification so um, dass ein HTML-eMail samt Tabelle generiert wird, anstatt einem Text-Mail mit der ASCII-Tabelle.
      Warum? Verschobener Text in Tabelle.

      Macht aus dem hier:
      jo1.PNG

      das da:
      jo2.PNG

      Datei:
      /var/www/html/src/classes/notification/isys_notification.class.php

      Zeile 1036:
      Alt:
      $l_mailer->set_content_type(isys_library_mail::C__CONTENT_TYPE__PLAIN);
      Neu:
      $l_mailer->set_content_type(isys_library_mail::C__CONTENT_TYPE__HTML);

      Alt ab Zeile 1151:

           /**
           * Builds a simple plaintext table with header. Columns are left-aligned.
           *
           * @param array $p_entities Entities
           *
           * @return string
           *
           * @todo This is not the right place. Move it to MVC view or something.
           */
          protected function build_plain_table($p_entities)
          {
              assert(is_array($p_entities));
      
              $l_table = '';
              $l_headers = [];
              $l_layouted_headers = [];
      
              if (count($p_entities) === 0) {
                  return $l_table;
              }
      
              // Layout:
      
              $l_horizontal_line = '-';
              $l_horizontal_line_header = '=';
              $l_vertical_line = '|';
              $l_edge = '+';
      
              // Analyze entities:
              $l_column_widths = [];
              $l_count = 0;
      
              // Iterate through each entity:
              foreach ($p_entities as $l_entity) {
                  // Also analyze header:
                  if ($l_count === 0) {
                      $l_count++;
      
                      $l_headers = array_keys($l_entity);
      
                      foreach ($l_headers as $l_header) {
                          $l_layouted_headers[$l_header] = $this->emphasize(self::_l($l_header));
                      }
      
                      foreach ($l_headers as $l_header) {
                          $l_column_widths[$l_header] = strlen($l_layouted_headers[$l_header]);
                      }
                  }
      
                  // Analyse values:
                  foreach ($l_entity as $l_key => $l_value) {
                      $l_value_length = strlen($l_value);
                      if ($l_value_length > $l_column_widths[$l_key]) {
                          $l_column_widths[$l_key] = $l_value_length;
                      }
                  }
              }
      
              $l_horizonatal_header_line_parts = [];
              $l_horizonatal_line_parts = [];
              foreach ($l_column_widths as $l_column_width) {
                  $l_horizonatal_header_line_parts[] = $l_horizontal_line_header . str_pad('', $l_column_width, $l_horizontal_line_header) . $l_horizontal_line_header;
                  $l_horizonatal_line_parts[] = $l_horizontal_line . str_pad('', $l_column_width, $l_horizontal_line) . $l_horizontal_line;
              }
              $l_complete_horizontal_header_line = $l_edge . implode($l_edge, $l_horizonatal_header_line_parts) . $l_edge;
              $l_complete_horizontal_line = $l_edge . implode($l_edge, $l_horizonatal_line_parts) . $l_edge;
      
              // Prepend header:
      
              $l_padded_headers = array_map([
                  $this,
                  'table_header'
              ], $l_layouted_headers, $l_column_widths);
              $l_table .= $l_complete_horizontal_header_line . "\n" . $l_vertical_line . ' ' . implode(' ' . $l_vertical_line . ' ', $l_padded_headers) . ' ' . $l_vertical_line .
                  "\n" . $l_complete_horizontal_header_line . "\n";
      
              // Iterate through each entity:
              foreach ($p_entities as $l_entity) {
                  $l_table .= $l_vertical_line;
                  foreach ($l_entity as $l_key => $l_value) {
                      $l_table .= ' ' . str_pad($l_value, $l_column_widths[$l_key]) . ' ' . $l_vertical_line;
                  }
      
                  $l_table .= "\n" . $l_complete_horizontal_line . "\n";
              }
      
              $l_table = "<pre style='font-family: Courier, monospace;'>" . htmlentities($l_table) . "</pre>";
      		
      		return $l_table;
          }
      

      Neu ab Zeile 1151:

          /**
           * Builds a simple plaintext table with header. Columns are left-aligned.
           *
           * @param array $p_entities Entities
           *
           * @return string
           *
           * @todo This is not the right place. Move it to MVC view or something.
           */
      	protected function build_plain_table($p_entities)
      	{
      		assert(is_array($p_entities));
      
      		if (count($p_entities) === 0) {
      			return '';
      		}
      
      		// Tabellen-Header bestimmen:
      		$l_headers = array_keys($p_entities[0]);
      
      		// Tabelle als HTML aufbauen:
      		$l_table = '<table style="border-collapse: collapse; font-family: Courier, monospace; width: 100%;">';
      
      		// Tabellenkopf:
      		$l_table .= '<tr>';
      		foreach ($l_headers as $l_header) {
      			$l_table .= '<th style="border: 1px solid black; padding: 5px; text-align: left; background-color: #f0f0f0;">' 
      					 . htmlentities(self::_l($l_header)) 
      					 . '</th>';
      		}
      		$l_table .= '</tr>';
      
      		// Tabellenzeilen:
      		foreach ($p_entities as $l_entity) {
      			$l_table .= '<tr>';
      			foreach ($l_entity as $l_value) {
      				$l_table .= '<td style="border: 1px solid black; padding: 5px; white-space: nowrap;">' 
      						 . htmlentities($l_value) 
      						 . '</td>';
      			}
      			$l_table .= '</tr>';
      		}
      
      		$l_table .= '</table>';
      
      		return $l_table;
      	}
      

      Vielleicht kann man das gleich in eine nächste Version einbauen?
      PLAIN oder HTML ... wenn das wichtig ist zu entscheiden, dann wäre dies über die Verwaltung / Einstellungen interessant ... frage mich nur wofür?

      LG Stefan

      posted in Entwicklung
      StefanP74S
      StefanP74
    • RE: Switch Ports Sortierung

      ... und das erfreute mich ganz besonders 😊 👏

      posted in Betrieb
      StefanP74S
      StefanP74
    • Tabelle isys_catg_jdisc_device_information_list

      Hellau!

      Mir sind Ungereimtheiten bei der Tabelle isys_catg_jdisc_device_information_list aufgefallen.
      Der Auslöser war, dass sobald ich zB. bei Server die Spalte Letzter Discovery im Tabellen-Browser hinterlegte, dass doppelte Werte pro Objekt angezeigt wurden. So wurden 2 Zeitangaben als letztes Discovery angezeigt.

      Ein Blick in die Tabelle isys_catg_jdisc_device_information_list zeigte tatsächich doppelte Einträge anhand der Objekt-ID, welche im Feld isys_catg_jdisc_device_information_list__isys_obj__id hinterlegt wird.
      Es waren auch ~100 Datensätze mit Wert NULL in den Feldern:
      isys_catg_jdisc_device_information_list__import_date
      isys_catg_jdisc_device_information_list__last_seen
      isys_catg_jdisc_device_information_list__last_discovered
      ... zusätzlich zu bereits bestehenden korrekten Datensätzen (selbe Objekt-ID).

      Kann dies jemand bestätigen?
      Ist das ein alter Bug?
      Mir ist nicht klar wie das passiert, denn ein eben angelaufener Scan einzelner Objekte, hat das Problem nicht ausgelöst.

      Ich habe mal eben alle "fehlerhaften" Datensätze aus der Tabelle gelöscht und beobachte das Mysterium weiter.

      Kopfkratz

      LG
      Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Listenansicht Standardsortierung

      Hallo @LFischer,

      irgendwie hatte ich das Gefühl, das Thema kommt mir bekannt vor 😂
      Alles klar.

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • Listenansicht Standardsortierung

      Hallo,

      Mir wurde folgende Frage von einem Enduser gestellt:
      "Warum kann ich bei Kostenstelle kein Punkterl setzen?"

      Übersetzt:
      "Warum müssen wir ständig manuell nach dem Feld Kostenstelle im Listbrowsing sortieren?
      Kann man das nicht so einstellen, sodass beim Aufruf der Liste immer automatisch nach der Spalte Kostenstelle sortiert wird?"

      idoit_20250314_001.PNG

      An sich eine berechtigte Frage. 😑

      Hat mit Performance zu tun, denk ich mir ... wobei ganz verstehe ich es auch nicht.
      Die Auswahl der vordefinierten Sortierungsmöglichkeiten ist stark begrenzt im Standard.
      Gibt es dazu vielleicht mittlerweile in der Konfig einen Hebel, der diese Einschränkung aufhebt?

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: The search filter date does not work in customfield after upgrade

      Hi @inasutin,

      maybe a rebuild of the search-index can help you?
      we do it every day at 5am ... and all of our search problems are gone.

      cron-job-entry:
      0 5 * * * sudo -u www-data php /var/www/html/console.php search-index --user admin --password XXXXXXXXX --tenantId 1

      Regards,
      Stefan

      posted in General
      StefanP74S
      StefanP74
    • RE: Report nach Datum sortieren

      Servus @LFischer,

      Es ist noch nicht akut bei uns ... ich werde nur so einmal pro Monat "gefragt" 🤕 😂
      Hauptsache es ist eine Lösung welche im Standard umgesetzt wird.

      idoit_20250226_01.PNG

      Das Beispiel zeigt, dass eine Sortierung nach dem benutzerdefinierten Attribut "Nächste Überprüfung" (ein Datumsfeld) im Report-Manager nicht möglich ist.

      Sobald der Report geöffnet wird, ist mittels Klick auf die Überschrift die Sortierung nach dem genannten Feld möglich.
      Gewünscht ist aber, dass die Sortierung nach Datum bereits bei Erstellung des Reports hinterlegt ist.

      Manchmal sind es die kleinen Dinge, die uns beschäftigen. 🙄 😁

      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • RE: Report nach Datum sortieren

      Servus @LFischer,

      da ich wieder gefragt wurde: Hat sich in diese Richtung schon etwas getan?
      Datumsfelder sind in Reports oft entscheidend für die Sortierung.
      Da wäre eine Selektion über den Report-Manager (auch für technisch unversierte Anwender) eine erhebliche Erleichterung.

      Danke
      LG Stefan

      posted in Betrieb
      StefanP74S
      StefanP74
    • Wartung/Revision von Geräten und Anlagen

      Hallo die Runde,

      Wartungen sind ein großes Thema in der IT bzw. angrenzenden Abteilungen.
      Neben dem traditionellen IT-Equipment wie Server, Clients, Drucker etc. gibt es ja auch noch Gerätschaften im Bereich Klima, USV, Überwachung, PV, Elektroinstallationen an sich, Brandschutz, Schrankenanlagen, ... die unter wiederkehrender Wartung/Revision stehen.

      Das Terminmanagement, automatische Wiedervorlage etc. ist ja nur die eine Sache. Abweichungen, Berichte, Wartungsbücher, Zertifikate, involvierte Personen, ... usw. stehen dabei an der Tagesordnung.

      An sich wäre alles mit i-doit lösbar.
      Das Wartungs-AddOn ist in der aktuellen Form dafür eher nicht zu gebrauchen.

      Setzt ihr dafür eine eigene Software ein?
      Habt ihr euch dazu selbst etwas in i-doit gebastelt?

      Mit dem FlowAddOn sollte an sich die nötige Funktionalität gegeben sein.
      Sehen das Nutzer von Wartungstools anders?

      LG Stefan

      posted in Allgemein
      StefanP74S
      StefanP74
    • RE: Erfassen von Failover/HA Appliances, Definition von Member-übergreifenden Linkaggs auf Switch-Stacks

      Moin @cale,

      Bezüglich des HA:
      Wir haben das über einen Cluster definiert.

      LG PS

      posted in Allgemein
      StefanP74S
      StefanP74