Hallo,
irgendwie steh ich aber so was von aufn Schlauch!
Habe ein Aktion mit folgenden Script drinne
Sub Click(Source As Button)
If Not uidoc.editmode Then uidoc.editmode = True
uidoc.document.Number = GenerateSequentialNumber( profileNumberForm_Main$ )
Call uidoc.save
End Sub
Ich möchte gerne das nach dem Speichern, sich eine bestimmte Maske öffnet.
Mittlerweile habe ich schon so eingies ausprobiert und seh wohl vor lauter Wald den Baum nicht mehr. Wäre super wenn Ihr mir helfen könntet.
Also...
du kannst natürlich über das NotesUIWorkspace Objekt eine Maske öffnen.
Aber nur um das ganze etwas genauer zu sagen:
Einer "geöffneten" Maske liegt immer ein Dokument zu grunde.
Im Prinzip sagt das im Dokument enthaltene Feld "Form" welche Maske zum Anzeigen des Dokuments verwendet werden soll:
! Ich hab den Code direkt hier eingegeben, also noch nicht laufen gelassen !
Dim db as NotesDatabase
Dim doc as NotesDocument
Dim s as NotesSession
Dim uidoc as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set s = New NotesSession
Set db = s.CurrentDatabase
Set doc = db.CreateDocument
doc.Form = "Preview"
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.EditDocument(True, doc, False)
Um das aktuelle Dokument in einer neuen Maske zu öffnen:
Dim doc as NotesDocument
Dim uidoc as NotesUIDocument
Dim uidoc_preview as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
Set s = New NotesSession
Set db = s.CurrentDatabase
Set doc_preview = doc.CopyToDatabase(doc.ParentDatabase)
doc_preview.Form = "Preview"
Set uidoc_preview = uiws.EditDocument(True, doc_preview, False)
!! Das aktuelle Dokument (uidoc) wird, wenn es gespeichert wird, zukünftig auch mit der Maske "Maskenname" geöffnet.
Um das zu umgehen kann man ein temporäres Dokument für die Vorschau erstellen:
Dim db as NotesDatabase
Dim doc as NotesDocument
Dim doc_preview as NotesDocument
Dim s as NotesSession
Dim uidoc as NotesUIDocument
Dim uidoc_preview as NotesUIDocument
Dim uiws as NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
doc.Form = "Preview"
Set uidoc_printpreview = uiws.EditDocument(True, doc, False)
Habe den letzten Teil in die Aktion eingebaut und es funzt einwandfrei.
Sieht jetzt so aus
Sub Click(Source As Button)
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim doc_preview As NotesDocument
Dim s As NotesSession
Dim uidoc As NotesUIDocument
Dim uidoc_preview As NotesUIDocument
Dim uiws As NotesUIWorkspace
Set uiws = New NotesUIWorkspace
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
doc.Form = "BerichtDeutsch"
Set uidoc_printpreview = uiws.EditDocument(True, doc, False)
If Not uidoc.editmode Then uidoc.editmode = True
uidoc.document.Number = GenerateSequentialNumber( profileNumberForm_Main$ )
Call uidoc.save
Call uidoc.Close
End Sub
Danke für die Hilfe.
Gruß Bernd
So habe mich gerade mal wieder mit meinem Problem befassen können.
Der Code des Scriptes für den NummernGenerator ist:
' Assignes a unique number and formats it according to prefs. defined in profileNumber
' profileNumber is NOT and in-memory profile document
' Inputs -
' The name of the form to be assigned a number
' Returns-
' a sequential number
' Calls-
' MaskNumber, CreateProfileSequential
Function GenerateSequentialNumber( formName$ ) As String
Dim s As New notessession
Dim doc As notesdocument
Dim viewNumber As notesview
Dim bSaved As Integer ' acts as semaphor
Dim tries%, delay% ' record locking
Dim num%, newnum% ' current and next number
Dim currentYear%, currentMonth%, currentDay% ' today in numbers
Dim txtYear$, txtMonth$, txtDay$ ' today in text
Dim proNum%, proYear%, proMonth%, proDay% ' last vals (in profileNumber)
Dim mask$, resetNum$ ' formatting (in profileNumber)
Dim maskedNewNum$ ' the final result
Dim n As New notesname( s.currentdatabase.server )
Dim srv$
srv$ = n.abbreviated
If srv$ = "" Then srv$ = "[Local]" ' cant use blank as key
On Error Goto errorHandling
Set viewNumber = s.currentdatabase.getview( lookSequentialNumber$ ) ' lookup view
bSaved = False
currentYear% = Year( Today )
currentMonth% = Month( Today )
currentDay% = Day( Today )
tries% = 1
' Loop while document profileNumber is not saved
' If another user has the document open then it can not be saved.
' Aborts after 10 tries and returns 0000 as number
While bSaved = False
profileID$ = formName$ & "_" & srv$ ' key
Set doc = viewNumber.getdocumentbykey( profileID$ )
' Exit if no number setup document
[b]If doc Is Nothing Then Error 4001, "No sequential number setup document"[/b]
' if disabled then return blank
If doc.mask(0) = "DISABLED" Then
GenerateSequentialNumber = ""
Exit Function ' exit
End If
If Not doc.hasitem("Year") Then ' extra precautions
doc.Year = currentYear%
doc.Month = currentMonth%
doc.Day = currentDay%
End If
' Get settings from profile document
proNum% = doc.Number(0)
num% = proNum%
proYear% = doc.Year(0)
proMonth% = doc.Month(0)
proDay% = doc.Day(0)
mask$ = doc.Mask(0)
ResetNum$ = doc.Reset(0)
' Year
If proYear% <> currentYear% Then doc.year = currentYear%
txtYear$ = Cstr( currentYear% )
' Month
If proMonth% <> currentMonth% Then doc.month = currentMonth%
If currentMonth% < 10 Then txtMonth$ = "0" & Cstr(currentMonth%) Else txtMonth$ = Cstr(currentMonth%)
' Day
If proDay% <> currentDay% Then doc.day = currentDay%
If currentDay% < 10 Then txtDay$ = "0" & Cstr( currentDay% ) Else txtDay$ = Cstr( currentDay% )
' Reset
Select Case ResetNum$
Case "N" : num% = proNum% ' never
Case "Y" : If proYear% = currentYear% Then num% = proNum% Else num% = 0 ' year
Case "M" : If proMonth% = currentMonth% Then num% = proNum% Else num% = 0 ' month
Case "D" : If proDay% = currentDay% Then num% = proNum% Else num% = 0 ' day
End Select
newnum% = num% + 1 ' set new number
' Mask (format) the new number
maskedNewNum$ = MaskNumber( newnum%, mask$, txtYear$, txtMonth$, txtDay$ )
' Try to save doc
doc.Number = newnum%
bSaved = doc.save( False, False )
If bSaved = False Then
Set doc = Nothing ' release to prevent deadlock
tries% = tries% + 1
If tries% > 10 Then
' make sure we dont end up in an indefinate loop
Print msgBarTimedOut$
GenerateSequentialNumber = "0000" ' exit and return 0000
Exit Function
Else
For delay% = 1 To 10000
' wait
' redo the whole thing again
Next
End If
Else
Print "Number assigned: " & maskedNewNum$
End If
Wend ' while bSaved = false
'*** New number has been generated and document profileNumber saved
GenerateSequentialNumber = maskedNewNum$
Exit Function
errorHandling:
Print "SequentialNumber.GenerateSequentialNumber reports:"
Print Err & " " & Error$
Print "Sequential Number Generator Failed"
GenerateSequentialNumber = "0000"
Exit Function
End Function
Habe mal den Debugger laufen lassen.
Bis hier geht alles reibunglos: If doc Is Nothing Then Error 4001, "No sequential number setup document" und dann springt er zum ende "errorHandling"
und schmeißt mir dann die "0000" aus als Nummer
Profildokument ist eingerichtet etc. Wie gesagt local hat das ganze gut funktioniert.