Autor Thema: Felder aus einem anderen Dokument übernehmen  (Gelesen 6056 mal)

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Felder aus einem anderen Dokument übernehmen
« am: 28.06.12 - 15:59:35 »
Hallo zusammen,

ich drehe mich jetzt seit Stunden im Kreis, daher meine Anfrage:

Problem:
In meinem aktuellen Dokument wähle ich in dem Feld "Raum_Raum"per Dialogliste eine Ressource aus.
Die Formel für die Dialogliste lautet:
@DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 2 ; [FailSilent]) + " - " + @DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 3 ; [FailSilent]) + " - Plätze gesamt: " + @Text(@DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 5 ; [FailSilent]))
Hinweis: Im Feld "Raum_Ort" steht ein Ortsname drin, der vorher ausgewählt wurde.

Wenn der Benutzer jetzt eine Ressource ausgewählt hat, steht diese im Feld "Raum_Raum".

Ich müsste aus dem Dokument der ausgewählten Ressource noch andere Felder ziehen.
Wie komme ich an diese Felder?
Ich möchte nicht jedesmal eine Dialogliste einblenden.
Im Dokument der Ressource steht in einem Feld auch die UNID. Diese könnte und würde ich gerne verwenden. Wie bekomme ich diese in ein Feld in meinem aktuellen Dokument ?

Den Inhalt aus dem Feld "Raum_Raum" kann ich nicht als Suchbegriff in einer Ansicht benutzen, da der Inhalt anders aufgebaut ist, als in der Ansicht. Ausserdem könnte sich daran noch etwas ändern.

Danke für die Hilfe im voraus
Markus
« Letzte Änderung: 02.07.12 - 13:31:19 von MarkusL »
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #1 am: 28.06.12 - 16:17:18 »
Die UNID bekomsmt du über
@dblookup(...[RETURNDOCUMENTUNIQUEID])
oder eben in der Ansicht noch in die Spalte mit dazupacken und z.B. durch einen "|" vom Rest trennen.

Felder kannst du dann mittels @GetDocField(UNID,"Feldname") auslesen.

/edit: Sowas ist ebenfalls nicht optimal:
@DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 2 ; [FailSilent]) + " - " +
@DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 3 ; [FailSilent]) + " - Plätze gesamt: " + @Text(
@DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 5 ; [FailSilent]))

Du führst 3x den selben Lookup aus. Mach dir in so einem Fall in der Ansicht "viewRessourcen" eine zus. Spalte in der du alle benötigten Infos berechnest.

Gruß
Roland

« Letzte Änderung: 28.06.12 - 16:20:44 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Driri

  • Gast
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #2 am: 28.06.12 - 16:45:44 »
Zitat
Du führst 3x den selben Lookup aus. Mach dir in so einem Fall in der Ansicht "viewRessourcen" eine zus. Spalte in der du alle benötigten Infos berechnest.

Kann ich im Sinne der Performanceverbesserung auch nur empfehlen. Ich mache das immer so, daß ich in einer Spalte der Ansicht alle Werte mit "~~" verbunden als einen Wert anzeige.

Dann reicht im Dokument ein Lookup und ich hole mir aus dem erhaltenen String mit @Word die Einzelwerte.

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #3 am: 29.06.12 - 10:10:31 »
Danke für die Hilfe.
Die Idee mit der zusätzlichen berechneten Spalte und nur einem dblookup habe ich direkt umgesetzt.

Leider stehe ich immer noch auf dem Schlauch.
Die Spalte habe ich jetzt so aufgebaut, dass der Benutzer im Dialogfeld eine "schöne" Auswahl erhält. Daher wollte ich keine UNID einbauen.

Wie kann ich die UNID trotzdem in ein Feld des neuen Dokuments reinschreiben, ohne dass der Benutzer diese sieht?
Wenn ich einen erneuten dblookup mache, muss ich ja wieder eine manuelle Auswahl tätigen.
Oder?

Gruß
Markus
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #4 am: 29.06.12 - 10:47:53 »
Da die UNID in einem Feld enthalten ist, bekommst du sie genau so wie die anderen Felder auch. Nimm diese Feld in die berechnete Spalte auf, z.B.

Feld1 + "~" + Feld2 + "~" + Feld2 + "~" + FeldmitUNID

Separiere sie dann entsprechend mit @Word und schreibe sie in ein verstecktes Feld.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #5 am: 29.06.12 - 11:19:11 »
Ich bekomme jetzt als Auswahlliste Ressource~Etage angezeigt.
Wenn ich nun auch noch die UNID mit anzeigen würde, würde das so aussehen:
Ressource~Etagge~UNID

Ich könnte ich die UNID zwar nachher separieren und in ein anderes Feld shreiben, aber der Benutzer bekommt sie halt erstmal angezeigt.

Wenn ich die UNID vor der Anzeige abschneide und in ein anderes Feld schreibe, weiß ich am Ende aber nicht, welche Ressource der Benutzer ausgewählt hat und somit, ob die UNID die richtige ist.

Habe ich einen Denkfehler? Oder übersehe ich etwas?
 ???
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Driri

  • Gast
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #6 am: 29.06.12 - 11:46:17 »
Das bekommst Du so mit einer einzigen Formel nicht hin. Was mir spontan als Alternativen einfällt :

1) Feld als Textfeld und dahinter einen Button mit einem Formelkonstrukt :

- @Prompt mit @DbLookup als Werteliste, DbLookup liefer die UNID zurück
- bei gültiger Auswahl mit einem zweitem DbLookup mit der UNID als Parameter die benötigten Werte holen
- die Werteliste mit @Word zerlegen und in die Felder schreiben

2) Feld als Textfeld und dahinter einen Button mit Scriptcode :

- Per Picklistcollection das Dokument wählen lassen
- Über das so erhaltene NotesDocument die Items auslesen und in die Felder des aktuellen Dokuments schreiben

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #7 am: 29.06.12 - 12:12:02 »
Du kannst mit einem Alias arbeiten

SchönesAuswahlfeld|Wert1~Wert2~UNID

Der Benutzer wählt aus der Liste der "schönen Auswahlfelder", im Feld steht aber nachher der Alias, den Du Dir auseinanderdröseln kannst.

Schön finde ich aber nicht, alle Daten in die Liste zu packen, denn bei längeren Listen holt Dich das 32- oder 64-kB-Problem schneller ein.

Besser finde ich, als Alias nur die UNID zu übergeben (oder noch besser einen eindeutigen Schlüssel zu dem Dokument - Filialnummer, Kundennummer, Teilenummer o.ä., falls Du mit Historie arbeitest) und anhand des Schlüssels nachher die Werte zu holen

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #8 am: 29.06.12 - 13:15:14 »
Nur die UNID zu übergeben, nutze ich auch gern. Alle anderen Werte werden dann mit @GetDocField geholt. Diese Funktion ist rasend schnell, weil sie über den ID-Index und nicht über eine Ansichtssuche geht.
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #9 am: 29.06.12 - 13:20:43 »
@Peter
Wo muss ich den Alias definieren? Damit habe ich mich bisher nicht beschäftigt.

Ich habe den Tipp von Roland aufgenommen und ein Button mit folgender Formel konstruiert:
ressource := @Prompt( [OkCancelList] : [NoSort] ; "Raumauswahl" ; "Bitte wählen Sie einen Raum aus." ; "" ; @DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 2 ; [FailSilent]) + " ~ " + @DbLookup( "" : "ReCache" ; "" : "" ; "viewRessourcen" ; @GetField("Raum_Ort") ; 6 ; [FailSilent]) );

@SetField("Raum_Raum" ; @Word(ressource;" ~ ";1) + " ~ " + @Word(ressource;" ~ ";2) );
@SetField("Raum_Ressource_UNID" ; @Word(ressource;" ~ ";-1))

Das funktioniert - wenn auch nicht unbedingt schön, aber es geht.
Allerdings zeigt er mir in der Auswahlliste halt immer noch die UNID an.
Wenn das mit deinem Tipp schöner geht, wäre das super.

Danke schon mal.
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #10 am: 29.06.12 - 13:25:21 »
Wie ich es schon geschrieben hatte:

SchönesAuswahlfeld|Wert1~Wert2~UNID

Pipe trennt Auswahlwert von Alias

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #11 am: 29.06.12 - 14:10:56 »
Hallo Peter,

da meine ganzen Felder aber dynamisch sind, kann ich keinen festen Wert vergeben, um den "schönen Wert" oder den Alias zu definieren.
Jede Auswahlfeld greift hierarchisch auf ein anderes Auswahlfeld zurück. Und das erste Feld könnte sich auch jederzeit ändern.
Ort (kann jederzeit irgendetwas eingegeben oder verändert werden)<- Ressource (Auswahlformel) <- Raum (hier steht die oben genannte Formel in einem Feld)

Mir fehlt daher der logische Denkansatz, wo ich einen Alias platzieren kann.
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #12 am: 29.06.12 - 20:40:21 »
Doch das geht schon so wie Peter sagt. Probier mal folgendes, dies ist zwar nicht dein Ausgangsproblem, aber vielleicht fällt dann der Groschen:

1) in deine Ansicht machst du eine (versteckte) Spalte welche sich auf
Code
Subject + "|" + @DocumentUniqueID()
berechnet. Ich gehe mal davon aus, dass im Feld "Subject" ein aussagekräftiger, schöner Name drin steht und eine Zuordnung über die UNID reicht. (UNIDs können sich ändern, wenn ein Dokument kopiert wird und das andere gelöscht wird.). Alternativ kannst du hier auch ein eindeutiges Schlüsselfeld angeben, dann würde ich aber das Ganze in Script umsetzen, da es da performanter ist.

2) in dein Dokument machst du dann ein Feld (Dialogliste) mit Namen "RaumID", in die Auswahlformel schreibst du einen @DBcolumn, der die in 1.) berechnete Spalte zurückliefert oder gibst die Ansicht direkt an (bei ersterem tritt ggf. ein 32K Problem auf)
WICHTIG: ImFeld muss auf "Allow Keyword Synonyms"aktiviert sein.

3.) Dann machst du einen Test: Bei Auswahl eines Raums zeigt das Feld den Inhalt von "Subject" an. Über die Feldeigenschaften siehst du aber, dass die UNID drin steht.

4.) Nun kannst du im ganzen Dokument berechnete Felder mit @GetDocField(RaumID;"Feldname") platzieren und auf beliebige Felder im Raum-Dokument zugreifen und dein Problem sollte gelöst sein.  ;D ???

Wenn du wie in 1) schon erwähnt allerdings einen eindeutigen Schlüssel anstatt der UNID verwenden willst, dann müsstest du hierfür jedesmal einen DB-Lookup machen, was sich negativ auf die Performance auswirkt. Da würde ich dann Script verwenden.
eine Minimal-Scriptlösung könnte wie folgt aussehen (Achtung nicht getestet, hab vorsichtshaber aber mal einen Errorhandler eingebaut!)
Code
Sub Queryrecalc(Source As Notesuidocument, Continue As Variant)
	On Error Goto handle
	If False Then
handle: Msgbox "Fehler " & Error & " in Zeile " & Erl
		Exit Sub
	End If
	' --------- Errorhandler ende ---------
	
	Dim myDoc As NotesDocument ' aktuelles Dokument
	Dim myView As NotesView	
	Dim db As NotesDatabase
	Dim raumDoc As NotesDocument ' das Dokument aus dem die Werte übernommen werden sollten	
	
	Set myDoc = Source.Document
	Set db = myDoc.ParentDatabase
	If myDoc.RaumID(0) = "" Then Exit Sub ' wenn kein Raum gewäht, dann Ende
	Set myView = db.GetView("viewRessourcen")
	Set raumDoc = myView.GetDocumentByKey( myDoc.RaumID(0), True)
	' Alternativ, wenn UNID verwendet wird: Set raumDoc = db.GetDocumentByUNID(myDoc.RaumID(0))
	'--------- Das Gröbste ist geschafft, nun müssen nur noch die Felder von raumDoc in myDoc kopiert werden:
	
	myDoc.Raum_Ort = parentDoc.Ort
	myDoc.Raum_Raum= parentDoc.Raum
	
End Sub


Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline MarkusL

  • Aktives Mitglied
  • ***
  • Beiträge: 124
  • Geschlecht: Männlich
Re: Felder aus einem anderen Dokument übernehmen
« Antwort #13 am: 02.07.12 - 13:31:04 »
Hallo Roland,

vielen Dank für die Erklärung. Das war genau das, was ich brauchte. Jetzt funktioniert meine Auswahl so, wie ich es will und das auch noch in schön.

Danke auch an die anderen.

Gruß
Markus
Version Lotus Notes / Domino: 8.5.3
Server: 1 Cluster, 1 weiterer Server
Anzahl Benutzer: ca. 230

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz