Hmm, verstehe. Um die Dekodierung im Agent durchzuführen müsstest du doch "NUR" folgendes machen:
- 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.:
<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
<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
) 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.htmlSofern du nur HTML-Felder mit diesen Namen verwendest, sehe ich aber kein Problem...
Gruß
Roland