Domino 9 und frühere Versionen > ND6: Entwicklung
Speichern von ProfileDocumenten
stitze:
Hallo liebes Notes Forum,
ich habe ein Problem mit einem ProfilDocument. Ich möchte auf diesem dynamisch eine Tabbed Tabelle erzeugen.
Ich hole mir die Referenz auf das Document wie folgt
--- Code: ---Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
--- Ende Code ---
Im ProfilDocument gibt es nun eine Hotspotschaltfläche, über diese in einem RichTextFeld eine TabbedTabelle erzeugt, bzw. falls die schon existiert eine Spalte angehangen wird.
--- Code: ---If Not rtnav.FindFirstElement( RTELEM_TYPE_TABLE ) Then
Redim strGremium( 0 ) As String
strGremium( 0 ) = Inputbox( "Neues Gremium" )
Call uidoc.FieldSetText( "greGremien", strGremium( 0 ) & ";" )
Call rtf.AppendTable( rows, columns, strGremium )
Else
Set rtt = rtnav.GetElement
Call rtt.AddRow( 1, rtt.RowCount )
...
--- Ende Code ---
Nun ist das erste Problem das füllen der Tabüberschriften, hierfür habe ich ein verstecktes Feld angelegt greGremium, in welchem die bisherig angelegten Gremien (also Tabs) hinterlegt sind. Diese lese ich dann aus und speichere diese in einem Array, welchen ich dann der Eigenschaft RowLabels der NotesRichTextTabelle übergeben kann.
--- Code: --- strGremienList = uidoc.FieldGetText( "greGremien" )
While Not Instr( intBeginPos, strGremienList, ";" ) = 0
strGremium( i ) = Mid( strGremienList, intBeginPos, Instr( intBeginPos, strGremienList, ";" ) - 1 )
intBeginPos = Instr( intBeginPos, strGremienList, ";" ) + 1
i = i + 1
Redim Preserve strGremium( i )
Wend
strGremium( i ) = Inputbox( "Neues Gremium" )
rtt.RowLabels = strGremium
End If
--- Ende Code ---
Als letztes kommt dann die in diesem Forum verbreitete Methode des Forenmitgliedes ATA zum Einsatz um das Dokument zu schließen und wieder zu öffnen.
--- Code: --- Call ReOpen( doc )
--- Ende Code ---
Aber nach Aufruf dieser Funktion ist die Tabelle des RichTextFeldes verschwunden, ebenso wie die Werte im Feld greGremium. Ausserdem lässt sich nach Anlegen der Tabelle die Hotspotschaltfläche nicht nocheinmal betätigen, folgender Fehler tritt auf
--- Zitat ---Illegal function call
--- Ende Zitat ---
Lotus Notes geht nochnicht einmal in den Debugger an dieser Stelle.
Wo liegt der Fehler den ich begangen habe, ich vermute mal, das es mit der Tatsache zusammen hängt, das ich hier ein ProfileDocument bearbeite, sitze aber schon seit heute morgen an dem Prob, weiss einfach nicht mehr weiter, das micht mich langsam kirre, danke für eure Hilfe.
Hier nocheinmal der komplette Quelltext der Hotspotschaltfläche (ohne Exception Handling ;))
--- Code: ---Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim rtf As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtt As NotesRichTextTable
Dim strGremium() As String
Dim strGremienList As String
Dim rows As Integer
Dim columns As Integer
Dim intBeginPos As Integer
Dim i As Integer
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set rtf = doc.GetFirstItem( "greDynamicTable" )
Set rtnav = rtf.CreateNavigator
rows = 1
columns = 1
i = 0
If Not rtnav.FindFirstElement( RTELEM_TYPE_TABLE ) Then
Redim strGremium( 0 ) As String
strGremium( 0 ) = Inputbox( "Neues Gremium" )
Call uidoc.FieldSetText( "greGremien", strGremium( 0 ) & ";" )
Call rtf.AppendTable( rows, columns, strGremium )
Else
Set rtt = rtnav.GetElement
Call rtt.AddRow( 1, rtt.RowCount )
strGremienList = uidoc.FieldGetText( "greGremien" )
While Not Instr( intBeginPos, strGremienList, ";" ) = 0
strGremium( i ) = Mid( strGremienList, intBeginPos, Instr( intBeginPos, strGremienList, ";" ) - 1 )
intBeginPos = Instr( intBeginPos, strGremienList, ";" ) + 1
i = i + 1
Redim Preserve strGremium( i )
Wend
strGremium( i ) = Inputbox( "Neues Gremium" )
rtt.RowLabels = strGremium
End If
Call ReOpen( doc )
End Sub
--- Ende Code ---
jor:
Hi stitze,
ich habe dein Code und die Frage überflogen, und kenne nicht die von ATA zur Verfügung gestellte Funktion, aber das problem wird dort liegen, das dein Dokument beim Reload nicht die
Richtext-Feldinformationen aktualisiert bzw refresht. Ist so bei RichText-Feldern, bin auch mal darüber gestolpert. Abhilfe wäre, wenn du das Dokument wirklich schliesst und dann wieder öffnest, dei feldwerte sollten dann wie gewünscht vorhanden sein und angezeigt werden.
stitze:
Hier die von ATA entwickelte ReLoad( NotesDocument ) Methode
--- Code: ---Function ReOpen(docThis As NotesDocument) As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim dbThis As NotesDatabase
Dim unid As String
ReOpen = 0
Set dbThis = docThis.ParentDatabase
Call docThis.Save(True , True)
unid = docThis.UniversalID
docThis.SaveOptions = "0"
Set uidoc = ws.CurrentDocument
Call uidoc.Close
Set docThis = dbThis.GetDocumentByUNID(unid)
Set uidoc = ws.EditDocument(True , docThis)
Set docThis = uidoc.Document
If docThis.HasItem("SaveOptions") Then
docThis.RemoveItem("SaveOptions")
Call docThis.Save( True , True )
End If
ReOpen = 1
End Function
--- Ende Code ---
jor:
Hhhm, so im Moment sehe ich nicht warum es nicht funtzen sollte.
Kannst du mal versuchen, ohne die Routine auszukommen, also die Bearbeitung machen
und dann das Doc manuell öffnen? Sieht dann alles wie gewünscht aus?
Axel:
Das Problem liegt nicht in ATA's Funktion ReOpen.
Das Problem liegt hier:
...
While Not Instr( intBeginPos, strGremienList, ";" ) = 0
strGremium( i ) = Mid( strGremienList, intBeginPos, Instr( intBeginPos, strGremienList, ";" ) - 1 )
intBeginPos = Instr( intBeginPos, strGremienList, ";" ) + 1
i = i + 1
Redim Preserve strGremium( i )
Wend
...
Ich hab das mal auf die Schnelle bei mir nachgestellt und bin kurz mit dem Debugger drüber.
Beim ersten Aufruf von Instr ist intBeginPos 0, deshalb der Fehler.
Du musst die gesamte Schleife überarbeiten, denn wenn ich intBeginPos am Anfang mit 1 initialisiere, fliegt er mir dann mit dem Fehler Subscript out of Range aus der Kurve und zwar in der Zeile:
strGremium( i ) = Mid( strGremienList, intBeginPos, Instr( intBeginPos, strGremienList, ";" ) - 1 )
Ich hab im Moment leider nicht die Zeit mich näher damit zu beschäftigen, aber vielleicht bringt dich die Split-Funktion weiter.
Axel
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln