Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: MarkusL am 24.01.12 - 16:19:22

Titel: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 24.01.12 - 16:19:22
Hallo zusammen,

ich möchte gerne eure Ratschläge berücksichtigen und kein Profildokument sondern ein normales anderes Dokument nutzen.

Die Feldinhalte im Profildokument habe ich bisher mit @GetProfileField ausgelesen.
Wie kann ich die Felder in einem "normalen" Dokument auslesen, welches mir als Konfigurationsdokument dient?

Ich habe im neuen Konfigurationsdokument bereits ein Feld "Ansicht" eingebaut, nach dem ich suchen könnte. Sofern dies der richtige Ansatz ist.

Wäre nett, wenn mir jemand auf die Sprünge hilft, nach welchem Begriff ich in der Hilfe suchen könnte bzw. wie die dieses Thema angehen könnte.

Danke für eure Hilfe.
Gruss Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Klafu am 24.01.12 - 16:24:30
Meinst du sowas wie @GetField?
Wie oder was genau willst du suchen?

Chris
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 24.01.12 - 16:28:05
Hallo Chris,

Ja - oder sowas meinte ich. @GetField funktioniert doch nur im gleichen Dokument, oder? Zumindest habe ich das so verstanden.
Ich möchte aber in einem neuen Dokument ein Feld automatisch mit einem Wert aus dem "Konfigurationsdokument" befüllen lassen.

Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Mitch am 24.01.12 - 16:29:00
@DbLookUp bzw. @DbColumn.

In dem Fall müsstest du eine Ansicht für deine Konfig-Doks haben. Über die genannten Befehle kannst du dann beliebige Items aus den Dokumenten bzw. Spalten aus der Ansicht auslesen.

Gruß,

Mitch
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: koehlerbv am 24.01.12 - 16:29:43
So oder so (auch vor dem @GetDocField, was Chris sicherlich meinte) braucht es ein @dbLookup, um das Konfigurationsdokument zu holen und den Wert auszulesen (oder seine UNID aus einer entsprechenden Ansicht, um @GetDocField nutzen zu können).

Bernhard
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 24.01.12 - 16:35:27
Danke für die Ansätze.
Werde ich testen und dann morgen berichten.

Schönen Feierabend.
Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: koehlerbv am 24.01.12 - 16:45:16
Nicht testen, sondern machen. Das von uns beschriebene funktioniert nämlich garantiert.  ;)

Bernhard
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: pram am 24.01.12 - 17:24:24
Man könnte die UNID des Konfigurationsdokument (welche sich nie ändern sollte, wenn es nur ein Konfiig-Dok gibt) wiederrum in einem Profildokument abspeichern (oder gar hart codieren, wenn man mutig ist  ;D ), dann spart man sich den (etwas langsameren) DBLookup/DBColumn.

Wenn man die UNID hat, dann wie bereits beschrieben mit @GetDocField darauf zugreifen

Gruß
Roland
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: koehlerbv am 24.01.12 - 17:31:34
Das halte ich aber für die schlechteste aller Ideen, Roland (vom hardcoden rede ich jetzt gar nicht). Es gibt soviel Gründe, warum sich die UNID ändern könnte (Datenbankreparatur, Speicher- oder Replizierkonflikt, def. Dokument etc.). Dann kommen weitere Konfigurationsdokumente hinzu und das ganze wird ein Flöhehüten ohne Ende.

Um einen hinreichend schnellen Zugriff auf das oder die Konfigurationsdokumente zu erhalten, gibt es probatere Mittel  ;)

Bernhard
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 25.01.12 - 10:59:52
Tag zusammen,

habe jetzt gemacht, getestet und für meine Bedürfnisse für gut empfunden.

Hier mein Code (der bestimmt von euch verbessert werden kann und wird, aber für meine Bedürfnisse reicht es. Und man wächst mit der Zeit.):

Server            := "";
DB               := "";
Ansicht          := "Konfiguration";
Auswahl         := "Konfiguration";
Feldauswahl           := "team01_wann_1";
Feldfertig         :=@DbLookup("":"ReCache";Server:DB;Ansicht;Auswahl;Feldauswahl;[PartialMatch]);
@If(team01_wann_1="";Feldfertig;team01_wann_1:=team01_wann_1)

Die Begriffe Server, DB, Ansicht, Auswahl und Feldauswahl habe ich vorher definiert, damit es für mich erklärender wird und ich dies ggfls. auch in anderen DBs verwenden kann.
Feldfertig fragt dann halt das entsprechende Feld ab.
Und die letzte Zeile füllt das Feld in der aktuellen Maske. Es soll aber nicht neu befüllt werden, sofern es bereits gefüllt ist.

Ich finde es gut und es funktioniert.

Danke für die Hilfe.
Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Mitch am 25.01.12 - 11:05:35
Soweit, sogut.

Aber: Lookups sollte man immer abfangen, also den Fehler-Fall bedenken.

Das könnstest du z.B. tun, indem du die Rückgabe vor der Weiterbearbeitung mit @IsError überprüfst. Alternativ kannst - wenn unkritisch - dem DbLookUp auch ein [FailSilent] mitgeben, dann liefert er im Fehlerfall einfach nichts zurück.

Gruß,

Mitch
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 25.01.12 - 11:16:10
Hallo Mitch,

danke für den Hinweis. Habe ich mit [FailSilent] umgesetzt.

Gruß
Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 11:17:12
Sehe ich das richtig, dass die Formel in der Berechnungsformel des Feldes "team01_wann_01" steht? Falls ja:

Diese Zeile
@If(team01_wann_1="";Feldfertig;team01_wann_1:=team01_wann_1)

könntest Du auch so schreiben
@If(team01_wann_1="";Feldfertig;team01_wann_1)
-> wenn Feld = leer, dann neuer Wert, sonst alter Wert

Dieser Hinweis gilt generell für solche Formeln. Um die Anwendung performanter zu machen, solltest Du die Reihenfolge umstellen.

Du ermittelst im Moment den Wert mittels @DBLookup, den Du eintragen willst
Dann erst prüfst Du, ob der Wert überhaupt eingetragen werden soll

Da ein @DBLookup Zeit kostet, würde ich das umstellen

@If(team01_wann_1!="";@Return (team01_wann_1); "");
Server            := "";
DB               := "";
Ansicht          := "Konfiguration";
Auswahl         := "Konfiguration";
Feldauswahl           := "team01_wann_1";
team01_wann_1         :=@DbLookup("":"ReCache";Server:DB;Ansicht;Auswahl;Feldauswahl;[PartialMatch]);

Ist das Feld bereits gefüllt, gibst Du den Feldwert zurück und beendest die Funktion, nur wenn es leer ist, berechnest Du es. Da Dein Feld berechnet ist, wird es bei jedem F9 und jedem Speichern neu gerechnet. Da solltest Du auf unnötige Berechnungen verzichten.
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 25.01.12 - 11:41:32
Hallo Peter,

danke für den Tipp.
Leider funktiniert das nicht, da das Feld aufgrund deiner Formel geleert wird. Und dann auch beim nächsten Öffnen nicht mehr gefüllt wird.
???

Gruss Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 11:52:31
Wo steht die Formel?
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 11:54:07
Hast Du das Ausrufezeichen gesehen?

@If(team01_wann_1!="";@Return (team01_wann_1); "");
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 25.01.12 - 12:05:11
Hallo Peter,

die Formel steht in einem berechnetem Feld (von denen es viele gibt). Daher ist deine Idee gut.
Das Ausrufezeichen habe ich gesehen. Ich habe deine Formel mit copy & paste eingefügt.

Meines Erachtens kommt das leere Feld nach der Berechnung durch das
@If(team01_wann_1!="";@Return (team01_wann_1); "");
in deiner Formeld.
Müsste hier nicht ebenfalls team01_wann_1 stehen?
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 12:17:32
Steht die Formel in dem berechneten Feld team_01_wann_1?

@If(team01_wann_1!="";@Return (team01_wann_1); "");

Die Formel bedeutet folgendes:

Wenn team01_wann_1 nicht leer ist, gib den Inhalt von team01_wann_1 zurück und beende die Formel
sonst mache nichts

Danach wird die Formel fortgesetzt, falls nicht durch @Return abgebrochen wurde.
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 12:38:58
Hab den Fehler gefunden (kommt davon, wenn man das so nebenbei macht). In der letzten Zeile streiche  team01_wann_1, das ist völliger Quatsch. team01_wann_1 ist auf diese Weise eine temporäre Variable, die nur in der Formel gültig ist. In der Formel des gleichen Feldes muss es nicht expliziet zugewiesen werden, steht solch eine Formel in einem anderen Feld, müsste es heißen FIELD  team01_wann_1 := ...

Sorry

@If(team01_wann_1!="";@Return (team01_wann_1); "");
Server            := "";
DB               := "";
Ansicht          := "Konfiguration";
Auswahl         := "Konfiguration";
Feldauswahl           := "team01_wann_1";
team01_wann_1         :=@DbLookup("":"ReCache";Server:DB;Ansicht;Auswahl;Feldauswahl;[PartialMatch]);


EDIT: natürlich musst Du auch noch Dein FailSilent mitnehmen (oder irgendeine andere Fehlerbehandlung)
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: MarkusL am 25.01.12 - 12:42:05
Hallo Peter,

die Formel steht in dem berechneten Feld.
Ich habe das jetzt so gelöst:

Server         := "";
DB            := "";
Ansicht         := "Konfiguration";
Auswahl         := "Konfiguration";
Feldauswahl      := "team01_wann_1";
@If(team01_wann_1="";@DbLookup("":"ReCache";Server:DB;Ansicht;Auswahl;Feldauswahl;[FailSilent]);team01_wann_1)

Somit wird nach meinem Verständnis der @DBLookup nur ausgeführt, wenn das Feld team01_wann_1 leer ist.
Die Variablen der ersten Zeilen könnte ich entfernen und direkt das @DBLookup nehmen, aber ich nehme sie für die Übersichtlichkeit in Kauf.

Gruss
Markus
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Peter Klett am 25.01.12 - 12:45:56
Ja, die Lösung ist auch gut.

@Return ist dann sinnvoll, wenn die Formel sehr lang ist. Dadurch schafft man Übersichtlichkeit.
Titel: Re: Felder aus anderem Dokument auslesen
Beitrag von: Mitch am 25.01.12 - 13:07:20
... und wenn du noch "copy&paste-bareren" Code haben willst, kannst du auch den Feldnamen durch @ThisValue ersetzen, das gibt in einem Feld immer den Inhalt desselben zurück, so musst du das nicht für andere Felder ändern.  :)