Autor Thema: Speichern von ProfileDocumenten  (Gelesen 2695 mal)

Offline stitze

  • Aktives Mitglied
  • ***
  • Beiträge: 226
  • Geschlecht: Männlich
    • kleisterbande
Speichern von ProfileDocumenten
« am: 22.02.06 - 13:16:50 »
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

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 )	

...

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

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 )

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

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
« Letzte Änderung: 02.03.06 - 11:25:31 von stitze »
When i loaded my cap gun , i'm ready for action.

Saying that Java is nice because it works on all OS's is like saying anal sex is nice because it works on all genders.

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern von ProfileDocumenten
« Antwort #1 am: 22.02.06 - 14:12:48 »
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.


Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

Offline stitze

  • Aktives Mitglied
  • ***
  • Beiträge: 226
  • Geschlecht: Männlich
    • kleisterbande
Re: Speichern von ProfileDocumenten
« Antwort #2 am: 22.02.06 - 14:18:31 »
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 
When i loaded my cap gun , i'm ready for action.

Saying that Java is nice because it works on all OS's is like saying anal sex is nice because it works on all genders.

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern von ProfileDocumenten
« Antwort #3 am: 22.02.06 - 15:21:10 »
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?
Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Speichern von ProfileDocumenten
« Antwort #4 am: 22.02.06 - 15:22:06 »
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
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline jor

  • Senior Mitglied
  • ****
  • Beiträge: 258
  • Geschlecht: Männlich
Re: Speichern von ProfileDocumenten
« Antwort #5 am: 23.02.06 - 07:26:35 »
Der Axel wieder ....  ;)

Vereinfacht die Dinge, und ihr erleichtert euch das Leben. (Henry David Thoreau)

In diesem Sinne, viele Grüsse Volker (Jor)

Offline stitze

  • Aktives Mitglied
  • ***
  • Beiträge: 226
  • Geschlecht: Männlich
    • kleisterbande
Re: Speichern von ProfileDocumenten
« Antwort #6 am: 01.03.06 - 11:19:00 »
Danke Axel für deine Hilfe, nach überarbeiteter Schleife funktioniert das ganze, waren zwei Logikfehler drinne, Thx nochma und sorry das ich mich erst so spät bedanke aber Karneval stand da im Weg ;)

Aber ein Problem bleibt, nach Schliessen des Dokumentes und erneutem Öffnen ist die Tabelle verschwunden, hat da jemand noch eine Idee, also meine Vermutung liegt immer noch da, das es sich hier um ein Datenbankprofil Dokument handelt, aber wie gesagt eingentlich kein Plan  ;D

Mfg

Sebastian
When i loaded my cap gun , i'm ready for action.

Saying that Java is nice because it works on all OS's is like saying anal sex is nice because it works on all genders.

Offline stitze

  • Aktives Mitglied
  • ***
  • Beiträge: 226
  • Geschlecht: Männlich
    • kleisterbande
Re: Speichern von ProfileDocumenten
« Antwort #7 am: 01.03.06 - 13:19:09 »
Also das Problem wurde lokalisiert. Es liegt an dem Cachen der Profile Dokumente. Sobald ich den Clienten und Designer und alles schliesse und neu öffne, stimmt das Ergebniss, merkwürdige Geschichte  :-:
When i loaded my cap gun , i'm ready for action.

Saying that Java is nice because it works on all OS's is like saying anal sex is nice because it works on all genders.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Speichern von ProfileDocumenten
« Antwort #8 am: 01.03.06 - 13:26:03 »
Keine merkwürdige Geschichte, sondern vollkommen normal für ProfileDocs. Die Änderung machst Du ja im Backend, während Dein Client das ProfileDoc im FrontEnd im Cache hält.
Genauso geht es anderen Benutzern, die die DB offen haben und auf das ProfileDoc bereits zugegriffen haben. Dieses Verhalten ist auch ausdrücklich so gewünscht.

Bernhard

klaussal

  • Gast
Re: Speichern von ProfileDocumenten
« Antwort #9 am: 01.03.06 - 13:26:40 »
Dieses Verhalten ist nicht merkwürdig, sondern bestimmt schon 100 Mal in diesem Forum erwähnt worden (speziell im Zusammenhang mit der berühmt-berüchtigten Seriennummer).

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Speichern von ProfileDocumenten
« Antwort #10 am: 01.03.06 - 14:21:25 »
... Es liegt an dem Cachen der Profile Dokumente. Sobald ich den Clienten und Designer und alles schliesse und neu öffne, stimmt das Ergebniss, merkwürdige Geschichte  :-:

Keine merkwürdige Geschichte, sondern vollkommen normal für ProfileDocs. Die Änderung machst Du ja im Backend, während Dein Client das ProfileDoc im FrontEnd im Cache hält.
Genauso geht es anderen Benutzern, die die DB offen haben und auf das ProfileDoc bereits zugegriffen haben.

aus genau diesen Gründen ist die Klasse für Userprofile entstanden.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline stitze

  • Aktives Mitglied
  • ***
  • Beiträge: 226
  • Geschlecht: Männlich
    • kleisterbande
Re: Speichern von ProfileDocumenten
« Antwort #11 am: 02.03.06 - 11:25:09 »
Ja Danke nochmal für eure Hilfe, die Klasse ist genau das was mir weiter geholfen hat :-D

When i loaded my cap gun , i'm ready for action.

Saying that Java is nice because it works on all OS's is like saying anal sex is nice because it works on all genders.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz