Domino 9 und frühere Versionen > ND6: Entwicklung

Speichern von ProfileDocumenten

(1/3) > >>

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