Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Kiezkicker am 12.04.05 - 14:50:04

Titel: Problem mit @getDocField
Beitrag von: Kiezkicker am 12.04.05 - 14:50:04
Hallo,

folgendes habe ich vor:

In einer Datenbank habe ich 3 Dokumente erstellt, die jeweils ein Feld Protokoll enthalten.
Wenn ein neues Dokument erstellt wird soll in dem neuen Dok. ein anderes Feld mit dem Inhalt aus dem Feld Protokoll des schon bestehenden Dokuments befüllt werden. Über Schlüsselwortliste kan ausgewählt werden aus welchem der 3 bestehenden Dokumente.

So, jetzt mein Versuch (Bin totaler Anfänger und beherrsche nur Formelsprache...)

Wert des Feldes in der Maske des neuen Dokumentes:

montag := @GetDocField( 9A80986359B5F6B5C1256FE100268DB8 ; "Protokoll");
diedo := @GetDocField( 9A80986351235487C1256FE100268DB8 ; "Protokoll");
freitag := @GetDocField( AD75686359B5F6B5C1256FE100268DB8 ; "Protokoll");

@if ( typ = "Montag"; Montag; typ = "Dienstag-Donnerstag"; diedo; typ = "Freitag"; Freitag; "" )

Das rote sind die UNID des entsprechenden Dokuments, die jetzt allerdings nur erfunden sind.  schon nach der ersten Zeile meldet Notes Fehler. Hab die UNID auch schon in "" gesetzt, aber trotzdem Fehlermeldungen bekommen.

Kann mir jemand helfen?
Titel: Re: Problem mit @getDocField
Beitrag von: Driri am 12.04.05 - 15:02:53
Sind die drei Dokumente eine Art Profil oder Konfiguration ?

Dann würde ich das folgendermaßen aufbauen :

- eigene Maske für Konfig, eigene View für Konfigdokumente
- Konfigview sortiert nach Name des Konfigdokuments, 2. Spalte für Protokoll

- zweite Maske für die eigentlichen Dokumente
- Feld "Typ" als Dialogliste, Formel für Auswahl :

@DBColumn("":"NoCache"; Server; Datenbank; Konfigview; 1)

Das ergibt dann die Titel der Konfigdokumente zur Auswahl. Option "Felder bei Schlüsselwortänderung aktualisieren" aktivieren.

- Feld "Protokoll" berechnet, Formel :

@If(Typ=""; ""; @DBLookup("":"NoCache"; Server; Datenbank; Konfigview; Typ; 2))


Du mußt dann die Konfigdokumente einmal anlegen. Wenn nun ein neues Datendokument mit der 2. Maske erzeugt wird und der Benutzer den Typ auswählt, wird über den gewählten Typ das zugehörige Protokoll ausgelesen und in das Feld in der Maske geschrieben.
Titel: Re: Problem mit @getDocField
Beitrag von: Semeaphoros am 12.04.05 - 15:11:23
Natürlich, man kann mit einem anderen Ansatz dahinter, wie Ingo das vorschlägt.

Beim Formulieren von Fragen aber bitte auch darauf achten, dass auch die Wesentlichen Infos mitgegeben werden. "Es gibt nur Fehlermeldungen ...."


Welche?
Titel: Re: Problem mit @getDocField
Beitrag von: Driri am 12.04.05 - 15:20:08
Das ist keine Selection Forumla, sondern eine Formel für den Vorgabewert im Feld.

Edit : Mein Kommentar bezog sich auf Posting, was wohl mittlerweile rausgelöscht wurde.  ???
Titel: Re: Problem mit @getDocField
Beitrag von: shiraz am 12.04.05 - 15:33:55
Hallo Kiezkicker,



Original Notes-Hilfe


Example
Given the unique ID of a document, returns the contents of a specific field on that document. The document must reside in the current database.
Syntax
@GetDocField( documentUNID ; fieldName )
Parameters
documentUNID
Text. The unique ID of a document. @DocumentUniqueID specifies the unique id of the current document.
.....
Usage
This function does not work in column or selection formulas.

versuche villeicht mit
@GetDocField( "9A80986359B5F6B5C1256FE100268DB8" ; "Protokoll");
.....
.....

Gruß
Christian
Titel: Re: Problem mit @getDocField
Beitrag von: Semeaphoros am 12.04.05 - 15:46:54
Nochmal, welche Fehlermeldung(en) bekommst Du?
Titel: Re: Problem mit @getDocField
Beitrag von: Kiezkicker am 12.04.05 - 15:50:50
Sind die drei Dokumente eine Art Profil oder Konfiguration ?

Ja, sollen Konfigurationsdokumente sein

- eigene Maske für Konfig, eigene View für Konfigdokumente
- Konfigview sortiert nach Name des Konfigdokuments, 2. Spalte für Protokoll

- zweite Maske für die eigentlichen Dokumente

Maske & View für Konfig hatte ich schon eine eigene, die 2. Spalte fehlte allerdings noch


- Feld "Typ" als Dialogliste, Formel für Auswahl :

@DBColumn("":"NoCache"; Server; Datenbank; Konfigview; 1)

Das ergibt dann die Titel der Konfigdokumente zur Auswahl. Option "Felder bei Schlüsselwortänderung aktualisieren" aktivieren.

- Feld "Protokoll" berechnet, Formel :

@If(Typ=""; ""; @DBLookup("":"NoCache"; Server; Datenbank; Konfigview; Typ; 2))


Du mußt dann die Konfigdokumente einmal anlegen. Wenn nun ein neues Datendokument mit der 2. Maske erzeugt wird und der Benutzer den Typ auswählt, wird über den gewählten Typ das zugehörige Protokoll ausgelesen und in das Feld in der Maske geschrieben.

Hat leider nicht funktioniert, oder ich hab mich irgendwo vertan. Bekomme folgende Fehlermeldung beim Aufruf der Schlüsselliste: "Falscher Datentyp für Operator oder @Funktion: Zahl erwartet"


Zitat von: shiraz
@GetDocField( "9A80986359B5F6B5C1256FE100268DB8" ; "Protokoll");

Das hatte ich auch schon probiert, hat aber nich geklappt. Wurde im Formelfenster abgewiesen (Kein Haupt- oder Auswahlausdruck in Formel:").
Titel: Re: Problem mit @getDocField
Beitrag von: Semeaphoros am 12.04.05 - 15:57:51
Beim DBLookup muss zwischen Server und Datenbank ein Doppelpunkt stehen und nicht ein Semikolon.
Titel: Re: Problem mit @getDocField
Beitrag von: Driri am 12.04.05 - 15:59:50
Stimmt, Tippfehler. Beim DBColumn übrigens genauso.
Titel: Re: Problem mit @getDocField
Beitrag von: Driri am 12.04.05 - 16:01:13
Noch ne Anmerkung zu dem Spiel mit der DocumentUniqueID.

Ich halte das eh für riskant. Was ist denn, wenn ein Konfigdokument mal gelöscht wurde (aus Versehen, kennt man ja  ;)) und dann neu angelegt werden muß ?
Dann hat man plötzlich eine neue ID und die Formel läuft ins Leere.
Titel: Re: Problem mit @getDocField
Beitrag von: Semeaphoros am 12.04.05 - 16:03:17
Reicht schon nur ein Replikationskonflikt und man behält das Konfliktdocument und nicht das Original..... und da denkt in so einem Moment niemand dran, dass es Nebenwirkungen hat
Titel: Re: Problem mit @getDocField
Beitrag von: rar am 12.04.05 - 16:04:35
Bei der Meldung "Kein Haupt- oder Auswahlausdruck in Formel" reicht es, wenn du ein ;"" hinten anhängst.

Wegen deinem Falschen Datentyp.... Wie rufst du denn die Schlüsselliste auf?

-daniel

PS:
Christian.... Es ist hier nicht üblich ein Posting, auf das bereits geantwortet ist, zu löschen. Die Antworten hängen dann einfach in der Luft.
Wenn dir ein Fehler unterlaufen ist, kannst du dein Posting ja editieren und den Fehler durchstreichen.
Titel: Re: Problem mit @getDocField
Beitrag von: Kiezkicker am 12.04.05 - 16:05:23
Das mit der UNID stimmt wohl, aber diese Methode kannte ich ja nicht (Bin nicht der große Programmierer.

Aer irgendwie klappts noch nicht, trotz Doppelpunkt. Hier die Formel für die Schlüsselliste:

@DbColumn("":"NoCache"; Server01/Domäne/DE:test.nsf; Konfiguration; 1)

In der Ansicht Konfiguration wird alles richtig angezeit, in der ersten Spalte: Montag, Dienstag-Donerstag und Freitag


Was heißt, wie ruf ich die Schlüsselliste auf?  ??? Über ein Schlüssellistenfeld, wenn du das meinst.
Titel: Re: Problem mit @getDocField
Beitrag von: rar am 12.04.05 - 16:08:06
Server, DB, Ansicht sind Strings und müssen deshalb unter Hochkomma.

@DbColumn("":"NoCache"; "Server01/Domäne/DE":"test.nsf"; "Konfiguration"; 1)

Titel: Re: Problem mit @getDocField
Beitrag von: rar am 12.04.05 - 16:12:02
Du hast oben geschrieben
Zitat
Bekomme folgende Fehlermeldung beim Aufruf der Schlüsselliste: "Falscher Datentyp für Operator oder @Funktion: Zahl erwartet"
Da muss doch irgend eine Formel dahinterliegen. Oder?
Titel: Re: Problem mit @getDocField
Beitrag von: Kiezkicker am 12.04.05 - 16:27:52
Danke, das war ja schon einmal ein Teilerfolg. Die Formel, die dahinter steckt war die aus meinem Beitrag von 16:05.

Die Schlüsselliste ist jetzt mit den richtigen Werten gefüllt, aber in dem berechneten Feld erscheint nur "FEHLER: Nicht genügend Argumente für Datenbankfunktion". Die Formel von Diri kann ich aber auch nicht ganz nachvollziehen, deswegen weiß ich nicht, wo ich suchen soll. Folgende Formel hab ich verwendet:

@If(typ=""; ""; @DbLookup("":"NoCache"; "Server01/Domäne/DE":"test.nsf"; "Konfiguration"; 2))

Edit in der Ansicht wird in der 2. Spalte der richtige Text angezeigt (Test Montag, Test Dienstag,...)
Titel: Re: Problem mit @getDocField
Beitrag von: rar am 12.04.05 - 16:32:47
Bei deinem DBLookup fehlt der Typ den du suchst.

@DbLookup("":"NoCache"; "Server01/Domäne/DE":"test.nsf"; "Konfiguration"; typ; 2)
das müsste klappen.
In der ersten Spalte muss aber auch der Typ stehen und sie muss sortiert sein.
Titel: Re: Problem mit @getDocField
Beitrag von: Kiezkicker am 12.04.05 - 16:38:56
Die Sortierung fehlte. Jetzt klappt alles  :D

Aller besten Dank an euch alle für die superschnelle und ausführliche Hilfe. eins ist aber noch offen, allerdings nicht lebenswichtig, wäre einer so nett, mir die DbLookup-Formel zu erläutern?

Schau morgen nochmal rein, jetzt mache ich Feierabend.
Titel: Re: Problem mit @getDocField
Beitrag von: rar am 12.04.05 - 16:45:24
Da lohnt sich ein Blick in die Designerhilfe.......
Zitat
Wenn ein Schlüsselwert gegeben ist, werden alle Dokumente in der angegebenen Ansicht (oder Ordner) gesucht, die diesen Wert in der ersten sortierten Spalte innerhalb der Ansicht enthalten. @DbLookup gibt für jedes passende Dokument entweder den Inhalt einer angegebenen Spalte einer Ansicht oder eines angegebenen Feldes zurück.
Syntax
@DbLookup( Klasse : "NoCache" ; Server  : Datenbank  ; Ansicht  ; Schlüssel  ; Feldname ) oder
@DbLookup( Klasse : "NoCache" ; Server  : Datenbank  ; Ansicht  ; Schlüssel  ; SpaltenNr )
Titel: Re: Problem mit @getDocField
Beitrag von: Driri am 12.04.05 - 16:48:11
DBLookup durchsucht die angegebene Ansicht nach dem Suchwort und wenn das gesuchte Wort gefunden wurde, wird entweder der Wert aus Spalte x oder ein Feld des zugrundeliegenden Dokuments ausgelesen.

Wobei das Auslesen aus der Ansicht ein wenig schneller sein soll, als das Auslesen aus dem Feld.


Noch ein Tipp : Wir helfen gerne, aber es ist sicherlich für dich von Vorteil, wenn Du

a) dir gute Literatur zum Thema suchst und dich einliest

und

b) bei Problemen mit Formeln etc. die Designer-Hilfe studierst. Die Erklärungen dort sind in den meisten Fällen gut und mit Beispielen versehen.