Autor Thema: Listenfeld -> gewähltes Element holen  (Gelesen 2850 mal)

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Listenfeld -> gewähltes Element holen
« am: 17.09.08 - 13:28:32 »
Tag zusammen,

ich habe von einem unserer Schwesterwerke eine DB "geerbt", die bis jetzt wunderbar funktioniert hat.

In der DB gibts eine Maske, die für eine Kunden Auswahl benutzt wird. In dieser Maske gibt es zwei Listenfelder.
Das erste ist eine Kundenliste (List), die aus einer Ansicht gefüllt wird.
Code
@DbLookup( "": "ReCache" ; "":"" ; "(CustomerView)"; @Text(SearchCustomer) ; 1; [PartialMatch])

Die (CustomerView) besteht  aus einer Spalte:
KundeA | DocUID
KundeB | DocUID
KundeC | DocUID
usw.

Die andere ist eine Kontaktliste, die nach Auswahl der Kundenliste ebenfalls aus einer Ansicht gefüllt wird.
Code
@If(List="";"";@DbLookup( "": "ReCache" ; "" : "" ; "(ContactView)"; List ; 2 ))

Nach Auswahl des Kontakts werden weitere Felder im Dokument gefüllt.

So und nun zum Problem. Sobald in der Kundenliste der Kundenname doppelt vorkommt funktioniert das ganze nicht mehr, da das Feld "List" mir zwei DocUID's zurückgibt und somit die Kontakte von beiden Kunden auftauchen.

Besteht die Möglichkeit nur den gerade gewählten Kunden aus dem Listenfeld rauszubekommen?
Oder zumindest abzufragen welcher der gleichnamigen Kunden gewählt ist?
Oder bin ich da ganz auf dem Holzweg... und es gibt eine andere Lösung dafür?

Bin für alle Vorschläge dankbar!

Gruß

Dimitri

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Listenfeld -> gewähltes Element holen
« Antwort #1 am: 17.09.08 - 14:02:49 »
Warum verwendest du beim ersten DBLookup partialmatch?

[PARTIALMATCH] returns a match if the key matches the beginning characters of the column value.


grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #2 am: 17.09.08 - 14:11:59 »

Ach hab ich vergessen zu erwähnen...  ;D

In der Maske gibts noch das Feld "SearchCustomer". In dieses Feld soll der User Anfang vom Kundennamen eingeben können, durch welchen dann die Liste der Kunden eingeschränkt wird. Daher das [PARTIALMATCH].

Gruß

Dimitri


Offline LotusMen

  • Frischling
  • *
  • Beiträge: 12
  • Geschlecht: Männlich
Re: Listenfeld -> gewähltes Element holen
« Antwort #3 am: 17.09.08 - 22:51:39 »
Das Problem kann über LotusScript umgesetzt werden ;).
Gruss Uwe

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Listenfeld -> gewähltes Element holen
« Antwort #4 am: 17.09.08 - 23:21:20 »
Hallo Dimitri,

so in etwa könnte es etwas werden:

zwisch:=@DbLookup(....);
@If(@IsError(zwisch);@Return("");NULL);
@If(@Elements(zwisch)<1;@Return("");NULL);
Vorschlag:=@Subset(zwisch;1);
List:=@If(@Elements(zwisch)=1;zwisch;@Prompt([OKCANCELLIST]; ...;Vorschlag;zwisch));

Gruß

Norbert
« Letzte Änderung: 17.09.08 - 23:24:35 von LN4ever »
Situs vilate in isse tabernit.

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #5 am: 18.09.08 - 09:52:37 »
Hallo Norbert,

wenn ich das richtig verstanden habe, dann soll mit dieser Formel die Auswahl schon beim holen der Dokumente aus der Ansicht getroffen werden, so dass das Listenfeld "List" nur noch einen Eintrag enthält?  ???

Falls ich falsch liege, könntest du mir die Formel bitte erläutern?  :-:

zwisch:=@DbLookup(....);
@If(@IsError(zwisch);@Return("");NULL);
@If(@Elements(zwisch)<1;@Return("");NULL);
Vorschlag:=@Subset(zwisch;1);
List:=@If(@Elements(zwisch)=1;zwisch;@Prompt([OKCANCELLIST]; ...;Vorschlag;zwisch));


Ich hatte da eher an etwas in der Richtung gedacht:

Wenn die Liste zwei Kunden mit gleichen Namen enthält und einer davon gewählt wird, dann gibt das Listenfeld "List" zwei Werte zurück (bei drei gleichen Namen -> gibts drei Werte zurück, usw.).

Code
 
Sub Postrecalc(Source as Notesuidocument)

  Dim doc As NotesDocument
  Set doc = Source.Document

  Call doc.FieldSetText("tmpField", doc.List(0)) 
So krieg ich den ersten Kunden mit dem gleichen Namen aus der Liste

Code
  
  Call doc.FieldSetText("tmpField", doc.List(1)) 
So den zweiten Kunden...

Code
  
  Call doc.FieldSetText("tmpField", doc.List(n)) 
End Sub
So den n-ten Kunden...


Aber ich weiss damit immer noch nicht welcher davon tatsächlich in der Liste gewählt worden ist.

Gibts es eine Methode/Eigenschaft mit der ich das herausfinden kann(Habe in der Hilfe nichts in der Richtung finden können)?

Gruß

Dimitri
« Letzte Änderung: 18.09.08 - 09:55:04 von diwi »

BigWim

  • Gast
Re: Listenfeld -> gewähltes Element holen
« Antwort #6 am: 18.09.08 - 12:19:42 »
Hallo Dimitri,

Zitat
Aber ich weiss damit immer noch nicht welcher davon tatsächlich in der Liste gewählt worden ist.
Meine Krücke ist ein verstecktes, berechnetes Feld (nur Anzeige). Als Formel der Name des Auswahlfeldes. So bekomme ich die aktuelle Auswahl.

Bin gespannt, ob es noch etwas eleganter geht ... ;)

Gruß
Markus

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #7 am: 18.09.08 - 13:38:14 »
Hallo Dimitri,

Zitat
Aber ich weiss damit immer noch nicht welcher davon tatsächlich in der Liste gewählt worden ist.
Meine Krücke ist ein verstecktes, berechnetes Feld (nur Anzeige). Als Formel der Name des Auswahlfeldes. So bekomme ich die aktuelle Auswahl.

Bin gespannt, ob es noch etwas eleganter geht ... ;)

Gruß
Markus

Hallo Markus,

wie ich oben schon beschrieben habe, das funktioniert solange die Liste keine zwei bzw. mehrfach gleiche Werte enthält.

z.B. Liste:

KundeA|1
KundeB|2
KundeC|3
KundeC|4

Wenn jetzt "KundeA|1" oder "KundeB|2" gewählt wird bekommt man auch "1" oder "2" zurück aber
sobald KundeC ausgewählt wird bekommt man von der Liste den Wert "3" und "4" zurück geliefert. Dabei weiss ich aber nicht ob "KundeC|3" oder "KundeC|4" gewählt ist.

War schon am überlegen ob ich nicht die ganze Maske umbauen soll und anstatt der Listenfelder auf eine Ansichtauswahl umsteigen soll. Wobei das ja schon etwas mehr Aufwand bedeutet...

Hat jemnad noch eine Idee wie man das angehen könnte?

Gruß

Dimitri

BigWim

  • Gast
Re: Listenfeld -> gewähltes Element holen
« Antwort #8 am: 18.09.08 - 14:34:01 »
Hallo Dimitri,

jetzt hab ich es auch verstanden. Dann hat LotusMen Recht. Im Feldereignis "Existing" kannst Du Dir den Wert holen. In deinem Fall steht dann dort die DocID.

Sub Exiting(Source As Field)
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Wert as String

   Set uidoc = uiws.CurrentDocument
   Wert = uidoc.FieldGetText(<Feldname>)

End Sub

Viel Erfolg!
Markus

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #9 am: 18.09.08 - 15:02:50 »
Hallo Dimitri,

jetzt hab ich es auch verstanden. Dann hat LotusMen Recht. Im Feldereignis "Existing" kannst Du Dir den Wert holen. In deinem Fall steht dann dort die DocID.

Sub Exiting(Source As Field)
   Dim uiws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Wert as String

   Set uidoc = uiws.CurrentDocument
   Wert = uidoc.FieldGetText(<Feldname>)

End Sub

Viel Erfolg!
Markus


Leider stimmt das nicht, dass ich den gewählten Listeneintrag bekomme.

Wenn in der Liste wie oben erwähnt zwei Gleiche Kundennamen sind, dann bekommt man auch zwei Rückgabewerte => in deiner Variablen "Wert" steht dann "KundeC; KundeC" bzw. in meinem Fall stehen da dann zwei DocUID's drin.

Gruß

Dimitri
« Letzte Änderung: 18.09.08 - 15:04:59 von diwi »

BigWim

  • Gast
Re: Listenfeld -> gewähltes Element holen
« Antwort #10 am: 18.09.08 - 15:19:26 »
Hallo Dimitri,

ich habe es bei mir aber ausprobiert. In einer Maske habe ich ein Listenfeld angelegt und dein Beispiel Kunde A,B,C,C | 1,2,3,4 als Elemente eingefügt. Je nach Auswahl steht jeweils nur ein Wert in "Wert" drin.

Wir setzen hier den NotesClient 6.5.4 ein. Ansonsten kann ich mir nicht erklären.

Tut mir leid, dass ich Dir nicht weiterhelfen konnte.

Markus

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #11 am: 18.09.08 - 16:08:02 »
Hallo Markus

hmm... da bin ich jetzt etwas erstaunt  ???
Zitat
ich habe es bei mir aber ausprobiert. In einer Maske habe ich ein Listenfeld angelegt und dein Beispiel Kunde A,B,C,C | 1,2,3,4 als Elemente eingefügt. Je nach Auswahl steht jeweils nur ein Wert in "Wert" drin.
Habe das gerade nochmal ausprobiert und ich bekomme zwei Werte aus dem Listenfeld zurück.

Zitat
Wir setzen hier den NotesClient 6.5.4 ein. Ansonsten kann ich mir nicht erklären.
Unsere Clients sind auf 6.5.5, ist das vielleicht das Problem? Ein Bug im Release?

Zitat
Tut mir leid, dass ich Dir nicht weiterhelfen konnte.

Ich dank dir trotzdem für dein bemühen.  :)

Aber kann das noch jemand nachbilden und vom Ergebnis berichten bzw. hat jemand eine Erklärung dafür?

Gruß

Dimitri

Offline diwi

  • Frischling
  • *
  • Beiträge: 14
Re: Listenfeld -> gewähltes Element holen
« Antwort #12 am: 19.09.08 - 12:07:44 »
Hallo zusammen,

also zu diesem Fall nochmal:

Ich glaube das Problem gefunden zu haben, allerdings kann ich mir nicht erklären wieso es so ist... :-:

Das Listenfeld befindet sich in meinem Fall in einem Layout. Und ganau das scheint das Problem zu sein. Die Liste benimmt in einem Layout anders als ausserhalb. Wenn ich das selbe Feld in die Maske lege, dann bekomme ich nur einen Wert als Rückgabe. Liegt die Liste stattdessen im Layout, bekomme ich zwei Werte zurück... :o

Kennt jemand diese Phänomen bzw. ist das ein Bug? Kann doch nicht sein dass ein graphisches Element auswirkung auf die Ausgabe eines Listenfelds hat! ???

Gruß

Dimitri

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz