Hallo,
ich habe mich gerade wieder mit Lotus Script beschäftigt und bin noch unsicher beim Programmieren, sodass ich prompt auf mein erstes Problem gestoßen bin und hoffe hier nun auf Hilfe.
Folgende Funktion(en) brauche ich:
Meine Hauptmaske wird übers Web ausgefüllt. Dort existiert ein Namensfeld (Mehrfachwerte zugelassen). Im Notes-Backend-Bereich soll dann für jeden Namen ein separates Dokument erstellt werden. Zusätzlich soll der Name als Key fungieren, um neben den ursp. Werten noch weitere Werte aus einer anderen DB zu übernehmen. Die "Backend-Funktion" liegt zurzeit hinter einen Button, soll aber für die Zukunft automatisch im Hintergrund laufen.
Hier mein Script, wo auch die Probleme aufgelistet sind, die mit 'Achtung --- ...' markiert sind.
Sub SubCreateNewVersion
Dim oWs As New NotesUIWorkspace
Dim oSession As New NotesSession
Dim nam As NotesName
Dim oDb As NotesDatabase
Dim oDc As NotesDocumentCollection
Dim oDoc As NotesDocument
Dim oNewDoc As NotesDocument
Dim oUiDoc As NotesUiDocument
Dim iReturn As Integer
Dim cPromptText As String
Dim temp As String
'### DEKLARATION: ERROR HANDLING ###
On Error Goto ErrorText
'### BODY ###
Set oDb = oSession.CurrentDatabase
'--- Alle Markierten Dokumente
Set oDc = oDb.UnprocessedDocuments
If oDc.Count <> 1 Then
'--- es wurden mehrere Dokumente markiert
cPromptText = "Es wurden <" & oDc.Count & "> Dokumente markiert! Bitte nur ein Dokument zum Kopieren auswählen!"
Print cPromptText
iReturn = Messagebox( cPromptText , MB_OK + MB_ICONSTOP , TitelDialogBox & "Fehler: Kopieren eines Dokuments" )
Else
'--- aktuelles Dokument
Set oDoc = oDc.GetFirstDocument
'--- Erstellen eines Dokument mit der neuen Form temp1
Set oNewDoc = New NotesDocument( oDb )
oDoc.Form = "Temp1"
'ACHTUNG --- hier muss noch eine Routine eingebaut werden, die evaluiert, wieviel Namen im Feld ValuatedPerson (Mehrfachwerte) existieren und für jeden Namen ein eigenes Dokument erstellt, die Idee ist mit Forall und Ubound zu arbeiten, genaue Umsetzung noch unklar
'--- Kopieren der Inhalte der aktuellen Zielvorgabe
Call oDoc.CopyAllItems( oNewDoc, True )
'--- Felder der neuen Version modifizieren
temp=oDoc.GetItemValue( "ValuatedPerson" )
oNewDoc.Name1=temp
'ACHTUNG --- Hier soll der nunmehr einzelne Name/Wert aus dem Feld ValuatedPerson mit einer anderen DB verglichen werden, um entsprechende Werte in die aktuelle DB zu übernehmen. Da wo "Vorname Name" steht, muss der Einzelwert aus dem Feld ValuatedPerson rein (siehe unten, Evaluate...). Der Name kommt mit Vorname und Nachname an und soll im gekürzten kanonischen Format (ohne die Kennungen CN, OU, O, und C) verglichen werden. Das ganze wurde schonmal mit einer Formel umgesetzt, liefert im Script aber keinen Rückgabewert. Anstatt der Formel, habe ich über GetAllDocumentsByKey nachgedacht, aber auch hier liegt das Problem bei der Integration, Umsetzung.
oNewDoc.DBWert= Evaluate ({Wert1:=@Name([Canonicalize] ; "Vorname Name"+"/"); Wert2:=@Name([Abbreviate] ;Wert1); Endwert:=@DbLookup("":"NoCache";"C1256FF1:0024D1BC";"Scorecard";Wert2;4); @Name([CN]; Endwert)})
End If
Exit Sub
'### FEHLERBEHANDLUNG ###
ErrorText:
'--- Fehlermeldung mit Bildschirmausgabe
cPromptText = "Bei der internen Verarbeitung trat folgender Fehler auf: <" & Error() & ">"
Print "Verarbeitungsfehler: " & cPromptText
iReturn = Messagebox( cPromptText , MB_OK + MB_ICONSTOP , TitelDialogBox & "Verarbeitungsfehler" )
Resume EndofSub
EndofSub:
End Sub