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:
- 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.
- 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;
}
}
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!!!