Hello,
I encounter a problem with a RESTXQ application, perhaps someone can help
me?
*Goal:* Download a file with an encoding dependent on a user entry. The
request contains *form parameters*.
*Attempt:*
I can control the encoding using the %output annotation. However, this
annotation must be a literal string, I think. Therefore I tried
*web:forward*, as well as *web:redirect*, thus triggering the execution of
a function with the desired %output declaration.
*Issue:* the form parameters get lost.
How to achieve the goal? Thank you for your advice.
With kind regards,
Hans-Jürgen
declare %output:method("text")
%output:encoding("utf-8")
%rest:path("*/util/download/text*")
%rest:form-param("text", "{$text}", "")
%rest:form-param("file-name", "{$fileName}", "text.txt")
%rest:form-param("encoding", "{$encoding}", "utf-8")
function *f:downloadText*(
$text as xs:string,
$fileName as xs:string,
$encoding as xs:string) {
if ($encoding eq 'cp1252') then *web:forward*('
*/util/download/text-cp1252*')
else ...
declare %output:method("text")
%output:encoding("cp1252")
%rest:path("*/util/download/text-cp1252*")
%rest:form-param("text", "{$text}", "")
%rest:form-param("file-name", "{$fileName}", "text.txt")
function *f:downloadTextCp1252*(
$text as xs:string,
$fileName as xs:string) {
let $text := replace($text, '
', '
')
return (
<rest:response>
<http:response status="200">
<http:header name="Content-Disposition" value='attachment;
filename="{$fileName}"'/>
<http:header name="Content-Language" value="en"/>
<http:header name="Content-Type" value="text/csv; charset=cp1252"/>
</http:response>
</rest:response>,
$text
)
};
PS: The <http:header> seems to be without effect - experiments seemd to
show that I have to use the %output declaration.