@Silke:
Also die Aufgabenstellung sieht wie folgt aus:
In einer Datenbank sollen Dokumente erstellt werden. Dabei gibt es zwei möglichkeiten. Es wird ein neues Dokument erstellt. Dieses neue Dokument erhält eine fortlaufenden Nummer. Diese Nummer wird über die Formel
REM "first doc number";
tempPRText := 1;
tempPRNumber := tempPRText;
REM "all docs after the first and add 1 to increase counter";
tempText:=@Subset(@DbColumn("" : "NoCache"; ""; "($TAEDNR)"; 1); 1);
temp := tempText;
tmpVal:=@If(temp != ""; @Text(@TextToNumber(temp) + 1); @Text(tempPRNumber));
Padded := @Right( "00000000" + tmpVal; 4);
Padded +"_"+@Text(@Year(@Now))
ermittelt.
Möglichkeit 2:
es existiert z.B. ein Dokument mit der Nummer
0005_2002
Wenn der User nun die 2. Möglichkeit wählt ( zu bestehendem Dokument hinzufügen ), soll automatisch an die bereits existierende Nummer in dem neuen (leeren) Dokument ein Buchstabe angehängt werden
also: 0005_2002a
Existieren zu einem RootDocument bereits Unterdokumente, soll der Buchstabe basierend auf den bereits vorhandenen Buchstaben fortlaufend vergeben werden.
hier mein Script, welches dir auch deine Frage beantwortet.
Sub Click(Source As Button)
Dim s As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim col1 As NotesDocumentCollection
Dim doc As NotesDocument
Dim item As NotesItem
Dim ws As New NotesUIWorkspace
Dim selection As String
Dim CharArray As Variant
ImplodedStr$ = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
StrDelimiter$ = ","
CharArray = Evaluate(|@Explode("| & ImplodedStr$ & |";"| & StrDelimiter$ & |")|)
Set db = s.currentdatabase
Set col = db.UnprocessedDocuments
If col.count > 1 Then
Msgbox " es kann nur ein Dokument gleichzeitig bearbeitet werden"
Else
Set doc = col.GetFirstDocument()
Set item = doc.GetFirstItem( "TAEDNR" )
dummy$ = item.text
If Isnumeric (replaceSubstring(dummy$,"_","")) Then
tmp$ = sword(dummy$,"_",1)
selection = "SELECT (@Contains(TAEDNR;" & Chr(34) & tmp$ & Chr(34) & "))"
Set col1 = db.Search( selection, Nothing ,0 )
Set newDoc = db.CreateDocument
dummy$ = dummy$ + CharArray(Col1.count - 1)
Set item = newDoc.ReplaceItemValue("TAEDNR",dummy$)
ws.EditDocument True,newDoc
Else
Msgbox "geht nicht !!"
End If
End If
End Sub
Das Script verwendet noch 2 Unterroutinen
Function ReplaceSubstring(sSource As String, sFrom As String, sTo As String) As String
Dim sResult As String
Dim i As Integer, iLenFrom As Integer, iLenRslt As Integer
i=0
iLenFrom=Len(sFrom)
sResult=sSource
Do While(i < Len(sResult))
i=i+1
If Mid$(sResult, i, iLenFrom ) = sFrom Then
iLenRslt=Len(sResult)
sResult=Left$(sResult, (i-1)) + sTo + Right$(sResult, iLenRslt - ( (i-1) + ( iLenFrom ) ) )
End If
Loop
ReplaceSubstring=sResult
End Function
und
Function sWord ( sourceString As String, separator As String, number As Integer ) As String
searchString$=SourceString & separator ' add one separator to catch also the last substring
For i% = 1 To number
pos%=Instr(searchString$, separator)
If pos%=0 Then Exit For
substring$=Left(searchString$,pos%-1)
searchString$=Mid(searchString$, pos%+1)
Next
If pos% > 0 Then
sWord=substring$
Else
sWord=""
End If
End Function
Das Ganze funktioniert super; es fehlen noch die DAU spezifischen Fehlertexte.
Das "Problem" ist damit gelöst; wollte nur mal wissen, ob jemand noch eine bessere Lösung hat.
eknori