Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: chatty am 27.06.05 - 12:57:58

Titel: Namensauflösung
Beitrag von: chatty am 27.06.05 - 12:57:58
Hallo an alle Notes-Jünger,

ich habe folgende Frage:
Wie kann ich die Namen der Personen welche zu einer Gruppe gehören in ein normales Text-Feld auflösen?

Beispiel: Die Gruppe Notes_Admin besteht aus den Personen Klaus, Michael und Werner. Im Dokument selbst habe ich ein Feld welches nur den Wert "Notes_Admin" enthält. Wenn ich dieses Dokument speichere möchte ich in einem weiteren Feld die Namen der Personen die zu "Notes_Admin" gehören angezeigt bekommen. Also in diesem Fall sollte das 2. Feld die Werte Klaus, Michael, Werner enthalten. Wie kann man das programmtechnisch hinbekommen?

Vielen Dank für jedwede Hilfe!!!!
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 27.06.05 - 13:20:23
Hi,

du musst mit dem Namen der Gruppen einen Lookup auf die, nach Gruppen sortierte Ansicht (ich glaube die heißt $Groups) machen und den Inhalt vom Feld Members auslesen.

Axel
Titel: Re: Namensauflösung
Beitrag von: chatty am 27.06.05 - 14:09:32
Hallo Axel,

erstmal vielen Dank für die schnelle Antwort.... nur leider weiß ich damit nichts anzufangen da ich mich noch nicht so gut mit dem Notes-Designer auskenne.

Ich gehe nochmals ins Detail:
Der Gruppen-Name "Notes_Admin" sowie die zugehörigen Personen sind im Adressbuch gepflegt. Wie genau bekomme ich die Namen aus dieser Gruppe in ein weiteres Textfeld auf meiner Maske? Das Textfeld selbst habe ich als "Computed" vom Typ "Text" angelegt welches nicht editierbar ist.

Ich habe als Default-Value für dieses Feld schon folgendes versucht:
   @Implode(@Name([CN];atOpenAddPers)

und

   @Name([Abbreviate]; atOpenAddPers)

beides ohne Erfolg. Das Feld "atOpenAddPers" enthält den Namen der Gruppe also in diesem Fall "Notes_Admin".

Chatty
Titel: Re: Namensauflösung
Beitrag von: diali am 27.06.05 - 14:19:31
da gibt es einige Ansätze.
Schau mal hier (http://www.atnotes.de/index.php?topic=22734.0) oder hier (http://www.atnotes.de/index.php?topic=22318.0).
Titel: Re: Namensauflösung
Beitrag von: ata am 27.06.05 - 22:38:42
... beim @Name nur einen Gruppennamen einzutragen, daß hilft bestimmt nicht - wenn schon, dann mit einem @DBLookup...

ata
Titel: Re: Namensauflösung
Beitrag von: chatty am 28.06.05 - 13:07:05
wie genau sieht dann die Syntax aus für den @DBLookup Befehl???

Das Quellfeld heißt "atOpenAddPers" mit Inhalt "Notes_Admin"
Das Zielfeld heißt "cgPersonsCC" und soll die Namen aus der Gruppe "Notes_Admin" enthalten.

Sorry für die vielleicht dumme Frage aber die Hilfe zu dem Befehl im Notes ist nicht wirklich aussagekräftig.

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 28.06.05 - 13:15:56
Hi,

deine Werte-Formel müsste so aussehen:

Code
@DbLookup("":"NoCache"; "Name deines Servers":"names.nsf"; "($Groups)"; atOpenAddPers; "Members");

Axel
Titel: Re: Namensauflösung
Beitrag von: ata am 28.06.05 - 13:17:58
danke Axel - da war ich schon mitten in meiner Antwort... ;D

... das wäre die Syntax für den @DBLookup - den Code anstelle des Gruppennamen im @Name verwenden...

ata
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 28.06.05 - 13:26:18
Bei dem Verfahren gilt es aber zu berücksichtigen, dass das nur funktioniert, wenn die DB auf dem Server liegt. Wird dieser Code lokal ausgeführt, werden keine oder falsche Angaben zurückgeliefert.

Ein unschöner, aber machbarer Workaround wäre die Verwendung der ReplikID des NABs, welche sinnvollerweise in einem Profile- oder SetupDoc stehen sollte.

Sicher kann man das allerdings nur in LS lösen.

Bernhard
Titel: Re: Namensauflösung
Beitrag von: chatty am 28.06.05 - 15:33:06
Hallo zusammen!

erstmal vielen Dank für die tatkräftige kompetente Unterstützung.

Ich glaube wir kommen der Sache schon näher, allerdings bekomme ich noch eine Fehlermeldung:

Feld: 'cgPersonsCC': Eintrag im Index nicht gefunden

Welcher Index ist hier gemeint? Was ist hier das Problem?

Ich habe für das oben genannte Feld als Default-Wert folgendes Coding probiert:

@Name([Abbreviate]; @DbLookup("":"NoCache"; "Name des Servers":"names.nsf"; "($Groups)"; atOpenAddPers; "Members"))

und nur:

@DbLookup("":"NoCache"; "Name des Servers":"names.nsf"; "($Groups)"; atOpenAddPers; "Members")


Wobei ich den kompletten Pfad in den "Name des Servers" eingefügt habe.
Bei beiden Varianten erhalte ich die obige Fehlermeldung.

Der Typ des Feldes ist "Namen" und "Berechnet".

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 28.06.05 - 15:43:16
Der Index, der gemeint ist, ist der Ansichtsindex der Ansicht, die Du durchsuchst, als "($Groups)" im NAMES.NSF.

Was meinst Du aber mit "Default value ? Du sprichst doch von einem berechneten Feld ...

Was meinst Du mit "vollständigen Pfad des Servers" ? Der Server hat einen Namen, Pfade kommen da nicht vor.

Da Du "vereinfachte Bedingungen" hast (die erforderlichen Infos stehen Dir alle über die Properties der Applikation, in der der Code läuft, zu Verfügung), solltest Du das @dbLookup wie folgt ausführen:

@DbLookup("":"NoCache"; @Subset (@dbName; 1):"names.nsf"; "($Groups)"; atOpenAddPers; "Members")

Damit liefert Dir Deine Applikation selbst den Servernamen zurück, auf dem die Applikation läuft.

HTH,
Bernhard
Titel: Re: Namensauflösung
Beitrag von: ata am 28.06.05 - 15:56:02
... bei einer Replik der Datenbank auf mehreren Servern kann er dann aber auf unterschiedliche Adressbücher stossen...

Der Fehler liegt am Gruppennamen, der muß in Anführungsstriche gebettet werden.

Toni
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 28.06.05 - 16:44:56
Der Fehler liegt am Gruppennamen, der muß in Anführungsstriche gebettet werden.

Hallo Toni,

wenn der Gruppenname, der ja aus dem Feld namens "atOpenAddPers" geholt wird, in Anführungszeichen gesetzt wird, dann sucht er nach einer Gruppe mit dem Namen des Feldes. Das wäre sicher nicht gewünscht.

... bei einer Replik der Datenbank auf mehreren Servern kann er dann aber auf unterschiedliche Adressbücher stossen...

Jo, Risiken und Nebenwirkungen sind bei dieser Methode nicht ohne. Allerdings sollte man solcherart Funktionalität nicht in DBs verwenden, die über Domänen hinweg (mit unterschiedlichen Adressbüchern) eingesetzt werden - da macht das ja sowieso keinen Sinn.

M.E. sollte man das Auslesen von Gruppen sowieso nur on-the-fly machen, da Gruppen jederzeit geändert werden können und sowas dann zur Asynchronität zwischen DB und NAB führen kann (wenn es auf x Servern möglich ist, das Feld zu ändern). Sowas muss man dann nicht noch unbedingt speichern und conflict docs provozieren.

Bernhard
Titel: Re: Namensauflösung
Beitrag von: chatty am 28.06.05 - 17:07:32
Hallo Bernhard, Hallo Toni,

mit Default-Wert meine ich die Formel die ich in den Properties des Feldes "cgPersonsCC" hinterlegt habe.

Aktuell habe ich diese Formel:

@DbLookup("":"NoCache"; @Subset (@dbName; 1):"names.nsf"; "($Groups)"; atOpenAddPers; "Members")


Trotzdem erhalte ich noch immer die Fehlermeldung das der Eintrag im Index für das Feld "cgPersonsCC" nicht gefunden wurde.

Habt ihr noch einen weiteren Ratschlag???

Schöne Grüße
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 28.06.05 - 19:33:38
Hi,

überprüf mal folgendes:

1. Wie heißt euer Adressbuch (Dateiname) und wo liegt es (Verzeichnis)?

2. Gibt's den Gruppennamen der in dem Feld eingetragen ist wirklich?

3. Was steht im Feld atOpenAddPers.

Du kanst auch mal testen was passiert wenn du einen Gruppennamen, den es wirklich im Adressbuch gibt, als Parameter (statt atOpenAddPers, aber dann in Anführungszeichen) angibst.

Axel
Titel: Re: Namensauflösung
Beitrag von: ata am 29.06.05 - 09:41:57
@Bernhard

... wenn "atOpenAddPers" ein Feldname ist, hast du natürlich Recht...

... dann gibt es den Feldinhalt nicht in der ersten Spalte (muß sortiert sein - ist sie das noch?) der Ansicht ...

Toni
Titel: Re: Namensauflösung
Beitrag von: chatty am 29.06.05 - 15:46:27
Hallo Axel,

1. unser Adressbuch heißt names.nsf und lieht im Domino1-Verzeichnis auf unserem Server

2. den Gruppenname gibts wirklich da er direkt aus dem Adressbuch ausgewählt wird

3. im Feld atOpenAddPers stehen Namen von einzelnen Personen oder eben Gruppenname die alle aus dem Adressbuch ausgewählt werden

Ich habe auch versucht statt dem Feld "atOpenAddPers" einen Gruppennamen aus dem Adrssbuch in Anführungszeichen in die Formel einzubauen.

Trotzdem erhalte ich noch immer obige Fehlermeldung.

Als Formel für das Feld "cgPersonsCC" (ist ein Textfeld welches berechnet wird) verwende ich aktuell:

@DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Groups)"; atOpenAddPers; "Members")


Hast du noch eine Idee woran es liegen könnte?

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 29.06.05 - 15:56:48
Der Ansichtsname stimmt nicht - verwende die Ansicht "Groups" oder - besser, weil Systemansicht, die sowieso niemals jemand anfassen sollte - "($Users)".

Für ein berechnetes Feld musst Du noch den Fall "Vorgabe nicht ausgefüllt" berücksichtigen, also

@If (atOpenAddPers != ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; atOpenAddPers; "Members"); "")

Auch auf lokale Anwendung solltest Du prüfen, aber das hatte ich glaube ich schon geschrieben.

Bernhard
Titel: Re: Namensauflösung
Beitrag von: chatty am 29.06.05 - 17:10:53
Hallo Bernhard!!!

du hast es geschafft... nun geht es!!!!

Es hat nur einen Schöheitsfehler noch... die Namen der Grupper werden zwar nach dem Sichern des Dokuments in das Feld "cgPersonsCC" aufgelöst allerdings sieht das dann folgendermaßen aus:

CN=Peter Heinze/O=IT-Firma;CN=Gerd Müller/O=IT-Firma;CN=Regina Foss/O=IT-Firma

Kann man die CNs und O= irgendwie entfernen?

Nochmals vielen Dank an dich und alle anderen die so toll geholfen haben.

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 29.06.05 - 17:16:59
Nimm einfach @Name ([CN]; deinfeldname), das setzt das entsprechend um.
Wenn Du dann noch die Namen untereinander darstellen willst, kannst Du das auch noch in den Feldeigenschaften einstellen (dritter Tab Propellerhat alias "Karlson auf dem Dach"), dort als Anzeigewert "Neue Zeile" eintragen.

HTH,
Bernhard
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 29.06.05 - 18:50:58
Ich habe lange nix mehr mit der Ansicht "($Groups)" gemacht und eben spassenshalber nochmal nachgeschaut, warum diese Ansicht denn für Deine Zwecke die ungeeignete war: "($Groups)" zeigt nur Gruppen an, die NICHT für "mehrere Zwecke" eingerichtet wurden.

Da "($Users)" nahezu alle Dokumente, die für derartige Abfragen (nach Groups, Users, Servers etc.) aufnimmt, ist das bei mir gewohnheitsmässig erste Wahl.

Bernhard
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 08:16:53
Hallo Bernhard,

hurrrrraaaaaaaaaaaa!!!!! so habe ich es mir vorgestellt  :) :) :)

Vielen Dank für die tolle Unterstützung!!!

Noch zwei letzte Fragen... gibt es eine einfache Möglichkeit das das Feld in dem die Namen aufgelöst werden zu Beginn immer leer ist? So wie es aussieht übernimmt es immer die aufgelösten Namen aus dem vorherigen Dokument. Diese Namen werden zwar überschrieben sowie ein Gruppenname in das Quellfeld eingetrage und gespeichert wird aber für die User sieht das natürlich nicht so schön aus wenn das Zielfeld schon vorher gefüllt ist.

Für den Fall das in dem Quellfeld Gruppennamen und Namen einzelner Personen vorhanden sind werden in dem Zielfeld nur die Namen der Gruppe aufgelöst. Die Namen der einzelnen Personen aus dem Quellfeld werden dabei aber nicht in das Zielfeld übernommen. Gibt es hier noch eine einfache Möglichkeit das auch die einzelnen Namen mit übernommen werden?

Viele Grüße
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 08:27:10
... gibt es eine einfache Möglichkeit das das Feld in dem die Namen aufgelöst werden zu Beginn immer leer ist? So wie es aussieht übernimmt es immer die aufgelösten Namen aus dem vorherigen Dokument. Diese Namen werden zwar überschrieben sowie ein Gruppenname in das Quellfeld eingetrage und gespeichert wird aber für die User sieht das natürlich nicht so schön aus wenn das Zielfeld schon vorher gefüllt ist.

Hast du in den Maskeneigenschaften die Option "Formeln übernehmen Werte aus gewähltem Dokument" gesetzt? Was steht denn in dem Vorgabewert des Feldes?


Für den Fall das in dem Quellfeld Gruppennamen und Namen einzelner Personen vorhanden sind werden in dem Zielfeld nur die Namen der Gruppe aufgelöst. Die Namen der einzelnen Personen aus dem Quellfeld werden dabei aber nicht in das Zielfeld übernommen. Gibt es hier noch eine einfache Möglichkeit das auch die einzelnen Namen mit übernommen werden?

Eine einfache Möglichkeit sehe ich hier nicht. Wie soll denn unterschieden werden können, was ein Gruppenname ist und was nicht?


Axel
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 10:16:26
Hallo Axel,

es liegt wirklich daran das in den Masken-Eigenschaften die Option "Formel übernehmen Werte aus gewähltem Dokument" gesetz ist. Allerdings brauche ich diese Option für ein anderes Feld so das ich das nicht deaktivieren kann.

Zu dem zweiten Punkt: dies hat sich erledigt, habe selbst eine Möglichkeit gefunden.

Viele Grüße
Chatty
Titel: Re: Namensauflösung
Beitrag von: Semeaphoros am 30.06.05 - 10:18:13
Dann nimm den Vorgabewert aus dem Zielfeld heraus, der hat hier vermutlich sowieso nichts verloren.
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 10:20:26
Hi,

die Maskenoption kannst du ja gesetzt lassen. Dann schau dir doch mal den Vorgabewert für das Feld an, dass die aufgelösten Namen entfernt. Ich vermute mal, dass da was drin steht. Lösch' mal den Eintrag im Vorgabewert und dann dürfte das Problem nicht mehr bestehen.


Zu dem zweiten Punkt: dies hat sich erledigt, habe selbst eine Möglichkeit gefunden.

Läßt du uns an deiner Lösung teilhaben?


Axel
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 12:07:42
wo genau soll ein sogenannter "Vorgabewert" für das berechnete Zielfeld stehen? Habe hier in den Feld-Eigenschaften des Zielfeldes nichts gefunden.

Zu meiner Lösung: die ganze Aktion benötige ich um in einem "persönlichen" View der User die ihnen zugeordneten Dokumente anzuzeigen.
D.h. wenn das Quellfeld Gruppen-Namen und Namen einzelner Personen enthält so soll dieses Dokument den einzelnen Personen und den Personen in der Gruppe in ihrem persönlichen View angezeigt werden.
Damit das funktioniert habe ich den View so angepasst das dieser die Dokumente für das Zielfeld (enthält alle Namen der Gruppe) und das Quellfeld (enthält einzelne Namen und Gruppennamen) anzeigt. Und das funktioniert so ganz gut!!!

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: Semeaphoros am 30.06.05 - 12:19:45
Das ist auch nicht im Eigenschaftenfenster, sondern im Programmierfenster unter den zum Feld gehörenden Events
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 13:08:27
Hi,

für ein berechnetes Feld gibt es keinen Vorgabewert. Es gibt hier nur eine Werteformel.
Wie sieht den die Werteformel aus?

Unter Umständen muß hier eine Abfrage rein, ob es ein neues Dokument ist.

Ganz grob könnte es z.B. aussehen:

@If(@IsNewDoc(); ""; "...hier kommt dann deine bisherige Formel rein")


Axel
 
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 13:28:33
Hallo Axel,

wenn ich die Formel so umbaue:

@If(@IsNewDoc; "";
@If (atOpenAddPers != ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members"); ""))

dann werden die Namen erst beim 2. Speichern aufgelöst und in diesem Dokument dann auch gesichert. Wenn ich das erste Mal auf Speicher drücke dann wird nur das Dokument gespeichert, die Name der Gruppe werden nicht aufgelöst im Zielfeld. Dies geschieht erst wenn ich nochmal speichere.

Woran kann das liegen? Wird diese Formel beim ersten Mal Speichern nicht durchlaufen?

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 13:35:32
Hi,

yoo, den bis zum ersten Speichern zählt das Dokument als neu und hier schlägt dann @IsNewDoc gandenlos zu.

Ein richtig schlaue Idee hab ich im Moment nicht. Unter Umständen bleibt dir nichts anderes übrig, das Füllen des Feldes in den QuerySave-Event zu verlegen.



Axel
Titel: Re: Namensauflösung
Beitrag von: DaGu am 30.06.05 - 13:43:51
super, konnte ich sofort gebrauchen...

ist es denn auch möglich, die auflösung noch weiter zu betreiben, wenn also member einer gruppe ebenfalls gruppen sind???

danke schonmal im vorraus...
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 13:57:59
noch ein kleines Ärgernis das mir gerade ein User mitteilte...
Es gibt Dokumente in denen das Quellfeld Personen enthält die nicht mehr länger registriert sind, die also im Adressbuch fehlen.

Hier kommt dann wenn man das betreffende Dokument öffnen möchte die Fehlermeldung:

Feld: 'cgPersonsCC': Eintrag im Index nicht gefunden

Dieses Feld enhält die aufgelösten Namen der Gruppe.

Kann man diese Meldung irgendwie umgehen? Sonst kommt man nicht mehr ins Dokument rein was natürlich nicht so toll ist.

Wenn ja wie?

Gruss
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 14:32:20
Hi,

bau mal vor dein @DBLookup noch ein @If(@IsError; ...), dann sollte es funktionieren.

@If (atOpenAddPers != ""; @If(@IsError; ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members")); "")


Axel
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 14:48:48
Hallo Axel,

ich glaub ich bin zu doof um deine Formel zu verwenden, beim Speichern kommt die Meldung das ein ";" für eine linke Klammer fehlt.

@If (atOpenAddPers != ""; @If(@IsError; ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members")); "")

Der ";" nach dem @IsError wird hierbei rot markiert.

Siehst du den Fehler???
Titel: Re: Namensauflösung
Beitrag von: koehlerbv am 30.06.05 - 14:53:21
Dir fehlen die Argumente für @IsError (von was).

@If (atOpenAddPers != ""; @If(@IsError (@DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members")); ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members")); "")


Bernhard
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 15:10:41
Hallo Bernhard,

ja hab ich auch gemerkt nachdem ich bestimmt zum 95. Male mir die Formel angeguckt habe. Aber jetzt funzt alles wie es sein soll.
(Zumindest so lange bis der nächste User kommt  :))

Ich möchte mich nochmal bei allen recht herzlich für den supertollen Support bedanken!!!!   ;D :D ;)

Wünsche euch noch frohes Schaffen!  :)
Chatty
Titel: Re: Namensauflösung
Beitrag von: Axel am 30.06.05 - 15:34:47
Sorry, ich bin beim Schreiben der Antwort abgelenkt worden.  :-\

Bernhard hat natürlich recht, @IsError von was. "Von was" muss man natürlich angeben.

Du kannst allerdings deine Formel etwas übersichtlicher gestalten:

tmpValue:=@If (atOpenAddPers != ""; @DbLookup("":"NoCache"; @Subset (@DbName; 1):"names.nsf"; "($Users)"; @Name([CN]; atOpenAddPers); "Members"); "");
@If(@IsError(tmpValue); ""; tmpValue)


Axel
Titel: Re: Namensauflösung
Beitrag von: chatty am 30.06.05 - 15:58:17
danke für den Nachtrag Axel, werde ich gleich mal ausprobieren  ;)

chatty