Domino 9 und frühere Versionen > ND8: Entwicklung

Richttextitem wird zusätzlich angelegt

(1/2) > >>

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