Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: emadowo am 18.10.21 - 16:48:53



Titel: Leserfeld: Namen auf [CANONICALIZE] ändern
Beitrag von: emadowo am 18.10.21 - 16:48:53
Hallo!
Muss zu meiner Schande gestehen, gegen die Regel #4 aus https://atnotes.de/index.php/topic,51224.0.html verstossen zu haben.  ::)
Hab doch tatsächlich in einem Leserfeld [CN] verwendet. "Damals" wars schöner zu handhaben und hatte immer prima funktioniert.

Auf Grund einer Verlagerung meiner Datenbank auf einen anderen Notesserver sehen manche der Leser ihre Einträge nicht mehr.

Nun muss ich die Namen in den Leserfelder (Mehrfachwerte) in den "vollständigen qualifizierten Benutzernamen" ändern, also [Canonicalize].

Und hier sitz ich auf der Leitung und hoffe, ihr helft mir davon runter.

Hab schon versucht, mittels Agent:
holeName := @GetField("$MNAutoren");
kanon := @Name([Canonicalize];holeName);
FIELD $LeseMNAutoren := kanon;
abzuändern, aber die Namen bleiben unverändert.

Vielen Dank!


Titel: Re: Leserfeld: Namen auf [CANONICALIZE] ändern
Beitrag von: Riccardo Virzi am 18.10.21 - 19:56:11
Der @Name Befehl bearbeitet nur den String/Benutzernamen, den er übergeben bekommt. Er macht keine Lookups, um den Namen zu vervollständigen. Die Möglichkeit scheidet leider aus.

Ist die Hierachie bei jedem Benutzer gleich? Das wäre dann einfach:
FIELD Feldname := "CN=" + Feldname + "/OU=Abteilung/O=Firma";
Das geht auch mit Mehrfachwerten.

Ich vermute aber, daß dem nicht so ist. Entweder eine Schleife programmieren, die jeden einzelnen Feldwert ausliest und im names per @DbLookup nach dem kompletten Benutzernamen sucht und dann ersetzt.

Oder mit @Replace arbeiten. Da muß aber eine Benutzerliste aufgebaut werden:
Suche := "Vorname1 Nachname1" : "Vorname2 Nachname2";
Ersetze := "CN=Vorname1 Nachname1/OU=Abteilung 1/O=Firma" : "CN=Vorname2 Nachname2/OU=Abteilung 2/O=Firma";
FIELD Feldname := @Replace( Feldname; Suche; Ersetze );

Keine Gewährleistung für die Formeln. Habe ich nur mal schnell getippt, den gerade Lese- oder Schreibberechtigungen sind heikel  ;)


Titel: Re: Leserfeld: Namen auf [CANONICALIZE] ändern
Beitrag von: CarstenH am 18.10.21 - 23:43:50
Der @Name Befehl bearbeitet nur den String/Benutzernamen, den er übergeben bekommt. Er macht keine Lookups, um den Namen zu vervollständigen.

Mit @NameLookup sollte es in einem Rutsch ohne "Basteln" gehen - sofern die CN's eindeutig und gültig sind.

Mit gültig meine ich, dass bei früheren Namensänderungen der Nutzer mit hoher Wahrscheinlichkeit nicht alle CN's geändert worden sind, wenn die alten Namen dann iwann aus den Personendokumenten gelöscht wurden findet @NameLookup natürlich nichts mehr und liefert einen leeren Wert. Also am besten einen Probelauf in ein temporäres Feld machen und abschließend Anzahl der Elemente alt/neu vergleichen.

https://help.hcltechsw.com/dom_designer/12.0.0/basic/H_NAMELOOKUP_7699.html

HTH
Carsten


Titel: Re: Leserfeld: Namen auf [CANONICALIZE] ändern
Beitrag von: Riccardo Virzi am 19.10.21 - 08:16:04
Man lernt doch nie aus  :) Den Befehl @NameLookup kannte ich noch nicht, danke.

Ich muß Carsten zustimmen: wenn der Befehl @NameLookup einen leeren String zurück gibt, wenn kein Name gefunden wurde, ist das schlecht. Dann wird der Name aus dem Feld entfernt und der Benutzer hat keinen Zugriff mehr und es gibt auch keinen Verweis, daß der Benutzer mal Zugriff hatte.

Zum testen kann @Elements verwendet werden, aber nicht den Befehl @Trim vergessen! Ohne @Trim wird die Anzahl der Elemente gleich sein, da der @NameLookup Befehl vermutlich leere Elemente zurück gibt. Beispiel:
@If( @Elements( Feldname ) <> @Trim( @Elements( @NameLookup( Feldname ) ) ); @Prompt( "FEHLER" ); "" );

Das geht auch in einem Agenten, ohne das Daten verändert werden müssen. Das ist aber nur zum Prüfen, ob das vorkommt. Und nicht vergessen, wenn das 10.000 Dokumente betrifft, dann kommt auch 10.000 mal die @Prompt Meldung mit dem Fehler  :o
Wenn es tatsächlich so viele Dokumente sind, kannst Du auch in der notes.ini eine Variable auf 0 setzen und anstatt dem @Prompt Befehl die notes.ini Variable jedes Mal um eins hochzählen. Kommt auf die Anzahl der Dokumente an.