Domino 9 und frühere Versionen > ND7: Entwicklung
Anhänge bei Verarbeitung von POST-Daten durch Agenten
FriFra:
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.
pram:
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
FriFra:
--- Zitat von: pram 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
--- Ende Zitat ---
Lies bitte meine ersten Beitrag, dann wirst Du merken das diese "Antwort" in diesem Kontext völliger Unsinn ist! >:D
flaite:
--- Zitat von: FriFra am 02.01.09 - 16:39:04 ---Ich hatte allerdings auf die schnelle keine ScriptLib/Funktion gefunden um diesen "Datenmüll" irgendwie elegant und schnell zu dekodieren...
--- Ende Zitat ---
Such mal nach base64 und LotusScript in google.
Vielleicht könnte auch eine Suche nach file uploads bei codestore.net helfen.
pram:
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>
--- Ende Code ---
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>
--- Ende Code ---
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
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln