Domino 9 und frühere Versionen > ND8: Entwicklung
Richttextitem wird zusätzlich angelegt
marschul:
Hallo,
ich habe gerade folgendes Problem:
In einer Anwendung gibt es sogenannte Vorgänge quasi als Deckblatt für verknüpfte Dokumente (Verknüpfung erfolgt über Sammlung von IDs in einem Feld). Zu bestimmten Fälligkeiten werden diese Vorgänge beendet und mit neuen Fälligkeiten neu angelegt. Dabei soll der Inhalt eines Richtextfeldes ("Bemerkung") weitervererbt werden, wobei es sich um Richtextinhalte verschiedener alter Vorgänge in einem neuen Vorgang handeln kann.
Hier ein Auszug aus der Methode:
--- Code: ---With oAktDoc 'aktuelles Dokument
If Not .IsUIDocOpen Then 'Methode wird auch aus dem Frontend heraus verwendet, folgender Code soll dann aber nicht ausgeführt werden, sondern nur bei täglicher Hintergrundaktualisierung (wg. Richtext & Frontend / Backend = nicht so einfach)
Dim oAktivDocOLD As NotesDocument, oVorgangDocOLD As NotesDocument
Dim oBemerkungOLD As NotesRichTextItem, oBemerkungNEW As NotesRichTextItem
Dim bRTvorhanden As Boolean
For n = 0 To Ubound(oAryDoc) 'oAryDoc ist eine Liste von Notes-Dokumenten, die mit dem aktuellen Vorgang verknüft sind
On Error Resume Next
Set oAktivDocOLD = oDB.GetDocumentByUNID(oAryDoc(n).DocUniqueID_Master_Old(0))
If Not oAktivDocOLD Is Nothing Then _
Set oVorgangDocOLD = oDB.GetDocumentByUNID(oAktivDocOLD.DocUniqueID_Master(0))
On Error Goto processError
If Not oVorgangDocOLD Is Nothing Then
If .UniversalID <> oVorgangDocOLD.UniversalID Then
'Prüfen, ob Daten des OldVorgangs bereits übernommen (dazu wird eine Liste im akt. Vorgang geführt)
bRTvorhanden = False
If .hasitem("DocUniqueID_UebernBem") Then
If Not Isnull(Arraygetindex(.DocUniqueID_UebernBem, oVorgangDocOLD.UniversalID)) Then _
bRTvorhanden = True
End If
If Not bRTvorhanden Then
Set oBemerkungOLD = oVorgangDocOld.GetFirstItem("Bemerkung")
Set oBemerkungNew = .getfirstitem("Bemerkung")
If Not oBemerkungOLD Is Nothing Then
If oBemerkungOLD.Type = 1 And oBemerkungOLD.Text <> "" Then
If oBemerkungNew Is Nothing Then
Set oBemerkungNew = .createrichtextitem("Bemerkung")
Else
If oBemerkungNew.Text <> "" Then oBemerkungNew.AppendText(Chr(13) & Chr(13))
End If
If oVorgangDocOLD.BemerkungLinkSetzen(0) = "1" Then 'Die Anwender können in den Vorgängen bestimmen, ob auch ein DocLink im neuen Vorgang eingetragen werden soll
oBemerkungNew.AppendText "Bemerkung aus Vorgang " & oVorgangDocOld.VorgangNr(0) & "/" & _
oVorgangDocOld.TeilNr(0) & " "
oBemerkungNew.AppendDocLink oVorgangDocOld, "zum Vorgang..."
oBemerkungNew.AppendText ":" & Chr(13)
.BemerkungLinkSetzen = "1"
End If
oBemerkungNew.AppendRTItem oBemerkungOld
If .hasitem("DocUniqueID_UebernBem") Then
.DocUniqueID_UebernBem = Fulltrim(Arrayunique(Arrayappend(.DocUniqueID_UebernBem, oVorgangDocOLD.UniversalID)))
Else
.DocUniqueID_UebernBem = oVorgangDocOLD.UniversalID
End If
End If
End If
End If
End If
End If
Next
End If
End With
--- Ende Code ---
Jetzt habe ich leider festgestellt, dass ich gelegentlich zwei oder mehr Richtextfelder "Bemerkung" im neuen Vorgangsdokument habe (sichtbar in Eigenschaften Dokument), das erste leer (stammt vermutlich aus der Maske i.V.m. computewithform) und (ein) weitere(s) mit dem übernommen Inhalt. Eigentlich wird .createrichtextitem("Bemerkung") ja nur ausgeführt, wenn das Feld vorher über .getfirstitem nicht gefunden wurde.
Jemand eine Idee, was ich hier übersehen habe? DANKE!
EDIT 26.05.2011 11:05 Daumen hoch
Peter Klett:
Wenn im geöffneten Dokument alles korrekt angezeigt wird, kannst Du die weiteren Richtextfelder ignorieren. Sowas habe ich in meinen Anwendungen schon seit Jahren immer wieder, ohne dass es zu irgendeinem Problem gekommen ist. Ich denke, es ist die notesinterne Verwaltung der Richtextfelder, die sowas produziert und dann auch damit umgehen kann.
marschul:
Hallo Peter,
das stimmt: Wenn ich ein solches Dok im Client öffne und speichere, existiert anschließend nur noch ein Bemerkungsfeld mit den korrekten Inhalten.
Was in der Praxis nicht vorkommen sollte (obwohl, bei den Spezialitäten im Fachbereich weiß man ja nie...), aber theoretisch denkbar: Wird ein solches Vorgangsdokument nicht angefasst und zu seiner Fälligkeit automatisch beendet, entsteht wieder ein Folgedokument. Dann würde die Routine über .getfirstitem im alten Vorgang (wahrscheinlich???) nur das erste Bemerkungsfeld finden und das ist leider leer. D.h. die Vererbung klappt nur beim ersten Mal. Dumm an der Sache: Das lässt sich nicht eben mal schnell simulieren, da alles ziemlich komplex :(
Peter Klett:
Das solltest Du mal provozieren und ausprobieren. Ich könnte mir gut vorstellen, dass Notes auch bei mehreren gleichnamigen Richtextfeldern in der Felderliste mit .GetFirstItem klar kommt.
koehlerbv:
Natürlich funktioniert NotesDocument.GetFirstItem auch bei mehreren Items gleichen Names. Peter. Und deshalb heisst es auch "Get*First*Item.
Und Notes legt selbst mehrere RT-Items gleichen Namens nur dann automatisch an, wenn die 64kB-Grenze geknackt wird. Alles andere verursacht der Programmierer ;)
Bernhard
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln