Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
mauriciolauffer
Contributor

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: