Autor Thema: Attachments per JavaServlet anhängen / embedObject  (Gelesen 9225 mal)

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Hallo zusammen, ich stehe vor einem Rätsel und hoffe, dass mit vielleicht jemand weiterhelfen kann.

Zuerst mal die Situation: Es geht darum, mittels eines JavaServlets Daten aus einer SQL-Datenbank in eine Notesdatenbank zu übertragen. Dabei werden sowohl Texte, als auch Dateien übertragen. Die übertragung der Texte funktioniert einwandfrei, aber beim Anhängen der Dateien wirds mysteriös.

Es sind 4 pdf-Dateien, die in ein RichTextFeld eingefügt werden sollen. Das Interessante ist allerdings, 3 Anhänge werden unter das Dokument gehängt, wie ein normales Attachment, und die letzte Datei wird wie vorgesehen in das RTFeld geschrieben. Es werden jedoch alle 4 Dateien als V2 Attachment eingefügt, d.h. mit dem grauen (unschönen) Symbol.
Woran kann das liegen ?

Das einfügen wird von dem JavaServlet erledigt mittels RTItem.embedObject(...).
Das erstellen des Dokuments, sowie das einfügen der Daten erfolgt, da durch das Servlet, im Backend.

Gibt es eine Möglichkeit, dass alle Attachments an der selben Stelle eingefügt werden ? Nach Möglichkeit in das RTF. Und am besten nicht nur mit dem grauen Symbol.

Ich hoffe mir kan jemand helfen.


Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #1 am: 14.08.08 - 14:04:46 »
kannst du mal deinen Code posten. Ich denke dann kommen wir dem Problem am schnellsten auf die Sprünge.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #2 am: 15.08.08 - 15:12:34 »
Hier ist der Teill der für das einfügen verantwortlich ist....
   
  String filename = "C:/temp/Bewerbung_" + FileName1 + "_" + FileName2 + "." + FiletypCL;
                                System.out.println(filename);
                                File f = new File(filename);
                                f.createNewFile();
                                BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
                                os.write(data, 0, (int)blob.length());
                                os.flush();
                                os.close();
                                is2.close();
                                RichTextItem rtitem = LoNotesDocument.createRichTextItem("PersonFiles");
                                rtitem.embedObject(1454, "", filename, "PersonFiles");
                                rtitem.addNewLine();
                                f.delete();

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #3 am: 18.08.08 - 08:05:54 »
Ich sehe in dem Code nur 1 Attachment, dass angehängt wird, wo ist der Rest. Läuft das in einer Schleife? Auf jeden Fall würde ich mal die 1454 durch EmbeddedObject.EMBED_ATTACHMENT. Zwar wahrscheinlich jetzt nicht das Problem, aber es könnte sonst in Zukunft mal ein Problem werden.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #4 am: 18.08.08 - 11:34:43 »
Der Code ist n bissl arg unsauber, aber da ich ihn so übernommen habe will ich ihn nicht komplett neu schreiben, da er sehr umfangreich ist. Für jedes Attachment gibt es exakt den selben Code nochmal. Wäre zwar durch eine Schleife oder so schöner gelöst gewesen, aber momentan ist es so realisiert. Aber daran kann es ja eigentlich nicht liegen dass es nicht so funktioniert wie es soll.

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #5 am: 18.08.08 - 11:39:40 »
Sorry aber ich denke du musst schon mehr Code liefern. Das Problem wird ja daran liegen, dass der Code eben nicht ganz gleich ist, wenn es einmal nicht funktioniert und einmal schon. Dein Code enthält keine Fehlerprüfung und auch keine Recycle Aufrufe. Machst du die wirklich nicht, oder hast du die auch unterschlagen?

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #6 am: 18.08.08 - 11:41:52 »
Nein, ich habe nichts unterschlagen. Recycle-Aufrufe ?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #7 am: 18.08.08 - 11:44:37 »
Du musst die Notes C++ Backendobjekte nach der Verwendung wieder mit dem Methoden aufruf recycle() löschen. sonst bekommst du schon nach kurzer Laufzeit deines Servlets Probleme mit Memoryleaks. Für genauere Infos suche doch einfach mal nach recycle hier im Forum. Es wurde schon öfters ausführlich diskutiert.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #8 am: 18.08.08 - 11:52:44 »
Ok, werde ich tun. Aber kann es daran liegen, dass die Attachments so eigenartig übertragen werden ? Das merkwürdige ist ja, das nur das letzte Attachment wirklich in das RTF geschrieben wird, der rest nur unten angefügt an das Dokument. Obwohl die Routine für die Attachments immer gleich ist... ich habe es extra verglichen.

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #9 am: 18.08.08 - 11:57:51 »
Sei mir nicht Böse aber Dein code kann einfach so wie du in beschreibst nicht funktionieren. Denn wenn dein Codeblock mehrfach durchlaufen würde, dann wäre das Richtextitem mehrfach da, da du ja immer wieder ein neues erstellst. (Hm wenn ich es mir Recht überlege, eventuell ist dass ja Dein Problem) Also wenn du den Code nicht vollständig posten kannst, aus welchen Grund auch immer wie soll ich Dir helfen?

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #10 am: 18.08.08 - 12:17:17 »
Also hier ist mal der komplette Code der für die Attachments zuständig ist. Es wird schon unterschieden ob bereits einmal durchlaufen wurde. Das wird hier so realisiert, dass die Attachments noch nen Typ kriegen, PDF1-PDF4. Und je nach Typ wird dann unterschieden. Aber am besten du schaust es dir an.

Code
if(LoStrTempType.indexOf("pdf1") != -1)
                        try
                        {
                            LoStrTempFieldValue = "";
                            Blob blob = SqlResult.getBlob(LoStrTempField);
                            InputStream is2 = blob.getBinaryStream();
                            byte data[] = blob.getBytes(1L, (int)blob.length());
                            int length1 = is2.read();
                            if(length1 != -1)
                            {
                                String filename = "C:/temp/Bewerbung_" + FileName1 + "_" + FileName2 + "." + FiletypCL;
                                System.out.println(filename);
                                File f = new File(filename);
                                f.createNewFile();
                                BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
                                os.write(data, 0, (int)blob.length());
                                os.flush();
                                os.close();
                                is2.close();
                                RichTextItem rtitem = LoNotesDocument.createRichTextItem("PersonFiles");
                                rtitem.embedObject(1454, "", filename, "PersonFiles");
                                rtitem.addNewLine();
                                f.delete();
                            }
                        }
                        catch(Exception oe)
                        {
                            System.out.println("Error: Insert of PDF failed:Skip");
                            LoIntOK = 0;
                        }
                    else
                    if(LoStrTempType.indexOf("pdf2") != -1)
                        try
                        {
                            LoStrTempFieldValue = "";
                            Blob blob = SqlResult.getBlob(LoStrTempField);
                            InputStream is2 = blob.getBinaryStream();
                            int length2 = is2.read();
                            if(length2 != -1)
                            {
                                byte data[] = blob.getBytes(1L, (int)blob.length());
                                String filename = "C:/temp/Lebenslauf_" + FileName1 + "_" + FileName2 + "." + FiletypCV;
                                System.out.println(filename);
                                File f = new File(filename);
                                f.createNewFile();
                                BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
                                os.write(data, 0, (int)blob.length());
                                os.flush();
                                os.close();
                                is2.close();
                                if(LoNotesDocument.hasItem("PersonFiles"))
                                {
                                    RichTextItem rtitem = (RichTextItem)LoNotesDocument.getFirstItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                } else
                                {
                                    RichTextItem rtitem = LoNotesDocument.createRichTextItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                }
                                f.delete();
                            }
                        }
                        catch(Exception oe)
                        {
                            System.out.println("Error: Insert of PDF failed:Skip");
                            LoIntOK = 0;
                        }
                    else
                    if(LoStrTempType.indexOf("pdf3") != -1)
                        try
                        {
                            LoStrTempFieldValue = "";
                            Blob blob = SqlResult.getBlob(LoStrTempField);
                            InputStream is2 = blob.getBinaryStream();
                            int length2 = is2.read();
                            if(length2 != -1)
                            {
                                byte data[] = blob.getBytes(1L, (int)blob.length());
                                String filename = "C:/temp/Zeugnisse_" + FileName1 + "_" + FileName2 + "." + FiletypRef;
                                System.out.println(filename);
                                File f = new File(filename);
                                f.createNewFile();
                                BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
                                os.write(data, 0, (int)blob.length());
                                os.flush();
                                os.close();
                                is2.close();
                                if(LoNotesDocument.hasItem("PersonFiles"))
                                {
                                    RichTextItem rtitem = (RichTextItem)LoNotesDocument.getFirstItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                } else
                                {
                                    RichTextItem rtitem = LoNotesDocument.createRichTextItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                }
                                f.delete();
                            }
                        }
                        catch(Exception oe)
                        {
                            System.out.println("Error: Insert of PDF failed:Skip");
                            LoIntOK = 0;
                        }
                    else
                    if(LoStrTempType.indexOf("pdf4") != -1)
                        try
                        {
                            LoStrTempFieldValue = "";
                            Blob blob = SqlResult.getBlob(LoStrTempField);
                            InputStream is2 = blob.getBinaryStream();
                            int length2 = is2.read();
                            if(length2 != -1)
                            {
                                byte data[] = blob.getBytes(1L, (int)blob.length());
                                String filename = "C:/temp/Weiteres_" + FileName1 + "_" + FileName2 + "." + FiletypMore;
                                System.out.println(filename);
                                File f = new File(filename);
                                f.createNewFile();
                                BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(f));
                                os.write(data, 0, (int)blob.length());
                                os.flush();
                                os.close();
                                is2.close();
                                if(LoNotesDocument.hasItem("PersonFiles"))
                                {
                                    RichTextItem rtitem = (RichTextItem)LoNotesDocument.getFirstItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                } else
                                {
                                    RichTextItem rtitem = LoNotesDocument.createRichTextItem("PersonFiles");
                                    rtitem.embedObject(1454, "", filename, "PersonFiles");
                                }
                                f.delete();
                            }
                        }
                        catch(Exception oe)
                        {
                            System.out.println("Error: Insert of PDF failed:Skip");
                            LoIntOK = 0;
                        }  

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #11 am: 18.08.08 - 12:25:17 »
Ok, das ist natürlich schlimm. Ich würde als ersten Schritt empfehlen, die Variable rtitem auf die oberste Ebene zu ziehen und dann nur noch einmal zu belegen beim erstellen. Dann kannst du dir auch die ganzen checks sparen ob das Objet schon da ist. Ich hatte da in dem Bereich schon massive Probleme, da Notes aus mir nicht erklärlichen Gründen RichTextItems erst beim speichern so richtig wieder zugänglich macht. Weiss zwar nicht ob es hier auch von Bedeutung ist, aber ein Versuch ist der minimale Aufwand auf jeden Fall Wert.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #12 am: 18.08.08 - 12:54:01 »
Ok, das heißt, ich leg rtitem ganz oben in die Methode ? Den Check muss ich doch dann trotzdem einmal ausführen, oder ?

Wie meinst du das mit dem speichern ? Was soll ich da am betsen versuchen ?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #13 am: 18.08.08 - 12:57:40 »
Laut Deinem Code musst du den Check dann nicht machen, da du ihn ja beim ersten mal auch nicht machst. Ob das richtig ist oder nicht kannst du nur anhand des restlichen Codes beurteilen. Also einfach mal rtitem ganz oben definieren und erstellen. Und dann das rtitem im Code immer wieder verwenden. Der Code wird dadurch auch gleich mal ein wenig aufgeräumter.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #14 am: 18.08.08 - 13:00:53 »
Ok, vielen Dank, das werde ich gleich ausprobieren. Sollte ich zusätzlich noch irgendwas anderes ausprobieren, wegen speichern o.Ä. ?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #15 am: 18.08.08 - 13:04:28 »
Nein erst mal nur das.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #16 am: 18.08.08 - 13:06:44 »
Wird sofort ausprobiert. Ich danke Ihnen für Ihre schnelle Hilfe. Sie haben sich ja doch ne ganze Weile Zeit genommen.

Vielleicht reicht die kleine Änderung ja schon, um das Problem zu lösen. :)

Offline AbsoluterBeginner

  • Frischling
  • *
  • Beiträge: 20
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #17 am: 18.08.08 - 15:01:25 »
Also, leider hat es keine Veränderung gebracht. Die Attachments werden nach wie vor scheinbar willkürlich gespeichert. Haben Sie evtl. noch eine andere Idee ? Evtl. die Sache mit speichern, dei Sie vorhin erwähnten ?

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #18 am: 18.08.08 - 15:34:41 »
Schade das es nichts gebracht hat. Was heisst den willkürlich. ist es nicht immer das gleiche Attachment das nicht im Richtextfeld aufscheint.

Das mit dem Speichern bezog sich auf die Noteseigenart, dass Änderungen an einem Richtextitem im Backend im Frontent erst nach einem speichern und neuladen des Dokuments sichtbar sind. Das kann aber hier eher keine Rolle spielen.

Ich probier das mit den Attachments mal bei mir schnell aus.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Attachments per JavaServlet anhängen / embedObject
« Antwort #19 am: 18.08.08 - 15:38:52 »
Du kannst noch versuchen, dass RichTextItem nicht über getFirstItem() referenzieren, sondern über New RichTextItem(params). Existiert in der Maske ein RichTextItem mit dem Namen PersonFiles  ???
Ich würd dazu tendieren, die langen if-else-Zweige mit Command Pattern zu ersetzen (http://en.wikipedia.org/wiki/Command_pattern), hat aber nichts mit deinem eigentlichen Problem zu tun. 
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz