Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: sloe am 01.09.04 - 17:33:41

Titel: leere Werte von dblookup abfangen
Beitrag von: sloe am 01.09.04 - 17:33:41
Hallo zusammen,

ich habe ein berechnetes Feld (SucheNach) mit Mitarbeiternamen. In diesem Feld verwende ich folgende Formel um die Tätigkeit aus einer anderen Datenbank auszulesen:
@DbLookup("":"NoCache"; DBServer:DBPfad; DBView; SucheNach; 2);
In Spalte 2 steht die Tätigkeit des Mitarbeiters in der Ansicht.

Funktioniert soweit bei vorhandenen Mitarbeitern -> alle Tätigkeiten werden angezeigt. Ist aber ein Mitarbeiter nicht erfasst, bleiben seine Tätigkeit und alle nachfolgenden leer. Ich brauche aber die nachfolgenden Tätigkeiten in der Reihe der Mitarbeiter.
Wenn ich es über das Feld der Maske versuche:

@DbLookup("":"NoCache"; DBServer:DBPfad; DBView; SucheNach; MATaetigkeit);

bekomme ich nur noch die Fehlermeldung:
FEHLER: Serverfehler: Eintrag im Index nicht gefunden

Ich möchte diese Fehlermeldung oder die leeren Werte durch "nicht erfasst" ersetzen.

Gibt es eine Möglichkeit über Listen und @Replace oder @IsError an die Sache ranzukommen?

Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: koehlerbv am 01.09.04 - 17:37:03
Jo, ganz simpel:

@If (@IsError (@DbLookup("":"NoCache"; DBServer:DBPfad; DBView; SucheNach; MATaetigkeit); "Nicht erfasst"; @DbLookup("":"NoCache"; DBServer:DBPfad; DBView; SucheNach; MATaetigkeit));

HTH,
Bernhard
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: sloe am 01.09.04 - 17:45:34
Hi,

ja, dachte ich auch, aber dann steht nur "Nicht erfasst" im berechneten Feld und die restlichen Werte schmeißt er weg.

Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 01.09.04 - 17:52:17
Na ja, wenn Du Mehrfachwerte haben willst, dann hast Du so keine Chance, denn das Wegwerfen passiert ja genau in dem Moment, in dem er den Wert nicht zurückbekommt, also nicht an der Stelle, in der Liste, wo das Problem auftritt, sondern die gesamte Liste kommt schon gar nicht zurück. Da musst Du entweder die Ansicht, aus der Du dies ausliesest, so ändern, dass Du dieses "Nicht erfasst" aus der Ansicht nehmen kannst oder wenn Du aufs Dokument greifst, muss das eben da drin stehen.
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: koehlerbv am 01.09.04 - 17:52:38
Dann machst Du noch irgendeinen anderen Fehler. Dieses
@If (@IsError (@dbLookup); Reaktion; @dbLookup)
ist wirklich Standard.

Bernhard
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: sloe am 01.09.04 - 18:08:58
@koehlerbv
Nee, das Verhalten stimmt schon. Bei @If (@IsError (@dbLookup); Reaktion; @dbLookup) findet er anscheinend in den Werten einen Fehler und dann kommt die Reaktion. Ich brauch die Reaktion aber nur bei nicht vorhandene Werten, also:
Verkauf
Einkauf
FEHLER/leer -> nicht erfasst
EDV
etc.

@Semeaphoros
Zitat
Da musst Du entweder die Ansicht, aus der Du dies ausliesest, so ändern, dass Du dieses "Nicht erfasst" aus der Ansicht nehmen kannst
heißt, ich müßte alle Mitarbeiter erst mal erfassen, auch wenn sie noch keine Tätigkeit haben?
Ich wollte jetzt eigentlich keine 800 Dokumente erstellen, in denen "nicht erfasst" als Standardauswahl drin steht. Genau genommen sollte die DB mit den Tätigkeiten per mail von Antragsstellern gefüllt werden. seufz.
Gibt es denn keine Möglichkeit, die Werte in eine Liste einzulesen und die leeren/fehlerhaften Einträge zu filtern?

Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: koehlerbv am 01.09.04 - 18:24:38
So ganz steige ich da noch nicht durch: Was steht denn in der einen und was in der anderen Datenbank ?
Und: Warum nimmst Du kein LotusScript zur Lösung dieser Aufgabe ? Andererseits sollen ja Deine Kollegen die eine DB "per Mail" füllen - da ist dann ja sowieso LS angesagt.

Beschreibe das gewünschte Verfahren doch mal bitte etwas genauer.

Bernhard
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 01.09.04 - 18:25:04
Ach, die sind noch nicht einmal erfasst .... dblookup ist ganz schlecht im Kaffeesatzlesen. Diese Liste müsste man dann wohl irgendwie zusammenbasteln, das ist keine Standardfunktion. Scheint mir ein Fall für LotusScript zu sein in dem Falle.
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: sloe am 01.09.04 - 18:38:14
Hi,
je länger ich an dem Ding herumwurschtele, desto eher scheint LS die bessere Wahl zu sein. Dabei habe ich so auf einen Drei-Zeiler gehofft...  :P

@Bernhard
Die Ausfüll-Anwendung ist nicht so der Hammer. Dokument zum ausfüllen per SendTo-Feld an Mail-In-DB senden, kein großer Hit. Die ankommenden Dokumente werden dann zentral nachbearbeitet und wandern danach per Button in meine Suchansicht.

Unter Strich muß ich mir jetzt überlegen, wie ich per LS die Anzahl der Werte aus dem Feld der Mitarbeiternamen auslese, mit For-Schleife per GetDocumentByKey die Werte auslese und wieder in mein Feld presse.

Naja, ich glaube, da mach ich lieber morgen weiter. Vielen Dank für Eure Hilfe und wenn ich morgen nicht weiterkomme, melde ich mich oder setze das Ding hier auf erledigt.
Schönen Abend noch.
Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 01.09.04 - 18:42:48
Jo, den Ansatz dafür hast Du ja offensichtlich bereits.
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Tode am 02.09.04 - 10:05:28
Leute, Leute... nicht immer so beschränkt denken... ;D

Sein Problem ist folgendes:

Mitarbeiter im Dok:

Hans Wurst
Tido Test
Tante Käthe

in der Lookup- Ansicht gibt es aber nur

Hans Wurst
Tante Käthe

Der lookup liefert dann natürlich für ALLE einen Error...

Aber dem ist tatsächlich mit einem zweizeiler beizukommen:
in SucheNach stehen die oben genannten drei Mitarbeiter:

alleLkpMitarbeiter := @DBColumn( "" : "NoCache" ; "" ; "SeineAnsicht" ; 1 );

neuesSucheNach := @KeyWords( sucheNach ; alleLkpMitarbeiter ; "" );

@DBLookup( ...... ; neuesSucheNach ; .... )

in neuesSucheNach stehen nur die Mitarbeiter, für die es wirklich Werte gibt...

jetzt muss man das alles nur noch ordentlich zusammensetzen
{mitarbeiterOhneSuche := @Trim( @Replace( SucheNach ; neuesSucheNach ; "" ) )}

und fertig ist die Wurst.

Das einzige Problem, das auftreten kann ist das, dass er zu viele Mitarbeiter hat, und der DBColumn über die 32k Grenze kommt... dann kommt er nämlich um Script wirklich nicht mehr herum...

HTH
Tode
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Glombi am 02.09.04 - 10:20:36
Ist eigentlich die Verwendung von Mehrfachwerten als Schlüssel offiziell supportet? Ich weiß, es geht und habe es auch schon mal gemacht, aber in der R6 Hilfe steht zum Key:
key
Text. Determines which document is actually read in order to retrieve a value. A document's key is the value displayed in the first sorted column within the view. See "Specifying a key."

Also "Text" und nicht "Text or Text list". Sollte uns das zu Denken geben  ???

Andreas
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 02.09.04 - 10:25:55
Guter Hinweis, das sollte tatsächlich zum Nachdenken anregen.
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Tode am 02.09.04 - 10:51:30
tja... auch nach mehrfachem lesen der Hilfe zu DBLookup konnte ich weder ein Indiz FÜR noch GEGEN Mehrfachwerte finden...

Ich WEISS, dass das seit ich denken kann schon immer funktioniert hat.. ich hoffe nur, dass das auch supportet wird.... denn sonst könnten bei R7 viele viele meiner Datenbanken auf die Schnauze fallen (wenn es IBM einfällt, das plötzlich nicht mehr zu supporten...)

aber HALT: Die Knowledgebase rettet mich (mal wieder) im Artikel 1088821 stehen Fragen und Antworten zu DBLookup, unter anderem diese:

3.   Can you Lookup using multiple keywords?
Yes, by separating the multiple keywords by a colon.  Also, you can reference a field which contains multiple keywords, as long as that field has "Allow Multi-Values" checked ON.

Gott sei Dank...
Tode
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Glombi am 02.09.04 - 11:00:41
Der Artikel ist mir doch glatt durch die Lappen gegangen. Stellt sich die Frage, warum die Hilfe nicht aktualisiert wird? Vergessen oder vertraut man dem nicht so ganz ;D

Kann ich mich - wenn es "hart auf hart kommt" - vor Gericht auf die KBASE berufen   ???

Andreas
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 02.09.04 - 11:03:57
Nachdem in der KBase immer wieder mal Hinweise auf arbeitende aber nicht supportete Workarounds gegeben werden, dürfte es schwierig sein, sich verpflichtend auf die KBase zu beruffen - meine  Einschätzung. Allerdings kann ich mir nicht vorstellen, dass es IBM in diesem Falle darauf anlegen wird, einen grossen Teil der Kundschaft mit einer derart einschneidenden Veränderung zu vergraulen.
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Glombi am 02.09.04 - 11:10:37
Hier noch eine kleine Verfeinerung von Tode's Code, in dem eine Schwäche von @Keywords umschifft wird:

LDD (http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/4f076aad9940f2bd85256a63001e6689?OpenDocument)

Ansonsten ist es ein Feature, so meine Sichtweise.

Andreas
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Tode am 02.09.04 - 11:30:30
@Glombi: Diese Verfeinerung ist nur DANN nötig, wenn man die Designer- Hilfe nicht sorgfältig liest...

@Keywords( Textliste1 ; Textliste2 ; Trennzeichen )

Wenn Sie kein Trennzeichen angeben, werden folgende Trennzeichen verwendet:
?. ,!;:[](){}"<> (Fragezeichen, Punkt, Leerzeichen, Komma, Ausrufezeichen, Semikolon, Doppelpunkt, eckige Klammern, runde Klammern, geschweifte Klammern, Anführungszeichen und spitze Klammern).
Ein "leeres" Trennzeichen, dargestellt durch eine leere Zeichenfolge (""), weist die Funktion an, keine Trennzeichen zu verwenden.

und wenn Du jetzt mein Post beachtest, dann siehst Du, dass da
@KeyWords( sucheNach ; alleLkpMitarbeiter ; "" );
steht... ;D

Also keine Notwendigkeit einer weiteren Vergewaltigung der Werte durch ReplaceSubstring.
Ganz abgesehen davon halte ich "+++" nicht unbedingt für geeignet... das wird doch ab und an Verwendet, um wichtige Passagen zu markieren (zumindet bei uns im Haus) also z.B. im Subject:

+++Wichtiger Newsletter+++

dann lieber "~~~" o.ä.

Titel: Re:leere Werte von dblookup abfangen
Beitrag von: sloe am 02.09.04 - 12:09:11
Hallo zusammen,
schön, wenn man eine ordentliche Diskussion zusammen kriegt.
Habe es jetzt mit LS erledigt, funzt auch.  :D
Aber zur Verständnis eine Frage an Tode:

sucheNach enthält die zu suchenden Mitarbeiter (MA) aus dem Dok.

Das hier liefert mir alle erfassten MAs:
alleLkpMitarbeiter := @DBColumn( "" : "NoCache" ; DBServer:DBPfad ; DBView ; 1 );

Das liefert alle MA aus dem Dok, die erfasst sind:
neuesSucheNach := @KeyWords( sucheNach ; alleLkpMitarbeiter ; "" );

Das liefert die zugehörigen Tätigkeiten der MA aus dem Dok, die erfasst sind:
@DbLookup("":"NoCache"; DBServer:DBPfad; DBView; neuesSucheNach; 2);

Das liefert mir alle MA ohne Erfassung
mitarbeiterOhneSuche := @Trim( @Replace( sucheNach;neuesSucheNach; "" ) )

Aber wie kriege ich daraus die Liste?
Hans Wurst -> Einkauf
Tido Test -> "nicht erfasst"
Tante Käthe -> Verkauf

Muß jetzt keine Energie reinfließen, läuft ja, aber interessieren würde es mich halt.

Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Semeaphoros am 02.09.04 - 12:14:53
Heisst, Du möchtest es wieder in der ursprünglichen Reihenfolge, da müsste man dann noch mit Replace dahinter, um die ursprüngliche Reihenfolge für die Tätigkeiten wieder herzustellen
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: sloe am 02.09.04 - 12:56:22
@Semeaphoros
genau, dann müßte es so aussehen:

alleLkpMitarbeiter := @DBColumn( "" : "NoCache" ; DBServer:DBPfad ; DBView ; 1 );
neuesSucheNach := @KeyWords( sucheNach ; alleLkpMitarbeiter ; "" );
taetigkeiten := @DbLookup("":"NoCache"; DBServer:DBPfad; DBView; neuesSucheNach; 2);
mitarbeiterOhneSuche := @Trim( @Replace( sucheNach;neuesSucheNach; "" ) );
liste1 := @Trim( @Replace( sucheNach;mitarbeiterOhneSuche; "Nicht erfasst" ) );
@Trim( @Replace( liste1;neuesSucheNach; taetigkeiten ) )

Allerdings hatte ich vergessen, die ganze Sache wird nicht beim öffnen des Doks aktualisiert...

Naja, bleibt die LS-Lösung.
Danke an alle.

Gruß
sloe
Titel: Re:leere Werte von dblookup abfangen
Beitrag von: Tode am 02.09.04 - 13:34:59
dieser Code ist.... Korrekt !  ;D

Warum fragst Du, wenn Du die Antwort selber weisst... *g*

Gruß
Tode