Autor Thema: Prompt mit Alias in LS  (Gelesen 3693 mal)

Offline mlotus

  • Frischling
  • *
  • Beiträge: 19
Prompt mit Alias in LS
« am: 06.12.07 - 20:59:07 »
Hallo

weiss jemand wie man mit einem Prompt in Lotus Script Aliase verwenden kann ?

Code
askme = ws.Prompt(PROMPT_OKCANCELLISTMULT, _
	"Select a Name", _
	"Select one or more names", _
	"", docThis.fld_trips_customers_id )

"docThis.fld_trips_customers_id" ist ein Textfeld mit Mehrfachwerten.

Dieses enthält z.B. "KundeA","KundeB" und ich hätte gerne die z.B. Aliase "A","B". im Dokument.

Danke & Gruss
Martin


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Prompt mit Alias in LS
« Antwort #1 am: 06.12.07 - 21:10:15 »
Nein, wie sollte das in diesem Zusammenhang gehen? Dein Item (Backend!) speichert nur Aliase (so vergeben), das Feld (Frontend!) kennt dann vielleicht noch "Klarnamen", aber dazu bekommst Du so keinen Bezug.

Beschreibe mal lieber genau, was Du eigentlich erreichen willst. Gehen tut (fast) alles.

Bernhard

Offline mlotus

  • Frischling
  • *
  • Beiträge: 19
Re: Prompt mit Alias in LS
« Antwort #2 am: 06.12.07 - 21:29:00 »
Hallo Bernhard

Toni, hat mir ja heute sehr geholfen mit seinem Beispiel mit der Verknüpfung von Kurs & Teilnehmer.

Im Kursdokument werden in einem Hidden-Field, die Referenzen zu den Teilnehmern gespeichert.

Eine Referenz ist immer so aufgebaut: "Nachname","Vorname"|"DocID"

Mit dem Prompt frage ich ab welche Referenz gelöscht werden soll und das klappt auch wunderbar,
nur ist es eben nicht wirklich schön dass im Prompt nicht nur "Nachname Vorname" angezeigt wird sonder eben auch die "DocID".

Hier wurde das schon mal behandelt, aber so wie es Andreas gemacht hat finde ich es auch umständlich und das mit den Listen in Lotus Script bekomme ich einfach nicht hin :(
http://atnotes.de/index.php?topic=21493.0

Gruss
Martin
« Letzte Änderung: 06.12.07 - 21:37:33 von mlotus »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Prompt mit Alias in LS
« Antwort #3 am: 06.12.07 - 21:52:59 »
Ich habe leider momentan nicht die Zeit, mir Deinen eigentlichen Thread näher anzusehen (was ich aber überflogen habe, erscheint mir nicht die ideale Lösung zu sein. Toni meinte ggf. auch etwas anderes, aber wie gesagt ..).

Eine "einfache" wirst Du aber nicht hinbekommen. Listen sind ideal, und wenn man das einmal geschnallt hat, werden sie echt zum "Billigmacher" (wenn sie denn hinpassen).

Alternativ kannst Du ja auch Dein Item mit der Referenz vor dem Prompt umbauen (die UNID als Alias entfernen und an Hand des Namens dann nach der Auswahl im Original wieder ermitteln).

HTH,
Bernhard

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Prompt mit Alias in LS
« Antwort #4 am: 07.12.07 - 09:04:12 »
Innerhalb des Promptes gehen keine Aliase. Du kannst dir aber auf mehreren Wegen helfen.

Einmal, wie du schon richtig erkannt hast die Lösung von Andreas über Arrays oder auch über eine Liste. Wobei ich die Listenlösung preferrieren würde.

Ein andere Alternative wäre eine einfache Maske in der du ein Listenfeld einfügst, welches den gleichen Namen hat wie das versteckte Feld mit den Kursteilnehmern und der ID als Alias. Diese Maske rufst du dann als Dialogbox auf. Damit funktioniert der Alias wieder und du bekommst in der Dialogbox die Namen angezeigt und wenn du den Feldinhalt abfrägst die ID.

Die Lösung ist relativ trivial.

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

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Prompt mit Alias in LS
« Antwort #5 am: 07.12.07 - 09:26:41 »
... ich weiß nicht, ob ich das richtige sehe: als Rückgabe bleiben dann die verblieben Aliase im versteckten Feld.

Ich löse es per Arrays:

Code
Option Explicit
Function GetLabelAlias( vArray As Variant , vLabel As Variant , vAlias As Variant , vDefault As Variant , vDefaultLabel As Variant , sSep As String ) As Variant
   ' # Trennt in den Text-Listen vArray und vDefault durch das Trennzeichen sSep verbundenen Label- und Alias-Werte auf.
   ' # @Param
   ' # vArray = String-Array => mit allen Einträgen nach dem Muster => Label & sSep & sAlias 
   ' # vLabel = String-Array => leeres Array
   ' # vAlias = String-Array => leeres Array 
   ' # vDefault = String-Array => mit allen Einträgen nach dem Muster => Label & sSep & sAlias 
   ' # vDefaultLabel = String-Array => leeres Array 
   ' # sSep = String => das Trennzeichen zwischen Label und Alias
   ' # @Return
   ' # Rückgabe ist True oder False
   On Error GoTo ErrorHandle
   Dim sTrenn As String
   Dim sDummy( 0 to 0 ) As String
   Dim vSelection As Variant
   Dim vResult As Variant
   Dim vValue As Variant
   Dim i As Integer
   '
   sDummy( 0 ) = ""
   GetLabelAlias = False
   vLabel = sDummy
   vAlias = sDummy
   vDefaultLabel = sDummy
   vResult = sDummy
   '
   ' # Validierung der Übergabeparameter
   If Not IsArray( vArray ) Then 
      Exit Function
   End If
   '
   ' # Parsen des Trennzeichens
   If Instr( vArray(0) , " " & sSep & " " ) > 0 Then
      sTrenn = " " & sSep & " "
   ElseIf Instr( vArray(0) , sSep ) > 0 Then
      sTrenn = sSep
   Else
      sTrenn = ""
   End If
   Print {"} & sTrenn {"}
   '
   ' # Label und Alias trennen
   If sTrenn <> "" Then
      For i = LBound( vArray ) to UBound( vArray )
         vValue = Split( vArray( i ) , sTrenn )
         If vLabel( 0 ) = "" Then
            vLabel( 0 ) = vValue( 0 )
            vAlias( 0 ) = vValue( 1 )
            vResult( 0 ) = ""
         Else
            vLabel = ArrayAppend( vLabel , vValue( 0 ) )
            vAlias = ArrayAppend( vAlias , vValue( 1 ) )
            vResult = ArrayAppend( vResult , "" )
         End If
      Next
      '
      ' # vDefault trennen
      If IsArray( vDefault ) Then
         For i = LBound( vDefault ) to UBound( vDefault )
            vValue = Split( vDefault( i ) , sTrenn )
            If vDefaultLabel( 0 ) = "" Then
               vDefaultLabel( 0 ) = vValue( 0 )
            Else
               vDefaultLabel = ArrayAppend( vDefaultLabel , vValue( 0 ) )
            End If
         Next
      Else
         vValue = Split( vDefault , sTrenn )
         vDefaultLabel = vValue( 0 )
      End If      
   Else
      vLabel = vArray
      vAlias = vArray
      vDefaultLabel = vDefault
      Redim vResult ( 0 to Ubound( vAlias ) )
   End If
   '
   GetLabelAlias = True
   '
WayOut:
Exit Function
ErrorHandle:
   MsgBox |FEHLER | & err & | in GetLabelAlias => | & Error , 16 , |Fehler in Zeile | & Erl  
   Resume WayOut
End Function
Function RemoveFromAliasList( vArray As Variant , sSep As String , sMode As String , vDefault As Variant ) As Variant
   ' # Entfernt per Auswahlliste aus der Textliste vArray Werte, die mit dem Trennzeichen sSep miteinander verbunden sind.
   ' # @Param
   ' # vArray = String-Array => mit allen Einträgen nach dem Muster => Label & sSep & sAlias 
   ' # sSep = String => das Trennzeichen zwischen Label und Alias
   ' # sMode = String => die Form der Auswahl
   ' # ... sMode = "single" => Einzelwert selektierbar
   ' # ... sMode = "multiple" => Mehrfachwert selektierbar
   ' # vDefault = String-Array oder String => vorbelegte Werte in der Auswahlliste - muß denselben Aufbau haben wie vArray
   ' # @Return
   ' # Rückgabe ist ein Array mit allen entfernten Alias-Werten
   On Error GoTo ErrorHandle
   Dim sTrenn As String
   Dim sDummy( 0 to 0 ) As String
   Dim vLabel As Variant
   Dim vAlias As Variant
   Dim vDefaultLabel As Variant
   Dim vSelection As Variant
   Dim vResult As Variant
   Dim vValue As Variant
   Dim i As Integer
   '
   vResult = sDummy
   '
   ' # Trennung von Label und Alias
   If GetLabelAlias( vArray , vLabel , vAlias , vDefault , vDefaultLabel , sSep ) Then
      ' # OK
   Else
      Print "Abbruch - Die Trennung von Label und Alias war nicht erfolgreich!"
      Exit Function
   End If
   Redim vResult( 0 to UBound( vAlias ) )
   ' 
   ' # Werte per Label auswählen
   vSelection = SelectFromList( vLabel , sMode , vDefaultLabel )
   '
   ' # Validierung der ausgewählten Werte
   If Not IsArray( vSelection ) Then
      Print "Abbruch - es wurden keine Werte zum Entfernen ermittelt"
      Exit Function
   End If
   '
   ' # Rückgabe-Array erstellen
   Forall sSelect In vSelection
      If Cstr( sSelect ) = "" Then 
         Print "Abbruch - die Auswahl war leer"
         Exit Function
      End If
      i = ArrayGetIndex( vLabel , Cstr( sSelect ) )
      vArray( i ) = ""
      vResult( i ) = vAlias( i )
   End Forall
   '
   ' # Rückgabe
   vArray = Fulltrim( vArray )
   RemoveFromAliasList = Fulltrim( vResult )
   '
WayOut:
Exit Function
ErrorHandle:
   MsgBox |FEHLER | & err & | in RemoveFromAliasList => | & Error , 16 , |Fehler in Zeile | & Erl
   Resume WayOut
End Function
Function SelectFromList( vArray As Variant , sMode As String , vDefault As Variant ) As Variant
   ' # Gibt per Auswahlliste selektierte Werte zurück
   ' # @Param
   ' # vArray = StringArray => enthält eine Liste von Werten
   ' # sMode = String => übergibt den Modus der Auswahl:
   ' # ... sMode = "single" => es ist nur eine einfache Wertauswahl möglich
   ' # ... sMode = "multiple" => es ist nur eine Mehrfachauswahl möglich
   ' # vDefault = Vorbelegte Werte in der Auswahl
   ' # @Return
   ' # Textliste mit den ausgewählten Werten
       On Error GoTo ErrorHandle
       Dim ws As New NotesUIWorkspace
       Dim vResult As Variant
       Dim vReturn(  ) As String
       Dim sDummy( 0 )
       Dim i As Integer
       sDummy(0) = ""
      '
      ' # Auswahl      
      If sMode = "single" Then 
         vResult = ws.Prompt( PROMPT_OKCANCELLIST, "Auswahl", "Wählen Sie einen Eintrag", vDefault , vArray )
      Else
         vResult = ws.Prompt( PROMPT_OKCANCELLISTMULT, "Mehrfach-Auswahl", "Wählen Sie einen oder mehrere Einträge", vDefault , vArray )
      End If
      '
      ' # Rückgabe vorbereiten
      If IsArray( vResult ) Then
         For i = 0 to UBound( vResult )
            Redim Preserve vReturn( 0 to i )
            vReturn( i ) = Cstr( vResult( i ) )
         Next
      Else
         Redim vReturn( 0 to 0 )
         vReturn( 0 ) = vResult
      End If
      '
      ' # Rückgabe
      SelectFromList = vReturn
      '
WayOut:
Exit Function
ErrorHandle:
   MsgBox |FEHLER | & err & | in SelectFromList => | & Error , 16 , |Fehler in Zeile | & Erl  
   Resume WayOut
End Function
Sub Initialize( )
   On Error GoTo ErrorHandle
   ' # lokale Deklarationen...
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim docThis As NotesDocument
   Dim vArray As Variant
   '
   Set docThis = ws.CurrentDocument.Document
   '
   vArray = docThis.List_1
   '
   docThis.List_3 = RemoveFromAliasList( vArray , "|" ,  "multiple" , docThis.List_2 )
   docThis.List_4 = vArray
WayOut:
Exit Sub
ErrorHandle:
   MsgBox |FEHLER | & err & | in  Initialize => | & Error , 16 , |Fehler in Zeile | & Erl
   Resume WayOut
End Sub
Im Handling sieht das dann so aus wie in der angehängten Grafik

Toni
Grüßle Toni :)

Offline mlotus

  • Frischling
  • *
  • Beiträge: 19
Re: Prompt mit Alias in LS
« Antwort #6 am: 28.12.07 - 15:20:54 »
Hallo Toni

nochmals vielen Dank für die super Hilfe, funktioniert perfekt  ;)

Gruss
Martin

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Prompt mit Alias in LS
« Antwort #7 am: 28.12.07 - 18:31:18 »
... freut mich, dann hatten die Codeschnipsel ja noch was...

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz