Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: mleussner am 26.08.09 - 13:42:35
-
???
Hallo zusammen,
ich plage mich mit folgendem Problem herum. In einer Ansicht sollen Werte direkt in den Spalten eingegeben werden. Dabei sind auch einige längere Textpassagen einzugeben.
Wenn ich nun die Standardmöglichkeiten benutze, erhalte ich eine einzeilige Eingabemöglichkeit, bei der ich nicht sehen kann, an welcher Stelle des Textes ich mich befinde.
Jetzt habe ich mir überlegt per "Keybd_Event" Werte über die Zwischenablage in die Spalte zu übertragen.
Ich lasse mir also eine Maske mit einem Eingabefeld anzeigen, das aus der Zwischenablage den zuvor dort reinkopierten Text anzeigt.
Im QueryClose der Maske füge ich den neuen Text in die Zwischenablage wieder ein.
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim tmp As String
tmp = source.FieldGetText("Thema")
setClipboardText(tmp)
End Sub
Das funktioniert anscheinend nicht.
Dann läuft das script aus dem InViewEdit weiter und soll die Werte aus der Zwischenablage wieder in das Feld einfügen.
Select Case Colprogname(0)
Case "Status"
choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Select the answer","",status)
setClipboardText(choice )
KeyPress VK_CONTROL, 0, 0, 0
KeyPress VK_V, 0, 0, 0
KeyPress VK_CONTROL, 0, 2, 0
KeyPress VK_V, 0, 2, 0
Das funktioniert, solange weniger als 256 Zeichen in der Maske eingetragen wurden.
Bei mehr Zeichen ertönt nur ein klägliches Piepen und der Text ist weg.
Was mache ich falsch und wer kann mir helfen??
-
Ich habe mir jetzt damit geholfen, daß ich ein Feld in einem neuen Dokument, das ich mit einer eigenen Maske öffne, einen Wert übergebe. Das klappt ganz prima.
Leider kommt zwischendurch immer mal wieder ein kleines hässliches Fenster ("Operation wurde auf ihre Anforderung hin gestoppt.") mit einer Abbruchmeldung, die ich nicht wegbekomme. Das passiert, wenn ich aus einer Spalte per TAB in die nächste springe, in der eine Maske zum Editieren benutzt wird.
Case "Thema"
Dim auswahl As New NotesDocument(db)
auswahl.Thema = doc.thema(0)
If ws.DialogBox("Thema",True,True,False,False,False,False,"Text eingeben",auswahl) Then
wahl = auswahl.Thema
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Hat jemand eine Idee? Sonst muß ich meinem Kunden klarmachen, daß Notes nicht Excel ist. Das würde mich allerdings sehr ärgern.
-
... dein Code-Snippet brint mir hier nicht so richtig was - ich mache das auch mit der Dialogmaske, habe aber keine Abbruchmeldungen. Dein Konstrukt seint mir irgendwie daran schuld zu sein.
Wo hast du den Code-Auschnitt denn drin?
Toni
-
Das kann ich gerne aufklären. Hier kommt der komplette Code:
Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)
Const QUERY_REQUEST = 1
Const VALIDATE_REQUEST = 2
Const SAVE_REQUEST = 3
Const NEWENTRY_REQUEST = 4
Const KEYEVENTF_KEYUP = &H2
Const KEYEVENTF_KEYDOWN = &H0
Const VK_CONTROL = &H11
Const VK_C = &H43
Const VK_V = &H56
Const VK_TAB = &H9
Const VK_UP = &H26
Const VK_DOWN = &H28
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim caret As String
Dim msg As String
Dim flag As Boolean
Dim ret As Boolean
Dim values() As String
Dim i As Integer
Dim j As Integer
Dim max As Integer
Dim newval As String
caret = Source.CaretNoteID
If caret = "0" Then Exit Sub
Set db = Source.View.Parent
Set doc = db.GetDocumentByID(caret)
Dim auswahl As New NotesDocument(db)
Dim Status(18) As String
Status(0) = "Offen"
Status(1) = "neu eingestellt"
Status(2) = "In Arbeit"
Status(3) = "Fertig zur Vorlage im UAK-DMS"
Status(4) = "Abstimmung im UAK-DMS erfolgt"
Status(5) = "Aufnahme in Releaseplanung"
Status(6) = "Zur Aufwandsschätzung"
Status(7) = "Fertig zur Vorlage im FAK-BO"
Status(8) = "Beauftragung durch FAK-BO zugestimmt"
Status(9) = "In Realisierung"
Status(10) = "Abnahme durch FAK-BO erfolgt"
Status(11) = "In Prüfung durch ivv"
Status(12) = "Bereit zum Test"
Status(13) = "Freigabe für Produktion"
Status(14) = "Zurückgestellt"
Status(15) = "iAK Anforderung"
Status(16) = "Sammlung eAK-Release"
Status(17) = "Geschlossen"
Dim systeme(4) As String
Systeme(0)="Scanning"
Systeme(1)="eGVR"
Systeme(2)="Arbeitskorb"
Systeme(3)="Sonstiges"
Select Case Requesttype
Case QUERY_REQUEST
Select Case Colprogname(0)
Case "Status"
choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Select the answer","",status)
setClipboardText(choice )
KeyPress VK_CONTROL, 0, 0, 0
KeyPress VK_V, 0, 0, 0
KeyPress VK_CONTROL, 0, 2, 0
KeyPress VK_V, 0, 2, 0
Case "System_Komponente"
choice = ws.Prompt(PROMPT_OKCANCELLIST,"SELECT","Bitte Auswahl treffen","",systeme)
setClipboardText(choice )
KeyPress VK_CONTROL, 0, 0, 0
KeyPress VK_V, 0, 0, 0
KeyPress VK_CONTROL, 0, 2, 0
KeyPress VK_V, 0, 2, 0
continue = False
Case "Thema"
auswahl.Thema = doc.thema(0)
If ws.DialogBox("Thema",True,True,False,False,False,False,"Text eingeben",auswahl) Then
wahl = auswahl.Thema
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Case "Historie_Bemerkung"
auswahl.Historie_Bemerkung = doc.Historie_Bemerkung(0)
If ws.DialogBox("Historie_Bemerkung",True,True,False,False,False,False,"Text eingeben",auswahl) Then
wahl = auswahl.Historie_Bemerkung
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Case "letzte_Änderung"
auswahl.Date = doc.letzte_Änderung
If ws.DialogBox("DP",True,True,False,False,False,False,"Datum letzte Änderung auswählen",auswahl,True , False , False ) Then
wahl = auswahl.Date
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Case "Datum_Bereitstellung"
auswahl.Date = doc.Datum_Bereitstellung
If ws.DialogBox("DP",True,True,False,False,False,False,"Datum Bereitstellung auswählen",auswahl,True , False , False ) Then
wahl = auswahl.Date
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Case "Kundentest_erfolgt_am"
auswahl.Date = doc.Kundentest_erfolgt_am
If ws.DialogBox("DP",True,True,False,False,False,False,"Kundentest-Datum auswählen",auswahl,True , False , False ) Then
wahl = auswahl.Date
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
Case "eingestellt_am"
auswahl.Date = doc.eingestellt_am
If ws.DialogBox("DP",True,True,False,False,False,False,"eingestellt am - Datum auswählen",auswahl,True , False , False ) Then
wahl = auswahl.Date
Call Inviewedit(Source, SAVE_REQUEST, Colprogname, wahl, Continue)
End If
continue = False
End Select
Case VALIDATE_REQUEST
Select Case Colprogname(0)
Case "Status"
If Fulltrim(Columnvalue(0)) = "" Then
Messagebox "Bitte einen Wert eintragen",, "Kein Wert in Spalte"
Continue = False
End If
flag = False
Forall element In status
If Lcase(element) = Lcase(Columnvalue(0)) Then
flag = True
Exit Forall
End If
End Forall
If Not flag Then
Forall element In status
msg = msg & element & Chr(10)
End Forall
Messagebox msg,, "Wert muß einem der folgenden entsprechen."
continue = False
End If
Case "Kategorie"
If Fulltrim(Columnvalue(0)) = "" Then
Messagebox "Bitte einen Wert eintragen",, "Kein Wert in Spalte"
Continue = False
End If
Case Else
flag = True
End Select
Case SAVE_REQUEST
For i = 0 To Ubound(Colprogname) Step 1
Call doc.ReplaceItemValue(Colprogname(i), Columnvalue(i))
Next
Call doc.Save(True, True, True)
Call ws.viewrefresh()
Case NEWENTRY_REQUEST
Set doc = New NotesDocument(db)
Call doc.ReplaceItemValue("Form", "MainDocument")
For i = 0 To Ubound(Colprogname) Step 1
Call doc.ReplaceItemValue(Colprogname(i), Columnvalue(i))
Next
Call doc.Save(True, True, True)
Call ws.viewrefresh()
End Select
End Sub
Ich hoffe, das bringt Licht ins Dunkel. Danke schon mal für dein Interesse.
Martin
-
... mächtig mächtig - das ist mehr als benötigt - das Grundkonstrukt hätte mir gereicht...
Den Code werde ich mir später genauer anschauen, könnte an dem erneuten Aufruf InViewEdit liegen - da brauche ich etwas mehr Zeit - Essen steht gleich auf dem Tisch...
Bis dann..
Toni