Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Designer am 17.06.05 - 01:11:10
-
Hallo!
hab eine kleine Frage:
kann man es realisieren das wenn man aus einem View beispielsweise eine Produktnummer auswählt das sich übrige Felder mit den daten aus der Produktform übernommen werden...
hab eine Combo- box mit Produktnummern und nach anklicken sollen daten wie bsp. Gewicht etc. aus einem View oder der Produktform in der Rechnungsform übernommen werden??
Ist das möglich?
@DBlookup???????
-
Hi,
das ist kein Problem.
Ein möglicher Weg:
Du nimmst die Funktion PicklistCollection aus der Klasse NotesUIWorkspace. Diese liefert die ein Handle auf das ausgewählte Dokument. Damit kannst du alle Felder auslesen.
In der Designer - hilfe findest du entsprechende Beispiele.
Axel
-
Das interessiert mich auch!
Geht das auch ohne LS?
Kann man das nicht mit einfacher Formelsprache lösen? ???
-
ja
@Picklist gibt es da.
-
Danke! :-*
-
ja
@Picklist gibt es da.
Ja, aber....
Die Formelfunktion liefert kein direktes Handle auf das Dokument. Du kannst dir lediglich die DocID zurückliefern lassen und dann kannst du mit @GetDocField (wenn es um Dokumente in der gleichen DB handelt) oder mit @DBLookup (dazu brauch man aber eine Ansicht, die in der ersten Spalte nach der DocID sortiert ist) die Feldinhalte auslesen.
Axel
-
Geht das auch ohne LS?
Kann man das nicht mit einfacher Formelsprache lösen? ???
Es ist mir in diesem Zusammenhang ein vollkommenes Rätsel, warum Formelsprache hier "einfacher" sein soll. Gerade in diesem Fall ist die @functions-Lösung schwieriger und inperformanter (evtl.).
Bernhard
-
Da hast Du recht, aber wir wollen doch niemanden davon abhalten etwas kompliziert zu lösen, wenn es auch einfach geht. Vielleicht is sharif ja Beamter?
-
Nee, bin kein Beamter!!!
So ein niveau hätte ich von einem User hier beim Notes Forum nicht erwartet... :-X
Arbeitest bestimmt mir vielen Beamten zusammen ^-^
Naja, auf jeden fall hab ich es total trivial mit @Functions gelöst...
Ein paar @Formeln und schon funzt das ganze... ;D ;D ;D
-
wie haste denn das jetzt genau gemacht Sharif? ???
-
Hab nun den ganzen Tag an meinem Problem gesessen und schaffe es anscheind nicht ohne eure Hilfe... :'(
Mein Problem:
Ich hab eine Form Auftrag in der ich eine Combobox hab, wo ich ein verfügbaren Mitarbeiter auswählen kann. Laut Aufgabenstellung sollen nun sinnvolle Daten aus dem Mitarbeiterdokument in das Auftragsdokument übertragen werden.
Ich hab die Combobox dynamisiert mit @dbColoumn...
geht es, dass wenn ich z.b. einen Mitarbeiter in der Combo auswähle Fields wie z.b. Größe, Gewicht etc. die Daten automatisch übernimmt (bsp. nach drücken von F9)?
DocID?? @GetField???
Es sind alle nötigen Angaben in der selben Datenbank!
Nur wie?
wäre sehr über Hilfe dankbar!!!
-
Wenn die zusätzlichen Daten aus anderen Datenbanken kommen sollen, geht wohl kein Weg an LotusScript vorbei.
Hier eine Kurzbeschreibung:
- Wenn Du die Combobox behalten willst, muss dort der Name ausgewählt werden
- In den Datenbanken, in denen Informationen gesucht werden muss dann jeweils eine Ansicht mit dem Namen als erste sortierte Spalte existieren
- Die jeweilige Datenbank holst Du mit session.GetDatabase(server, filepath)
- In der Datenbank holst Du die jeweilige Ansicht mit db.GetView(viewName)
- In der View suchst Du das Dokument mit view.GetDocumentByKey(name, True)
- Wenn Du das Dokument hast, kannst Du dann auf alle Felder zugreifen die Du brauchst mit doc.Feldname(0) (wenns nur der erste Wert sein soll)
Den Code kannst Du zum Beispiel im PostRecalc-Event unterbringen.
Ich hätte aber wahrscheinlich eher eine PickListCollection genommen und den kompletten Code in einem Knopf untergebracht, aber das ist Geschmacksache.
Wenn Du noch nichts mit LotusScript gemacht hast, wird's wahrscheinlich etwas schwer, aber
man wächst an seinen Aufgaben.... ;D
Gruß,
Joachim
-
ohhhh :-\
hab mit Lotusscript noch gar keine Erfahrunge :'(
geht es nicht auch mit @functions das ich die ID hole und mit @GetField etc dann Daten aus dem jeweiligen Document hole???
Hört sich immerhin gut an nur geht das auch?
-
Nun, Joachims Algorithmus funktioniert so auch mit @functions, da dieser auch eindeutige Schlüssel erfordert (was mit Joachims Präferenz für die PickListCollection nicht erforderlich wäre - aber das geht dann wirklich nur mit LS).
Bevor ich hier weitere Zeit aufwende: Hast Du eindeutige Schlüssel für die auszulesenden Dokumente ?
Bernhard
PS: Hast Du noch einen Namen ? "Designer" mag ich jetzt nicht verwenden ;D
-
Hallo!
Jep, Designer ist wirklich nen bissle blödi *g*
Tut mir leid: ich heiße Dennis
:)
hmm, also ich möchte das gern mit @functions lösen und jedes Dokument hat auch eine eindeutige ID!
wie mach ich denn das am besten...
bin noch Notes- Anfänger deshalb mal die grobe frage *g*
liebe Grüße
-
Dennis, in FeldA bietest Du via @dbColumn eine Auswahl basierend auf einer Ansicht. In den Feldern FeldB, FeldC etc. greifst Du via @dbLookup mit dem Schlüssel aus FeldA auf die gleiche Ansicht zu und liest Du die Feldwerte, die Du brauchst, aus.
@DbLookup (Klasse : "NoCache" ; Server : Datenbank ; Ansicht ; Schlüssel ; Feldname)
Schlüssel ist der Wert aus FeldA, Feldname (Achtung - als String !) is tdas Feld, welches Du auslesen möchtest.
HTH,
Bernhard
PS: Hierzu die DesignerHelp gut studieren ... Gaaaaanz sorgfältig, um alles zu verstehen.
-
Wieder ich... ;)
Man merkt, dass ich heute ein bisschen Zeit habe.
Also wenn's unbedingt mit @Formeln sein muss...
Um einen Wert aus einer anderen Datenbank zu holen brauchst Du den besagten eindeutigen Schlüsse (ob @Formel oder LS ist egal, Schlüssel braucht man immer).
Nehmen wir mal an, dass der Name eindeutig ist.
Dann kann man mit @DbLookup direkt in einer Ansicht auf ein Dokument und dort auf ein Feldwert zugreifen:
@DbLookup("":"NoCache"; ""; view; key; feldname) holt den Wert aus einer Ansicht in der aktuellen Datenbank.
Wenn es eine andere Datenbank ist, gibt es zwei Möglichkeiten:
@DbLookup("":"NoCache"; server:pfad; view; key; feldname) oder
@DbLookup("":"NoCache"; replikid; view; key; feldname)
Anstatt des Feldnamens, kann man auch eine Spaltennummer angeben, wenn es passt.
Der komplette Code würde dann so aussehen:
FIELD sCity := @DbLookup("":"NoCache"; "SRV":"names.nsf"; "($Users)"; sCombo; "City");
Das Combobox-Feld heißt "sCombo", dort wird der vollständige Name (am besten voll qualifiziert, also CN=.../OU=...) ausgelesen. Für die Person gibt's im globalen Adressbuch auf dem Server "SRV" ein Dokument und den Wohnort speichere ich im aktuellen Dokument in das Feld "sCity". Alles klar?
Natürlich kann man das ein bisschen schöner machen und eventuell fehlende Dokumente abfangen usw.
dbSrv := "SRV" : "names.nsf";
view := "(@Users)";
key := sCombo;
feld := "City";
val := @DbLookup("":"NoCache"; dbSrv; view; key; feld);
erg := @If(@IsError(val); ""; val);
FIELD sCity := erg;
Und das machst Du dann für alle Daten, die Du brauchst.
Gruß,
Joachim
P.S.: Mit LotusScript ist's aber schöner... ;D
-
oops, Bernhard war wieder etwas schneller...
-
Mit LotusScript ist's aber schöner... ;D
Ich schätze @functions wirklich sehr, aber mit LS geht das wirklich ... besser, leserlicher. Und man kann eher aus ausgelesenen Äpfeln Birnen machen, wenn erforderlich. Vor allem aber erfordert das auslesen von n Feldern nur einen einzigen Backend-Zugriff. Auch wenn Notes hier caching betreibt - zahlreiche @dbLookups fressen einfach Performance.
Joachim: Und "wieder schneller" war ich heute wohl nicht - bislang habe ich doch immer Dir hinterhergehinkt. Ist aber auch wurscht: Schön, dass Du hier so mithilfst !
-
wenn ich jetzt in einem Feld bsp. Größe folgendes eingebe:
@dblookup("Notes:"NoCache";"":"";"MitarbeiterView";"ID";1)
die ID ist sortiert in der 1. Spalte..
wie komme ich jetzt an die anderen werte die beispielsweise in der 2. oder 3. Spalte sind.. um jetzt net auf das Dokument zuzugreifen sondern über den View??
-
Liest Du die DesignerHelp ??
Wie wäre es, wenn du einfach die richtige Spaltennummer angibst ?
Bitte erst Hirn einschalten und dann posten ...
Bernhard
-
wenn ich jetzt in einem Feld bsp. Größe folgendes eingebe:
@dblookup("Notes:"NoCache";"":"";"MitarbeiterView";"ID";1)
die ID ist sortiert in der 1. Spalte..
wie komme ich jetzt an die anderen werte die beispielsweise in der 2. oder 3. Spalte sind.. um jetzt net auf das Dokument zuzugreifen sondern über den View??
"ID" ist ein String mit 2 Zeichen, nämlich "I" und "D". Und ich vermute mal, dass Du keinen Eintrag in Deiner Datenbank mit dem Namen ID hast. Also musst Du die " weglassen, damit der Wert, der in der Variable oder dem Feld ID gespeichert ist zur Suche benutzt wird.
Ansonsten, wie Bernhard schon gesagt hat, den Lookup mehrfach nutzen und die anderen Spaltennummern angeben.
Joachim