Domino 9 und frühere Versionen > ND8: Entwicklung
PROMPT_OKCANCELCOMBO mit variablem Inhalt
Bruce Willis:
Hallo,
in einer Ansicht werden Dokumente angezeigt.
Jedes Dokument hat unter anderem vier Felder namens "vHa", "nHa", "vVe", "nVe".
In jedem dieser Felder werden normalerweise vier Mitarbeiternamen gespeichert.
Es soll per Button in der Ansicht ermöglicht werden, einen Namen auszuwählen.
Solange in jedem Feld wirklich 4 Einträge stehen, funktioniert der u.g. Code einwandfrei.
Wenn aber weniger, dann geht es nicht mehr.
Was müsste in dem Code geändert werden?
Oder gibt's dafür auch ganz andere bessere Lösung?
Gruß
Leo
--- Code: ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db=session.CurrentDatabase
Set dc=db.unprocessedDocuments
Set doc=dc.GetFirstDOcument
Do While Not doc Is Nothing
Dim response As Variant
Dim response1 As Variant
Dim values(3) As Variant
values(0) = "vHa"
values(1) = "nHa"
values(2) = "vVe"
values(3) = "nVe"
Dim valuesA(4) As Variant
valuesA(0) = doc.vHa(0)
valuesA(1) = doc.vHa(1)
valuesA(2) = doc.vHa(2)
valuesA(3) = doc.vHa(3)
Dim valuesB(4) As Variant
valuesB(0) = doc.nHa(0)
valuesB(1) = doc.nHa(1)
valuesB(2) = doc.nHa(2)
valuesB(3) = doc.nHa(3)
Dim valuesC(4) As Variant
valuesC(0) = doc.vVe(0)
valuesC(1) = doc.vVe(1)
valuesC(2) = doc.vVe(2)
valuesC(3) = doc.vVe(3)
Dim valuesD(4) As Variant
valuesD(0) = doc.nVe(0)
valuesD(1) = doc.nVe(1)
valuesD(2) = doc.nVe(2)
valuesD(3) = doc.nVe(3)
response = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & ": ", "Bitte Funktion auswählen", values(0), values)
'Print response
If Isempty (response) Then
Messagebox "Abgebrochen", , "Nichts ausgewählt"
Else
If response = "vHa" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesA(0), valuesA)
Elseif response = "nHa" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesB(0), valuesB)
Elseif response = "vVe" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesC(0), valuesC)
Elseif response = "nVe" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesD(0), valuesD)
End If
Print response1
If Isempty (response1) Then
Messagebox "MA-Wahl abgebrochen", , "Nichts ausgewählt"
Else
Msgbox Left(response1,12), ,"SZ-Dok öffnen für " & doc.Datum(0) & " " & _
response
End If
End If
Set doc=dc.GetNextDocument(doc)
Loop
Call ws.ViewRefresh
End Sub
--- Ende Code ---
koehlerbv:
Statt mit festenArrays musst Du mit dynamischen arbeiten. Stichwort: Redim Preserve.
Es geht natürlich auch einfacher: Statt Dim vValuesA (4) As Variant machst Du einfach nur ein Dim vValuesA As Variant und weisst dann das komplette Item zu:
vValuesA = doc.vHA
Und das war es dann auch schon.
Du solltest vielleicht im ersten Teil prüfen, ob die einzelnen Items überhaupt einen Inhalt haben und danach Dein erstes Prompt abhängig machen.
HTH,
Bernhard
Peter Klett:
Du solltest auch versuchen, das Script allgemeingültiger zu schreiben, denn es hat viele Elemente unnötig mehrfach drin, die die Wartbarkeit erschweren und die Fehleranfälligkeit erhöhen.
Habe Dein Script mal auf die Schnelle "zusammengeschrumpft", ohne Prüfung auf Sinnhaftigkeit. Dieses Script macht exakt das gleiche, was Du geschrieben hast, ist aber um einiges kürzer.
--- Code: ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db=session.CurrentDatabase
Set dc=db.unprocessedDocuments
Set doc=dc.GetFirstDOcument
Dim response As Variant
Dim response1 As Variant
Dim values(3) As Variant
values(0) = "vHa"
values(1) = "nHa"
values(2) = "vVe"
values(3) = "nVe"
Do While Not doc Is Nothing
response = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & ": ", "Bitte Funktion auswählen", values(0), values)
'Print response
If Isempty (response) Then
Messagebox "Abgebrochen", , "Nichts ausgewählt"
Else
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", doc.GetItemValues (response) (0), doc.GetItemValues (response))
Print response1
If Isempty (response1) Then
Messagebox "MA-Wahl abgebrochen", , "Nichts ausgewählt"
Else
Msgbox Left(response1,12), ,"SZ-Dok öffnen für " & doc.Datum(0) & " " & _
response
End If
End If
Set doc=dc.GetNextDocument(doc)
Loop
Call ws.ViewRefresh
End Sub
--- Ende Code ---
Bruce Willis:
--- Zitat von: koehlerbv am 07.08.12 - 18:16:16 ---...Redim Preserve.
Es geht natürlich auch einfacher: Statt Dim vValuesA (4) As Variant machst Du einfach nur ein Dim vValuesA As Variant und weisst dann das komplette Item zu:
vValuesA = doc.vHA
...
--- Ende Zitat ---
Hallo Bernhard,
vielen Dank für Deine super schnelle und ausführliche Unterstützung!
Es funktioniert jetzt!
Gruß
Leo
--- Code: ---Sub Click(Source As Button)
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim response, response1 As Variant
Dim valuesA, valuesB, valuesC, valuesD As Variant
Dim values(3) As Variant
Set db=session.CurrentDatabase
Set dc=db.unprocessedDocuments
Set doc=dc.GetFirstDocument
values(0) = "vHa"
values(1) = "nHa"
values(2) = "vVe"
values(3) = "nVe"
Do While Not doc Is Nothing
valuesA = doc.vHa
valuesB = doc.nHa
valuesC = doc.vVe
valuesD = doc.nVe
response = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & ": ", "Bitte Funktion auswählen", values(0), values)
'Print response
If Isempty (response) Then
Messagebox "Abgebrochen", , "Nichts ausgewählt"
Else
If response = "vHa" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesA(0), valuesA)
Elseif response = "nHa" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesB(0), valuesB)
Elseif response = "vVe" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesC(0), valuesC)
Elseif response = "nVe" Then
response1 = ws.Prompt (PROMPT_OKCANCELCOMBO, _
"Servicezeit am " & doc.Datum(0) & " " & response & ": ", _
"Bitte Mitarbeiter auswählen", valuesD(0), valuesD)
End If
Print response1
If Isempty (response1) Or response1 ="" Then
Messagebox "MA-Wahl abgebrochen", , "Nichts ausgewählt"
Else
Msgbox Left(response1,12), ,"SZ-Dok öffnen für " & doc.Datum(0) & " " & _
response
End If
End If
Set doc=dc.GetNextDocument(doc)
Loop
Call ws.ViewRefresh
End Sub
--- Ende Code ---
Bruce Willis:
--- Zitat von: Peter Klett am 07.08.12 - 18:34:40 ---Du solltest auch versuchen, das Script allgemeingültiger zu schreiben, denn es hat viele Elemente unnötig mehrfach drin, die die Wartbarkeit erschweren und die Fehleranfälligkeit erhöhen...
--- Ende Zitat ---
Hallo Peter,
vielen Dank für Deinen Vorschlag und die Hinweise.
Deine Variante sieht viel eleganter als meine.
Kannst Du bitte noch helfen, die "Mismatch" Fehlermeldung zu beheben?
Gruß
Leo
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln