Sim é possível, só que o cliente terá que ter um cadastro no Fluig para fazer visualização/download do documento.
No meu caso, eu criei um processo que publicava o anexo dentro de uma pasta no GED e depois fazia o envio do e-mail com o link de download do documento.
segue alguns arquivos e documentações que podem te ajudar.
http://tdn.totvs.com/pages/releaseview.action?pageId=183730587
http://tdn.totvs.com/pages/releaseview.action?pageId=73084007
Validar anexo e chama função que publica documento:
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var numEmpresa = getValue("WKCompany");
// Número da proxima atividade
var nrProxAtividade = getValue("WKNextState");
// Atividade Atual
var state = getValue("WKNumState");
// Numero do processo
var numProcess = getValue("WKNumProces");
// Numero da thread pode ser mantido como 0, caso tenha tarefas paralelas, deve ser identificado o numero da thread correta.
var numThread = hAPI.getActualThread(numEmpresa, numProcess, nrProxAtividade);
// Usuário logado
var userLogado = getValue("WKUser");
var nomeAnexos = new Array();
var anexos = hAPI.listAttachments();
var campoAnexo = hAPI.getCardValue("quantidadeAnexos");
var msg = "";
if (state == 0 || state == 4) {
var cont = 0;
var temAnexo = false;
var codAnexos = new Array();
if (anexos.size() > 0) {
temAnexo = true;
}
publicaDocumentos(idPasta);
}
if (!temAnexo) {
msg += "<br>É necessário anexar o atestado médico.";
}
}
}
Função que Publica os documentos:
function publicaDocumentos(codPasta){
var state = getValue('WKNumState');
var idDoc, docDesc;
var attachments = hAPI.listAttachments();
var hasAttachment = false;
for (var i = 0; i < attachments.size(); i++) {
var attachment = attachments.get(i);
docDesc = attachment.getDocumentDescription();
var ServiceDocumentName = "ECMDocumentService"; // O ServiceDocumentName corresponde ao código do serviço criado no studio. Para este exemplo, crie o serviço como CXF
var codEmpresa = 1; // Informe o codigo da empresa
var loginAdm = "loginadm"; // Usuario integrador - login do usuário administrador
var senhaAdm = "senhaadm"; // Usuario integrador - Senha do usuário administrador
var DocumentDescription = docDesc; // Descricao do documento
var ParentDocumentId = codPasta; // Codigo da pasta pai onde o novo documento sera publicado
var PublisherId = "fhaidy.maciel"; // Matricula do usuario publicador
var ColleagueId = "fhaidy.maciel"; // Matricula do usuario criador
var fileName = docDesc; // Nome do arquivo fisico:
/*
* No fileName eh necessario informar o nome do arquivo fisico disponivel que sera publicado.
* Este precisa estar na pasta de upload do usuário integrador (loginAdm)
* Para enviar o documento para a pasta de upload do usuario, veja: http://tdn.totvs.com/x/zABlDw
*/
try {
// neste momento, sera instanciado o servidor ECMDocumentService
var webServiceProvider = ServiceManager.getServiceInstance(ServiceDocumentName);
var webServiceLocator = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.ECMDocumentServiceService");
var webService = webServiceLocator.getDocumentServicePort();
var documentoArray = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.DocumentDtoArray");
var documento = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.DocumentDto");
// agora sera definida as propriedades do documento, a lista completa de propriedade pode ser vista aqui: http://tdn.totvs.com/x/l4eADQ
documento.setApprovalAndOr(false);
documento.setAtualizationId(1);
documento.setColleagueId(ColleagueId);
documento.setCompanyId(codEmpresa);
documento.setDeleted(false);
documento.setDocumentDescription(DocumentDescription);
documento.setDocumentType("2"); // 1 - Pasta; 2 - Documento; 3 - Documento Externo; 4 - Fichario; 5 - Fichas; 9 - Aplicativo; 10 - Relatorio.
documento.setDownloadEnabled(true);
documento.setExpires(false);
documento.setInheritSecurity(true);
documento.setParentDocumentId(ParentDocumentId);
documento.setPrivateDocument(false);
documento.setPublisherId(PublisherId);
documento.setUpdateIsoProperties(true);
documento.setUserNotify(false);
documento.setVersionOption("0");
documento.setDocumentPropertyNumber(0);
documento.setDocumentPropertyVersion(0);
documento.setVolumeId("Default");
documento.setIconId(2);
documento.setLanguageId("pt");
documento.setIndexed(true);//o default era false
documento.setActiveVersion(true);
documento.setTranslated(false);
documento.setTopicId(1);
documento.setDocumentTypeId("");
documento.setExternalDocumentId("");
documento.setDatasetName("");
documento.setVersionDescription("");
documento.setKeyWord("");
documento.setImutable(false);
documento.setProtectedCopy(false);
documento.setAccessCount(0);
documento.setVersion(1000);
documentoArray.getItem().add(documento);
// agora sera definida as propriedades do anexo, a lista completa de propriedade pode ser vista aqui: http://tdn.totvs.com/x/l4eADQ
var attachmentArray = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.AttachmentArray");
var attachment = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.Attachment");
log.info("## [Dataset: createDocument] - Nome e extensão do arquivo físico a ser publicado: " + fileName);
attachment.setFileName(fileName);
attachment.setPrincipal(true);
attachment.setFilecontent(null);
attachmentArray.getItem().add(attachment);
var documentSecurityConfigDtoArray = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.DocumentSecurityConfigDtoArray");
var approverDtoArray = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.ApproverDtoArray");
var relatedDocumentDtoArray = webServiceProvider.instantiate("com.totvs.technology.ecm.dm.ws.RelatedDocumentDtoArray");
log.info("## [Dataset: createDocument] - chamando createDocument");
// agora sera feita a publicacao do documento
var retornoDocumento = webService.createDocument(loginAdm, senhaAdm, codEmpresa, documentoArray, attachmentArray, documentSecurityConfigDtoArray, approverDtoArray, relatedDocumentDtoArray);
// codigo do documento publicado
var idDocumento = retornoDocumento.getItem().get(0).getDocumentId();
log.info("## [Dataset: createDocument] - Documento criado com SUCESSO! Código: " + idDocumento);
log.info("#### [Dataset: createDocument] - Finalizado");
} catch (e) {
log.info("## [Dataset: createDocument] - Erro ao tentar criar documento: " + e.message);
}
}
}
Envio do E-mail
function servicetask21(attempt, message) {
var emailAluno = consultaEmailAluno(hAPI.getCardValue("raAluno"));
// Número da Empresa
var numEmpresa = getValue("WKCompany");
// Número da proxima atividade
var nrProxAtividade = getValue("WKNextState");
// Atividade Atual
var state = getValue("WKNumState");
// Numero do processo
var numProcess = getValue("WKNumProces");
// Usuário logado
var userLogado = getValue("WKUser");
//Envia o e-mail para o aluno
try {
var codAnexos = hAPI.getCardValue("codAnexos");
var descAnexos = hAPI.getCardValue("descAnexos");
descAnexos = descAnexos.split(',');
codAnexos = codAnexos.split(',');
var param = new java.util.HashMap();
var dest = new java.util.ArrayList();
if(emailAluno == undefined || emailAluno == null || emailAluno == ""){
throw "O aluno "+hAPI.getCardValue("nomeAluno")+" não possui um e-mail cadastrado";
}else{
dest.add(emailAluno);
}
var anexos = new java.util.ArrayList();
var cont = 1;
for(j=0; j< codAnexos.length; j++){
var anexo = new java.util.HashMap();
anexo.put("link", "http://servidor:porta/webdesk/webdownload?documentId="+codAnexos[j]+"&version=1000&tenantId=1&replication=false");
anexo.put("description", descAnexos[cont]);
anexos.add(anexo);
log.info("Fhaide: " + codAnexos[j] + " " + descAnexos[cont]);
cont++;
}
param.put("anexos", anexos);
param.put("subject","Email de Teste Fluig"+" - Solicitação " + numProcess);
param.put("NOME_DEST", "Fhaidy");
if (dest.size() > 0){
notifier.notify(userLogado, "temp002", param, dest, "text/html");
}
} catch(error) {
log.error(error);
throw error;
}
}
Template exemplo para o Fluig
<html>
<head>
<meta charset="utf-8">
<title>Envio de Anexos</title>
</head>
<body leftmargin="0" topmargin="0" marginheight="0" marginwidth="0">
<div align="left">
<table cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td>
<img src="https://www.unifamma.edu.br/wp-content/uploads/2018/08/unifamma_centro_horizontal.png">
</td>
</tr>
</tbody>
</table>
</div>
<br />
<p>Olá, ${NOME_DEST}, <br><br>Seu(s) anexo(s) está(ão) pronto(s) para o download</p>
<br />
<br />
<#if anexos??>
<div align="left">
<table cellspacing="0" cellpadding="0">
<thead>
<tr>
<th align="left">Anexos</th>
</tr>
</thead>
<tbody>
<#list anexos as anexo>
<tr>
<td>
<a style="margin-left: 10px;" href="${anexo.link}" >${anexo.description}</a>
</td>
</tr>
</#list>
</tbody>
</table>
</div>
</#if>
</body>
</html>