Autor Thema: Anhänge bei Verarbeitung von POST-Daten durch Agenten  (Gelesen 7754 mal)

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Hallo zusammen,

ich habe in meiner Anwendung ein Form, welches Daten von diversen Dokumenten einer DB gemischt darstellt. Beim Speichern sende ich den Request per Post an einen Agenten, der die jeweiligen Felder (name jeweils [UNID-Ursprungsdokument]_[Feldname]) in die jeweiligen Dokumente updatet. Das funktioniert soweit wunderbar.

Jetzt hab ich allerdings das Problem, dass nun auch Dateien upgeloaded werden sollen. In REQUEST_CONTENT taucht zwar auch der Inhalt meiner <input type=file ..> auf, allerdings nur als Text (Pfad der Datei) und nicht deren Inhalt.
Ich hab jetzt schon geschaut, ob ich im Context-document attachments finden kann... es gibt offenbar keine, d.h. doc.HasEmbeddet liefert mir false und auch ein $File Feld existiert nicht... auch gibt es im Kontext kein entspr. feld...

Hat jemand einen Tipp, wie ich an per POST an einen Agenten übergebene Dateien heran kommen kann? Ich steh da im Moment auf dem Schlauch...
« Letzte Änderung: 17.12.08 - 10:50:02 von FriFra »
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #1 am: 18.12.08 - 12:12:39 »
Ich habe jetzt mal zum Testen einfach eine html-Datei erstellt von der aus ich irgendetwas zu meinem Agenten posten kann und speichere jetzt das Kontext-Dokument.
Interssant ist, die Datei ist NICHT mit dran, nur der Dateiname.

Exportiertes Dokument:
Code
HTTP_ACCEPT:  image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
HTTP_ACCEPT_LANGUAGE:  de
HTTP_CONTENT_TYPE:  application/x-www-form-urlencoded
HTTP_ACCEPT_ENCODING:  gzip, deflate
HTTP_USER_AGENT:  Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
HTTP_HOST:  server1
HTTP_CONTENT_LENGTH:  109
HTTP_CONNECTION:  Keep-Alive
HTTP_CACHE_CONTROL:  no-cache
HTTP_COOKIE:  DomAuthSessId=F414AEEA24DA26D81F219A59890148F7
HTTPS:  OFF
CONTENT_LENGTH:  109
CONTENT_TYPE:  application/x-www-form-urlencoded
PATH_INFO:  /test/test.nsf/agtSaveForm?Open
CGI_PATH_INFO:  /test/test.nsf/agtSaveForm
PATH_TRANSLATED:  /test/test.nsf/agtSaveForm
QUERY_STRING:  Open
QUERY_STRING_DECODED:  Open
REMOTE_HOST:  
REMOTE_ADDR:  192.168.159.1
REMOTE_IDENT:  
REQUEST_METHOD:  POST
SERVER_NAME:  server1
SERVER_PORT:  80
SERVER_PROTOCOL:  HTTP/1.1
SERVER_SOFTWARE:  Lotus-Domino
SERVER_ADDR:  192.168.159.128
AUTH_TYPE:  Domino
REMOTE_USER:  CN=Hans Admin/O=R8Labor
GATEWAY_INTERFACE:  CGI/1.1
SCRIPT_NAME:  
PATH_INFO_DECODED:  /test/test.nsf/agtSaveForm?Open
REQUEST_CONTENT:  Debug=1&testtext=klappt&upload=D%3A%5CDaten%5CEigene+Dateien%5C080922-DIV-Feedback_KK_Seminar+D1-MaE-V1.1.pdf
$UpdatedBy:  CN=Max Mustermann/OU=MUSTERSTADT/O=ACME/C=DE



« Letzte Änderung: 18.12.08 - 12:14:20 von FriFra »
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #2 am: 02.01.09 - 16:07:04 »
soweit ich weiß musst du der HTML-Form einen speziellen Typ geben:
ich glaub enctype="application/x-www-form-urlencoded" oder "multipart/formdata"

danach werden mehrere Felder angelegt und du musst dir das Ganze mühsam selbst auseinanderdröseln....

ODER: Kann es sein das das Feld welches du ausliest ein Richtextfeld ist? Evtl auch mal doc.getAttachment probieren

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #3 am: 02.01.09 - 16:39:04 »
soweit ich weiß musst du der HTML-Form einen speziellen Typ geben:
ich glaub enctype="application/x-www-form-urlencoded" oder "multipart/formdata"
Ja, mit "multipart/formadata" kommt alles mit... aber encoded. Ich hatte allerdings auf die schnelle keine ScriptLib/Funktion gefunden um diesen "Datenmüll" irgendwie elegant und schnell zu dekodieren... Ich hab jetzt einfach einen 2. Form-Tag auf der Seite der die Attachments zu einem echten Form postet was dann wiederum ein OnQuerySave-Agent entspr. verwurstet, so dass diese dann an meinem Dokument hängen.
So gesehen hab ich das Problem "gelöst" ;)

ODER: Kann es sein das das Feld welches du ausliest ein Richtextfeld ist?
Nö, kann nicht ;) , denn ich poste ja eine stinknormale HTML-Seite zum Agenten.
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #4 am: 02.01.09 - 17:34:25 »
also Anhänge kann der Browser soweit ich weiß nur dann posten, wenn der enctype richtig gesetzt ist, allerdings kommt, wie du schon gemerkt hast, ein ziemlicher Datenn"müll" beim Agent an...

Was willst du genau machen?

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #5 am: 02.01.09 - 17:49:37 »
Hab ich doch eingangs schon beschrieben... Ich generiere ein Form aus Daten eines Dokumentes und diverser Antwortdokumente und speichere alles auf einen Schlag über einen Agentem.
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #6 am: 02.01.09 - 18:08:07 »
Probier mal folgendes:

Speichere die Form mit @command([FileSave])

von der Form müsste nun der WebQuerySave Agent aufgerufen werden,
in diesem müsstest du vollen Zugriff auf das (korrekt) gefüllte Dokument haben.
Wichtig ist, dass du dann das (unschöne) File upload Control von Notes verwenden musst.

Da du aber vermutlich nicht willst, das das Dokument so gespeichert wird, musst du in der Maske zus. noch ein "SaveOptions"-Textfeld einfügen, dies berechnest du entweder gleich auf "0" falls es nicht stört oder setzt es im WebQuerySave auf "0" (das Feld muss aber trotzdem in der Maske existieren!)



Gruß
Roland

Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #7 am: 02.01.09 - 18:10:56 »
Probier mal folgendes:

Speichere die Form mit @command([FileSave])

von der Form müsste nun der WebQuerySave Agent aufgerufen werden,
in diesem müsstest du vollen Zugriff auf das (korrekt) gefüllte Dokument haben.
Wichtig ist, dass du dann das (unschöne) File upload Control von Notes verwenden musst.

Da du aber vermutlich nicht willst, das das Dokument so gespeichert wird, musst du in der Maske zus. noch ein "SaveOptions"-Textfeld einfügen, dies berechnest du entweder gleich auf "0" falls es nicht stört oder setzt es im WebQuerySave auf "0" (das Feld muss aber trotzdem in der Maske existieren!)



Gruß
Roland


Lies bitte meine ersten Beitrag, dann wirst Du merken das diese "Antwort" in diesem Kontext völliger Unsinn ist! >:D
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #8 am: 02.01.09 - 20:10:03 »
Ich hatte allerdings auf die schnelle keine ScriptLib/Funktion gefunden um diesen "Datenmüll" irgendwie elegant und schnell zu dekodieren...
Such mal nach base64 und LotusScript in google.

Vielleicht könnte auch eine Suche nach file uploads bei codestore.net helfen.
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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #9 am: 03.01.09 - 15:29:57 »
Hmm, verstehe. Um die Dekodierung im Agent durchzuführen müsstest du doch "NUR" folgendes machen:  :o

- Das REQUEST_CONTENT Feld auslesen (sind mehr als 64K Daten enthalten werden die Felder durchnummeriert: REQUEST_CONTENT_xxx) und in einen String/Stream schreiben

- CONTENT_TYPE auslesen und die "Boundary" ermitteln (da steht z.B.:
"multipart/form-data; boundary=---------------------------275932272513031")

- den Request-Stream an der Boundary splitten. Du erhältst dann für jeden Part (btw. Feld) einen Arrayeintrag (ggf. müssen noch ein paar Sonderfälle betrachtet werden  :-\ )

- die einzelnen Parts müssten wiederum dekodiert werden. Wenn ich mir http://www.faqs.org/rfcs/rfc2388.html ansehe ist dies nicht gerade trivial... Evtl. kann man die NotesMimeEntities irgendwie zur Dekodierung verwenden.

-> relativ hoher Aufwand!

Ich hätte evtl noch eine Lösungansatz, diese öffnet mittels Javascript ein Popup in dem du die Datei hochladen kannst:
(ich gehe jetzt mal davon aus, dass du das HTML für deine bisherige Form komplett selber erzeugst und keine Notes-Felder verwendest)

in deiner Mainform steht z.B.:
Code
<form...>
...
<input type=text name="file_ref"> // kann/sollte hidden sein
<input type="button" value="..." 
  onclick="var win=window.open('uploadForm?OpenForm&field=file_ref','ul-win','width=300,height=200'); win.focus()">
...
</form>

Nun erstellst du dir eine weitere Maske mit Namen uploadForm, diese enthält
- das Feld: QUERY_STRING: (computed for display auf @thisValue, wird benötigt um den &field-Parameter auszulesen)
- ein Notes File upload Control
- einen Save-Button (@command([FileSave]))

Dann noch folgenden Javascript Code als DurchgangsHTML und "HideWhen=@isNewDoc" einfügen
Code
<script type="text/javascript">
window.opener.document.forms[0].<Computed Value>.value="<Computed Value>"
// comp.value1= @Right(QUERY_STRING;"field="), comp.value2= @Text(@DocumentUniqueID)
window.close();
</script>

Klickt der Benutzer auf den "..."-Button, öffnet sich ein Dialog in dem er mit dem Notes-FUC (File Upload Control  ;D ) seine Datei auswählen kann. Klickt er im Dialog dann anschließend auf speichern, so wird der Dialog gespeichert, und im Anschluss das Javascript ausgeführt. Die UNID des gerade gespeicherten Dokuments, welches auch den Anhang enthält wird nun in das Feld "file_ref" geschrieben und der Dialog geschlossen. Speichert der User das Hauptformular, kannst du anschließend mit deinem Agent das/die file_ref Felder auslesen, dir das Dokument holen, das Attachment extrahieren usw.

Einen Nachteil hat diese Lösung allerdings, für jeden Upload wird ein Dokument angelegt, auch dann, wenn der Benutzer nicht auch "Speichern" klickt. Man sollte diese Uploaddokumente ggf. periodisch löschen, wenn sie älter als X Stunden sind.


Weiterhin habe ich noch eine Anmerkung/Hinweis bezüglich deiner Feldnamen, da bei der Verwendung von [UNID]_[Feldname] folgende Probleme auftreten können:

Feldnamen dürfen/sollen nicht länger als 32 Buchstaben sein: http://www.geniisoft.com/showcase.nsf/DominoLimits (funktioniert aber manchmal trotzdem)
Wenn du die Dokumente speicherst, kann die Feldtabelle überlaufen: http://atnotes.de/index.php/topic,37011.0.html

Sofern du nur HTML-Felder mit diesen Namen verwendest, sehe ich aber kein Problem...

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline FriFra

  • Senior Mitglied
  • ****
  • Beiträge: 397
  • Geschlecht: Männlich
Re: Anhänge bei Verarbeitung von POST-Daten durch Agenten
« Antwort #10 am: 03.01.09 - 19:02:54 »
Hallo pram....

genauso hab ichs ja bereist gelöst ;) ... d.h. ich hab einen separaten Form-Tag für den Upload.

Die angesprochene Feldnamen-Längenlimitierung gilt für den Fall nicht, da ich direkt mit den posteddata arbeite, da steht im Prinzip alles in einem riesigen String drin... die UNIDs allein sind ja schon 32 Zeichen lang ;)

An die Dekodierung über NotesMimeEntities hatte ich auch schon gedacht (hab letztens erst im Zusammenhang mit HTML-Mails damit zu tun gehabt), aber ich scheue den damit verbundenen Aufwand. So wie ichs jetzt habe funktioniert es, wenn ich jetzt noch viel umstricken würde, würde es den Projektrahmen sprengen ;)
Gruß
Michael


IBM Certified Advanced Application Developer (PCLP AD 8.5,8,7,6,5)
IBM Certified Associate System Administrator (CLS SA 8.5)
Domino 10.0.1 (Windows Server 2016)
Inventor of the 00.00.200x?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz