Das Speichern der FNP8 Annotation erfolgt in mehreren Schritten:
-
Alle Annotationen vom Dokument in ein Datenobjekt schreiben (Codebsp. 1)
-
Datenobjekt erneut laden um die neu angelegten / geänderten / gelöschten Annotationen ermitteln (Codebsp. 2)
-
Neu angelegte / veränderte Annotationen ins Archiv speichern, gelöschte anhand der Annotation ID aus dem Archiv entfernen, unveränderte Annotation müssen nicht gespeichert werden (siehe FileNet P8 API).
Codebeispiel 1:
FNP8AnnotationWriter writer = new FNP8AnnotationWriter(); DefaultWriterControls controls = new DefaultWriterControls(); writer.write(<<Document-Instanz>>, <<Outputstream>>, controls);
Um an die einzelnen Annotationen zu kommen und deren Zustand zu ermitteln, muss die die FNP8AnnotationOutput-Klasse verwendet werden.
Codebeispiel 2:
FNP8AnnotationOutput output = new FNP8AnnotationOutput(<<Datenobjekt-Inputstream>>); // Unveränderte Annotationen für alle Seiten org.w3c.dom.Document[] annotationsUmodified = output.getUnmodifiedAnnotations(); //Veränderte Annotationen org.w3c.dom.Document[] annotationsModified = output.getModifiedAnnotations(); //Hinzugefügte Annotationen org.w3c.dom.Document[] annotationsAdded = output.getAddedAnnotations(); //Gelöschte Annotationen org.w3c.dom.Document[] annotationsDeleted = output.getDeletedAnnotations();
Die einzelnen Annotationsobjekte sind nun verfügbar (in DOM-Struktur), jetzt müssen je nach Änderung / Zustand noch Anpassungen an den Attribute vorgenommen werden.
-
Erstell-/ Änderungsdatum anpassen, nur bei neu angelegten und geänderten Annotationen nötig:
// Aktueller Zeitstempel holen long timestamp = System.currentTimeMillis(); //Setzen des Erstelldatums (nur für neu angelegte Anntationen nötig) FNP8AnnotationXMLUtils.setEntryDate(<<Annotation>>, timestamp); //Setzen des Modifikationsdatums FNP8AnnotationXMLUtils.setModifyDate(<<Annotation>>, timestamp);
-
Annotation-ID (F_ID und F_ANNOTATEDID Attribute) zum Speichern / Löschen ermitteln:
-
Geänderte / gelöschte Annotationen besitzen bereits eine ID, diese kann aus der DOM-Struktur ermittelt werden:
String id = FNP8AnnotationXMLUtils.getAnnotationID(<<Annotation>>);
-
Neu angelegte Annotationen besitzen noch keine ID, diese muss aus dem Archiv ermittelt und gesetzt werden:
FNP8AnnotationXMLUtils.setAnnotationID(<<Annotation>>, <<Neue ID>>);
Die oben genannten ID's dann als Referenz zum Speichern der Annotation im Archiv verwenden (siehe FileNet P8 API).
-
-
Der Seitenindex der Annotation muss in der Regel nicht angepasst werden.
Wird jedoch die Dokumentstruktur verändert und ins Archiv gespeichert, muss der Annotationsseitenindex (F_PAGENUMBER und F_MULTIPAGETIFFPAGENUMBER Attribute) entsprechend angepasst werden:
// Setzen des Seitenindex für das Attribut F_PAGENUMBER (Dokument Nummer) FNP8AnnotationXMLUtils.setPageNumber(<<Annotation>>, <<Index>>); // Setzen des Seitenindex für das Attribut F_MULTIPAGETIFFPAGENUMBER (Seitennummer innerhalb des Dokuments) FNP8AnnotationXMLUtils.setMultiPageTiffPageNumber(<<Annotation>>, <<Index>>);
Die angepasste Annotation DOM-Struktur muss jetzt noch ins XML-Format geschrieben werden und kann ins Archiv gespeichert werden.
// Annotation DOM-Struktur ins XML-Format schreiben ByteArrayOutputStream os = new ByteArrayOutputStream(); FNP8AnnotationXMLUtils.write(os, <<Annotation>>); // XML-Daten in Byte-Array, ins Archiv speichern byte[] xmlAnnoData = os.toByteArray();
FNP8AnnotationWriterSettings
Konfiguration:
-
setEncoding(String)
(Default = "UTF-8")Encoding der XML-Annotationsdaten.
-
setUseUnicodeTextEncoding(boolean)
(Default =true
)Bei der Einstellung
true
werden die Textzeichen in Unicode-Schreibweise geschrieben (zum Beispiel wird "ABC" nach "004100420043" konvertiert). Bei der Einstellungfalse
werden die Textzeichen entsprechend dem Encoding direkt geschrieben.