Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: cg-home am 15.08.17 - 10:26:56

Titel: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: cg-home am 15.08.17 - 10:26:56
Hallo zusammen,
bei einem Problem benötige ich mal wieder eure Unterstützung.

Ich will Dokumente in einer Ansicht nach „Nachnamen, Vornamen“ kategorisieren bzw. sortieren.
Das wünschen sich viele User, da sie von allen Mitarbeitern nicht die Vornamen kennen eher die Nachnamen.
 
Bei Namensfelder mit nur einem Wert habe ich es mit Formelsprache auch schon hin bekommen mit @Name+CN/@Right usw.
und als Trenner das Leerzeichen zwischen Vor- und Nachnamen.
Ist es aber ein Namensfeld (z.B.: Teilnehmer bei einem Protokoll) mit mehreren Einträgen, klappt es nur wenn sie
gleich aufgebaut sind mit z.B.:
„Vorname Nachname/OU/O“.

Wir haben aber auch folgende Namen
„Nachname/OU/O“   (ohne Vornamen, in Asien)
„Vorname Namenszusatz Nachname/OU/O“   (z.B.: Vorname Van de Nachname, in Niederlande)
„Name“   (manuell eingegebener Namen, z.B.: Externe Dienstleister)
„Gruppe“   (Gruppennamen)
„1.Vorname 2.Vorname Nachname/OU/O“   (Haben wir derzeit nicht ist aber möglich)

Um es für jede Schreibweisen hin zubekommen habe ich das ganze in ein Lotus Script erstellt, mit einer Schleife
auf alle Einträge, was auch soweit klappt mit ein paar Problemen.
Füge ich das Script beim speichern des Dokumentes ein (Query/Postsave), klappte es immer erst beim zweiten
speichern oder mit Fehlermeldungen. Vermutlich hatte ich hier ein Backend-Frontend-Problem.

Derzeit habe ich es im Namens-Feld selbst beim Event Onchange eingefügt.
Da klappt es, aber für Felder die schon mit einem Namen vorgefüllt sind, geht es natürlich nicht, da das Event
nicht ausgelöst wird. Auch in der Ansicht kann ich die Daten nicht bereinigen mit einem
„@Command([ToolsRefreshSelectedDocs])“ was ich ganz gerne zum Bereinigen von Kategorien usw.
über Berechnete Felder nutze.

Am liebsten wäre es mir ja in einem Berechneten Feld aber da geht ja nur Formel.
Oder ich trage hier ggf. eine Formel zum Starten eines Agenten ein welcher wiederum ein Script starten.

Da ich nach den ersten Leerzeichen gehe, klappt das nicht für den Fall mit Zwei Vornamen.
Das wollte ich schon mal so lösen, dass ich alle Namen im Domino Directory nachschlage und mir dort die Felder
Firstname und Lastname hole. Aber bei z.B.: 20 Namen ist das vermutlich nicht ideal immer im DD nach zu sehen.
Auch haben unsere Ausländischen Standorte eigene DD, somit sind deren User gar nicht in unserem DD.

Bevor ich hier weiter „bastle“ würde ich gerne von Euch wissen, wo ist die richtige Stelle um so ein Script zu hinterlegen?
Wie macht Ihr das, ggf. ganz anders?
Kennt Ihr eine gute Beschreibung worauf man in Lotus Script bzgl. Frontend/Backen Zugriff achten muss?

Wäre Klasse wenn ihr mir hier weiter helfen könntet, das aktuelle Script habe ich mal angehängt bei Interesse.

Danke schon mal für Eure Zeit.

Christian

Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: Tode am 15.08.17 - 11:18:49
Nimm @NameLookup und hole Dir die Felder "FirstName" und "LastName" damit... dann bist Du ganz sicher.
Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: Peter Klett am 15.08.17 - 11:31:34
Eigentlich muss das im Querysave funktionieren. Wenn da Fehler auftreten, musst Du denen nachgehen, evtl. ein Refresh einfügen.

Grundsätzlich halte ich das Vorgehen für nicht wirklich erfolgreich, denn es wird immer Namen geben, die von einer Maschine nicht korrekt zu trennen sind, da hilft wirklich nur die Verwendung separater Felder.

Versuche mal die Namen der beiden Biathleten Fanny Horn Birkeland und Lars Helge Birkeland sauber zu teilen. Kleiner Tipp: Horn ist ein Nachname, Helge ein Vorname.


@Tode: Das DD ist laut cg-home nicht vollständig vorhanden, sonst wäre das sicher ein guter Weg




 
Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: cg-home am 15.08.17 - 12:19:20
Danke für die schnelle Antwort.

@Thorsten
mit @NameLookup hatte ich es auch schon mal versucht aber nicht gelesen das es über alle DD geht.
Ich habe es jetzt gleich mal mit folgenden versucht.

vVorname := @NameLookup([NoUpdate];Teilnehmer;"FirstName");
vNachname := @NameLookup([NoUpdate];Teilnehmer;"LastName");
@If(vVorname="";vNachname;vNachname + ", " + vVorname)

oder einfacher

@NameLookup([NoUpdate];Teilnehmer;"LastName")  + ", " + @NameLookup([NoUpdate];Teilnehmer;"FirstName")

Mit der Option NoUpdate bekomme ich jetzte nur noch ein Ergebnis und auch von den DD der Töchter.
Aber auch hier klappt es nur, wenn der Name gleich aufgebaut ist.
Sobald nur ein Eintrag mit einem Nachname enthalten ist, kommt es durcheinander und die Vornamen stehen bei anderen
Nachnamen und kommen mehrfach vor. Eigentlich klar, es werden ja dann zwei Listen mit unterschiedlicher Anzahl Einträge
miteinander kombiniert.


@Peter
Dann versuche ich es noch mal mit dem Querysave und gehe auf die Fehlermeldungen los.
Ggf. kann ich sogar über ein Evaluate das @NameLookup nutzen um auf die Felder zu kommen.
Damit sollte der Zugriff auch realativ flott gehen.
Wenn es im DD korrekt eingetragen ist, sollte es dann auch mit Horn und Helge klappen.
Wer weiß was dann noch für Stolperfallen kommen ;-)

Im Querysave müsste ich doch dann bei einem neuen Dok auch immer nur auf das Frontend gehen - oder?.
Was gibt es hier alles zu beachten? NotesItem gibt es z.B.: nur für Backend und wenn ich dann Mehrfach-Felder
auslese muss ich das mit uidoc.FieldGetText( vFELD ) machen und bekomme keine Liste.
Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: Peter Klett am 15.08.17 - 13:01:09
Ich würde es nur über das Backend machen, z.B. so

Code
Dim namen As Variant
namen = doc.Feld1
Forall n In namen
   n = Korrektur (n)
End Forall
doc.Feld2 = namen
Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: cg-home am 15.08.17 - 15:05:17
Danke, jetzt habe ich meinen Fehler gefunden.

Ich habe es auch wieder auf das Backend im Querysave umgestellt
und gesehen, dass ich als Quellfeld ein Feld genommen habe welches auch
schon berechnet ist, darum musste ich immer zweimal speichern. grrr!

Mit Evaluate scheint es jetzt auch zu klappen, hatte noch etwas gehakt,
da mir nicht bewusst war, das Evaluate immer ein Array zurück gibt
und die String-Variabel das nicht gerne hat.
Und wieder bestätigt sich "Wer lesen kann........

Code
	'Auf Notes Namen prüfen - Im Frontend ohne CN=
		If InStr(v,"/") > 0 Then
			'vFullName = StrRight(StrLeft(v,"/"),"CN=")
			vFullName = StrLeft(v,"/")

			vFormula = {@NameLookup([NoUpdate];"} & v & {";"LastName")}
			vLastName = Trim(Join(Evaluate(vFormula)," "))

			vFormula = {@NameLookup([NoUpdate];"} & v & {";"FirstName")}
			vFirstName = Trim(Join(Evaluate(vFormula)," "))  
			
		Else		'Bei manuell eingetragenen Namen ohne / auf Leerzeichen trennen
			vFullName = v

			vLastName = StrRight(vFullName," ")
			vFirstName = StrLeft(vFullName," ")

		End If		'If InStr(v,"/") > 0 Then


Da einzige was noch nicht geht ist der refresh über die Ansicht, aber wenn das nötig werden sollte
kann ich mir einen Agenten machen der das gleiche Script nutzt.

Und wie Peter schon angemerkt hat ist es keine 100% Lösung z.B.: wenn "Nachname Vorname" manuell eingegeben wird.
Ich mache mir in dieser DB Test Ansichten und wenn Sie produktiv genutzt wird, sehe
ich ja wie gut es klappt - oder auch nicht.

Danke Euch beiden, habt mir wieder mal auf die Sprünge geholfen.
Titel: Re: Dokumente nach „Nachnamen, Vorname“ Kategorisieren
Beitrag von: ronka am 17.08.17 - 12:27:15
Es gibt viele Länder mit doppel Nachnamen wie "Manfred Graf von Nassau bis Oranien", dort geht es dann auch nur wenn beim Registrieren die richtige einträge im Personen dokument gemacht würden.

Ich habe vor lange lange zeit mal für ein CMR eine solche formel erstellt, der aber mit sehr viele ausnahme regelungen auch eine "Eva Maria Gonzales Mercado" richtig einordnen könnte, aber bei "Manuel Espido Andres Villejacho Sandrez-valdez" dann doch wieder scheiterte.