Buenas, pessoas!
Vou tentar ser breve e direto neste blog, pois acredito que possa ajudar bastante.
Ao fazer upload de arquivos usando o componente sap.m.UploadCollection, se precisarmos passar informações adicionais é necessário usar um parâmetro chamado SLUG. Para definir o valor deste parâmetro usamos o componente sap.m.UploadCollectionParameter.
O parâmetro SLUG é usado para passar qualquer tipo de informação, as mais comuns são: nome do arquivo e alguma descrição sobre o arquivo.
Exemplo JS:
var oHeaderParameter = new sap.m.UploadCollectionParameter({
name : "slug",
value : sFilename + "|" + sFileDescription
});
Exemplo XML:
<UploadCollection>
<headerParameters>
<UploadCollectionParameter name="slug" value="Filename.txt|Descrição" />
</headerParameters>
</UploadCollection>
Recentemente tive alguns problemas ao fazer upload de arquivos com o "slug" contendo informações com caracteres especiais. Assim como no exemplo acima, nosso app Fiori/UI5 precisava informar o nome do arquivo e uma descrição. Como o cliente era brasileiro, havia sempre algum caractere especial no meio destas informações.
Apesar de definir a aplicação com codepage UTF-8 e o SAP Gateway + SAP ECC serem unicode, o SLUG sempre vinha com erro nos caracteres especiais.
Exemplo do erro:
"Descrição" era exibido como "Descri��o".
Para corrigir este erro, tive que codificar o valor de SLUG no lado do cliente e decodificar no lado do servidor.
Encode - Client side (*.controller.js):
var oHeaderParameter = new sap.m.UploadCollectionParameter({
name : "slug",
value : encodeURIComponent( sFilename + "|" + sFileDescription )
});
Decode - Server side (SAP Gateway):
CLASS ZCL_xxxxx_DPC_EXT
METHOD /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM
lv_unescaped_val = cl_http_utility=>unescape_url( iv_slug ).
No controller da applicação Fiori/UI5, a função JavaScript encodeURIComponent() é responsável por substituir os caracteres especiais de uma string pela sua representação em UTF-8 (unicode).
No SAP Gateway, o método CL_HTTP_UTILITY=>UNESCAPE_URL() é responsável por fazer o inverso.
Se estivéssemos usando o SAP Fiori com SAP HANA Cloud, poderíamos usar a função JavaScript decodeURIComponent() no arquivo .XSJS que recebe os dados do app para decodificar a string.
Espero que ajude.
Valeu :wink: