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:
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
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.:
<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 ;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