Open the menu

    Upload Múltiplo de Arquivos

    Para permitir upload mútiplo de arquivos no LumisXP foi desenvolvido um controle específico.

    Este controle utiliza como parte da solução de front-end diversos plugins como: uploadify versão 2.1.4 (http://www.uploadify.com/), Modernizr versão 2 (http://modernizr.com/), JQuery File Upload (http://aquantum-demo.appspot.com/file-upload).

    Requisitos

    Ter o LumisXP Java 6.1 ou posterior.

    O Plugin exige como configuração mínima:

    • JQuery 1.6.2 ou posterior;
    • swfObject 2.2 ou posterior;
    • Flash Player 9.0.24 ou posterior, sendo este último necessário no lado do cliente;

    Funcionamento

    Os arquivos são enviados separadamente, uma requisição para cada arquivo, e são processados de maneira concorrente, criando-se um arquivo temporário para cada arquivo inserido na lista de uploads. Note-se que caso não seja executado o processAction de confirmação, os arquivos não serão associados ao repositório, sendo os mesmos (arquivos temporários) eliminados por um outro processo assíncrono.

    Apenas arquivos que estão na lista no momento da confirmação são associados ao repositório.

    Podem ser associadas outras informações a cada arquivo, ou ao grupo de arquivos.

    Para que a persistência ocorra corretamente é necessário utilizar e configurar o processAction de adição múltipla de forma apropriada.

    Limitações

    Este controle mantém estado, contudo os arquivos já enviados só serão eliminados, conforme mencionado anteriormente, por um processo assíncrono de limpeza. Caso a interface que contenha o controle de upload múltiplo contenha outros controles que possam disparar ações de redenrAction, fica a cargo da solução fazer o controle da sincronização de uploads em andamento e as ações de renderAction.

    Em uma mesma lista para upload, não é possível inserir arquivos com o mesmo nome mais de uma vez, ainda que não seja o mesmo arquivo.

    Se houver informações extras associadas ao arquivo, estes poderão ser validados por processActions ou por alguma implementação client-side da solução. Hoje o controle não realiza verificações além da checagem de uploads em andamento no momento de uma tentativa de disparar uma ação de ProcessAction.

    Comportamento do controle

    Fluxo padrão:

    • Acessar a tela que contenha o controle;
    • Clicar em adicionar;
    • Selecionar quantos arquivos desejar;
    • Clicar em selecionar;
    • Este processo pode ser repetido indefinidamente.
    • Inserir informações extras, se for o caso;
    • Clicar em confirmar.

    Processo detalhado:

    • Ao Selecionar um arquivo, verifica-se se outro arquivo de mesmo nome já existe na lista;
    • Se não existir na lista um arquivo com o mesmo nome, um arquivo temporário é criado no servidor;
    • Em cada upload é validado se:
      • Se a sessão está aberta;
      • Se o usuário tem permissão para visualizar a instância de serviço;
      • Se o usuário tem permissão para realizar upload;
      • Se o arquivo respeita o limite de tamanho máximo de arquivos para upload.
    • Senão uma mensagem é enviada ao usuário, informado que este arquivo não pode ser incluído e ele é excluído da lista.

      Este processo se aplica a cada arquivo inserido na lista.

    • Se houver informações extras associadas ao arquivo a serem preenchidas, estas são disponibilizadas de acordo com cada sub-controle definido no controle de upload múltiplo (douidefinition.xml);
    • Caso algum desses campos seja obrigatório é de responsabilidade da solução realizar a validação.
    • Caso não haja mais informações a serem preenchidas, ao clicar em confirmar, um processAction desenvolvido especificamente para a adição de múltiplos arquivos é chamado, executando a inclusão de cada arquivo e suas respectivas informações, criando um arquivo no repositório de arquivos.
    • Este processAction pode ser Content (incluindo meta dados do Lumis) ou apenas Table, sem meta dados.
    • Os arquivos temporários são apagados por um processo assíncrono, disparado em intervalos de tempos pré-determinados.

    Uso do controle em uma interface

    • Um nó no processAction (multiFileUploadControlId) deve informar o Id do controle de MultiFileUpload ambos (processAction e controle de múltiplo upload) devem estar associados ao mesmo repositório que o controle;
    • No caso deste repositório ter outros campos além do arquivo, os campos que estiverem como visíveis para a interface que contém o controle de MultiFileUpload é possível definir subcontroles no controle de upload múltiplo para tratar os demais campos do repositório para cada arquivo;

    Transformação de uma tela de adição em uma tela de adição múltipla

    lumis.services.general_features.multiple_file_upload_001
    Tela original de Adição de Imagem
    lumis.services.general_features.multiple_file_upload_002
    Tela de Adição de Múltiplos arquivos
    lumis.services.general_features.multiple_file_upload_003
    Adição em andamento

    Alterações:

    ServiceDefinition:

    Inserida nova interface apenas:

    Douidefinition:

    Partindo da interface de Adição original, mudanças:

    • Source:
    • Interface de adição original:
    • Interface de adição múltipla:

    Em Adicionar Multiplos

    • Corpo da interface:
    • Interface de adição original:
    • Interface de adição múltipla.
    • ProcessActions:
    • Interface de adição original:
    • Interface de adição múltipla:

    Customização do controle de Upload Multiplo

    O controle de múltiplos uploads poderá ser customizado nas soluções de acordo com a necessidade dos usuários. As imagens dos botões (Adicionar, Limpar e Excluir) poderão ser personalizadas através de nós no controle de upload múltiplo. Abaixo segue os nós de customização dos botões:

    Além dos botões as mensagens também poderão ser customizadas. Abaixo segue os nós de customização das Mensagens:

    Como foi ilustrado nas seções anteriores, é possível criar sub-controles, que serão renderizados para cada arquivo anexo, através da definição do nó “controls” no controle de upload múltiplo.

    Além das customizações mencionadas acima, também é possível customizar a folha de estilos utilizado pelo controle, desta forma o usuário basta identificar quais são as classes CSSs utilizadas em cada elemento HTML gerado pelo controle e definir novos estilos para eles.

    É importante destacar que os sub-controles definidos no controle de upload múltiplo não suportam validação de conteúdo. Desta forma todos os Fields do source utilizado pelos subcontroles, que são obrigatórios, deverão ser validados através de ProcessActions.

    Abaixo é apresentado as estrutura do XML produzido pelo controle de upload mútiplo.

    Abaixo é apresentado as estrutura do XML produzido pelo controle de upload mútiplo.

    Customização do layout do controle de upload múltiplo

    Para customizar o layout do upload múltiplo o usuário pode customizar um dos templates relacionados abaixo ou redefinir alguma classe utilizada pelo controle.

    <xsl:template name="multFileUploadSupportedVersionHTML4Content"/>

    <xsl:template name="multFileUploadSupportedVersionFlashContent"/>

    <xsl:template name="multFileUploadSupportedVersionHTML5Content"/>

    <xsl:template name="multFileUploadTemplateUploadHTML5"/>

    <xsl:template name="multFileUploadTemplateCompleteWithErrorHTML5"/>

    <xsl:template name="multFileUploadTemplateCompleteWithSuccessHTML5"/>

    Abaixo é apresentado um exemplo de customização do layout do controle de upload múltiplo no repositório de imagens.

    Abaixo é apresentado as estrutura do XML produzido pelo controle de upload mútiplo.

    O resultado da customização pode ser visto na imagem abaixo.

    lumis.services.general_features.multiple_file_upload_004
    Resultado da customização