Pegando os bytes de um anexo na primeira atividade do processo

Prezados,

Preciso na primeira atividade pegar os bytes de um documento em anexo ao processo. Quando tento utilizar o WS de DOCUMENTOS (getDocumentContent) por ser na primeira atividade retorna a mensagem que o documento não existe. Alguem sabe dizer alguma forma de conseguir isto?

Obrigado!

Já tentou utilizar o método listattachmente da hAPI para ver se lista esses anexos quando movimentar a tarefa? Para que precisa dos bytes desse arquivo?

Claudio, sim. Ele lista os anexos normalmente. Porém como se trata da primeira atividade quando tento pelo webservice o documento ainda não existe.

Preciso pegar algumas informações dentro do anexo.

Mas se ele lista os anexos vc tem como recuperar o content do arquivo, pode postar o código que está executando para essa integração?

Claudio, como eu consigo recuperar o content do arquivo a não ser pelo web service?
Pode me passar o código ? O que eu faco e chamar a partir do dataset o servico do FLUIG. Porém como documento ainda nao existe.

Para vc recuperar o content do arquivo via WS, vc teria que pegar seu anexo tranferir para o ged usando hAPI.publishWorkflowAttachment() tem exemplo aqui hAPI - TOTVS Fluig - TDN e depois pegar o content usando o servico.getDocumentContent() quando o documento já estiver no GED, mas para que precisa do content, só existe essa forma para realizar o que quer?

Claudio, o que eu não queria era transferir para o GED pois pode ser que o arquivo anexado esteja errado.
Eu preciso validar algumas informações dentro do PDF (sempre é um pdf anexado). Então eu pego os bytes do arquivo e dai consigo validar as informações…

Você mencionou pegar os bytes pela API… é Possível? Como você faz? Tem exemplo?

Obrigado!

Não conheço uma forma de pegar essa informação pela API Rest

@Lucas, bom dia!!

Não vai rolar consultar o ws na atividade em que é inserido o anexo, também não funciona transferir para o GED e depois executar o ws ainda na mesma atividade. Tem duas saídas:

  1. Utilizar atividades de serviço automatizadas. Aí nela é consumido o webservice e retornado os bytes e pode tratar os dados do arquivo e caso tenha algum erro ou validação da sua regra de negócio, pode-se dar throw e a solicitação é encaminhada para a atividade configurada no evento de captura de erro. Tenho preferência por essa opção, algo mais padrão da ferramenta.
    1. Caso queira tratar na própria atividade, pode-se utilizar o beforeTaskSave, porém não vai conseguir consumir o ws, pois está na mesma atividade, porém já é possível pegar a URL do documento e assim consegue pegar os bytes do arquivo utilizando java, segue exemplo:

function beforeTaskSave(colleagueId,nextSequenceId,userList){
    importPackage(java.net);
    importPackage(java.io);
    try {

        if (nextSequenceId == 2 && getValue("WKCompletTask").equals("true")) {

            var docs = hAPI.listAttachments();

            for (var i = 0; i < docs.size(); i++) {
                var doc = docs.get(i);

                var bytesBuffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 8192);
                log.info("URL: " + fluigAPI.getDocumentService().getDownloadURL(doc.getDocumentId()));
                var url = new URL(fluigAPI.getDocumentService().getDownloadURL(doc.getDocumentId()));
                var is = url.openStream();

                var baos = new ByteArrayOutputStream(doc.getPhisicalFileSize());
                var len = 0;
                while ((len = is.read(bytesBuffer, 0, bytesBuffer.length)) != -1) {
                    baos.write(bytesBuffer, 0, len);
                }

                var content = baos.toByteArray();

                log.info("content: " + content);


            }
        }
    } catch (e) {
        throw "### Erro beforeTaskSave: " + e;
    }

}

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

@Rodolfo
Boa tarde.

Da mesma forma, quando tento chamar pela API não encontra o arquivo.

EJB Invocation failed on component wdk/DocumentServiceDelegate for method public abstract com.datasul.technology.webdesk.dm.dtos.DocumentDto com.datasul.technology.webdesk.dm.service.DocumentServiceDelegateBI.getActiveDocument(long,java.lang.Integer) throws java.lang.Exception: javax.ejb.EJBException: java.lang.NullPointerException

De qualquer forma obrigado pela sugestão.

Se souber de outra forma que conseguiria fazer isso.

Vou te mandar um exemplo meu que funciona as duas alternativas após o almoço!

Adicionei um exemplo que foi feito na versão 1.6.1, está funcionando nas duas situações!

@Rodolfo
Obrigado!
Nos testes que fiz mesmo problema ocorre. Porém pode ser por causa da versão. Irei tentar atualizar o FLUIG e fazer novos testes.

Obrigado!!!