Olá pessoa, sou novo aqui, um prazer pode contar com a ajuda de vocês.
Está acontecendo o seguinte, estou criando uma função pra mandar e-mail, e nela eu recebo a matricula de quem originou o processo, e os próximos envolvidos.
Acontece que eu tento montar um Array de constraints pra filtra o email deles pra passar no “to” do notifier.notify, porém não tem dado certo… segue abaixo o código, quem puder ajudar fico grato!
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
//ENVIAR EMAIL DE CRIAÇÃO DE SOLICITAÇÃO ASSIM QUE O FORMULÁRIO É SALVO.
//if(nextSequenceId == 6){
var destinatarios = userList
log.info("==============================\n\n" +
"DESTINATARIOS: " + destinatarios.toString() +
"\n\n==============================")
Fx_EnviarEmail(colleagueId,destinatarios)
//}
}
function Fx_EnviarEmail(matRemetente, matDestinatarios){
var parametros = new java.util.HashMap();
log.info("==============================\n\n" +
"INICIANDO ENVIO DE E-MAIL" +
"\n\n==============================")
try {
//MONTA UM ARRAY COM OS EMAILS DOS DESTINATARIAS DAS MATRICURAS RESPECTIVAMENTE, QUE FORAM PASSADAS EM codDestinatarios
var mailDestinatarios = []
//ADICIONA O EMAIL DO SOLICITANTE
//mailDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",matRemetente,matRemetente,ConstraintType.MUST))
for(i = 0; i < matDestinatarios.length; i++){
mailDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",matDestinatarios[i],matDestinatarios[i],ConstraintType.MUST))
log.info("==============================\n\n" +
"ÍNDICE DO FOR PARA AS CONSTRAINTS [" + i + "]" + matDestinatarios[i] +
"\n\n==============================")
}
log.info("==============================\n\n" +
"FILTOS: " + mailDestinatarios.join(", ") +
"\n\n==============================")
//CONSULTAR O EMAIL DO SOLICITANTE E DOS DESTINATÁRIOS
var colunas = new Array("mail");
var destinatarios = DatasetFactory.getDataset("colleague",colunas,mailDestinatarios,null)
log.info("==============================\n\n" +
"E-MAIL DESTINATÁRIOS: " + destinatarios +
"\n\n==============================")
//MONTA MAPA COM PARAMETROS DO TEMPLATE
var processo = getValue("WKNumProces").toString();
parametros.put("NUMERO_SOLICITACAO", processo);
parametros.put("NOME_SOLICITANTE", getValue("WKUser").toString());
parametros.put("NOME_PRODUTO", hAPI.getCardValue('NOME_PROD'));
log.info("==============================\n\n" +
"EXECUTANTO notifier.notify()" +
"\n\n==============================")
notifier.notify("ia.processos","tpEmailSolicitacaoNovoProduto_Inicio",parametros,mailDestinatarios,"text/html");
log.info("==============================\n\n" +
"EMAIL ENVIADO COM SUCESSOL" +
"\n\n==============================")
} catch (error) {
log.info("==============================\n\n" +
"HOUVE UM ERRO AO ENVIAR O EMAIL" +
"\n\n==============================")
log.info("==============================\n\n" +
"DESCRIÇÃO DO ERRO" + error +
"\n\n==============================")
}
}
Não era só isso, o userList não é publico, tive que usar ele no proprio beforeTaskSave, mas mesmo assim n funfa, fala agora que o notifer.notify não existe… segue o erro e o código.
==============================
DESCRIÇÃO DO ERRO: InternalError: Can’t find method com.datasul.technology.webdesk.dataset.DatasetFactory.getDataset(string,object,string). (beforeTaskSave#42)
==============================
Segue código:
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
//ENVIAR EMAIL DE CRIAÇÃO DE SOLICITAÇÃO ASSIM QUE O FORMULÁRIO É SALVO.
if(nextSequenceId == 6){
//MONTA UM ARRAY COM OS EMAILS DOS DESTINATARIAS DAS MATRICURAS RESPECTIVAMENTE, QUE FORAM PASSADAS EM codDestinatarios
var mailsDestinatarios = [];
//ADICIONA O EMAIL DO SOLICITANTE
mailsDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",colleagueId,colleagueId,ConstraintType.MUST))
for(var i = 0; i < userList.size() ; i++){
mailsDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",userList.get(i).toString(),userList.get(i).toString(),ConstraintType.MUST))
log.info("==============================\n\n" +
"ÍNDICE DO FOR PARA AS CONSTRAINTS [" + i + "]" + userList.get(i).toString() +
"\n\n==============================");
}
Fx_EnviarEmail(colleagueId,mailsDestinatarios)
}
}
function Fx_EnviarEmail(constraintsTo){
var parametros = new java.util.HashMap();
log.info("==============================\n\n" +
"INICIANDO ENVIO DE E-MAIL" +
"\n\n==============================")
try {
//CONSULTAR O EMAIL DO SOLICITANTE E DOS DESTINATÁRIOS
var colunas = new Array("mail");
var getMailDestinatarios = DatasetFactory.getDataset("colleague",colunas,constraintsTo);
var strMails = new java.util.ArrayList();
for(var i = 0; i < getMailDestinatarios.rowsCount; i++){
strMails.add(getMailDestinatarios.getValue(i,'mail'))
}
log.info("==============================\n\n" +
"E-MAIL DESTINATÁRIOS: " + strMails +
"\n\n==============================")
//MONTA MAPA COM PARAMETROS DO TEMPLATE
var processo = getValue("WKNumProces").toString();
parametros.put("NUMERO_SOLICITACAO", processo);
parametros.put("NOME_SOLICITANTE", getValue("WKUser").toString());
parametros.put("NOME_PRODUTO", hAPI.getCardValue('NOME_PROD'));
log.info("==============================\n\n" +
"EXECUTANTO notifier.notify()" +
"\n\n==============================")
var teste = new java.util.ArrayList
teste.add("islainy.corte@milhao.net")
teste.add("gabriel.barbosa@milhao.net")
notifier.notify("ia.processos","tpEmailSolicitacaoNovoProduto_Inicio",parametros,teste,"text/html");
log.info("==============================\n\n" +
"EMAIL ENVIADO COM SUCESSOL" +
"\n\n==============================")
} catch (error) {
log.info("==============================\n\n" +
"HOUVE UM ERRO AO ENVIAR O EMAIL" +
"\n\n==============================")
log.info("==============================\n\n" +
"DESCRIÇÃO DO ERRO" + error +
"\n\n==============================")
}
}
//ADICIONA O EMAIL DO SOLICITANTE
mailsDestinatarios.push(
DatasetFactory.createConstraint(
"colleaguePK.colleagueId",
colleagueId,
colleagueId,
ConstraintType.MUST
)
);
for (var i = 0; i < userList.size(); i++) {
mailsDestinatarios.push(
DatasetFactory.createConstraint(
"colleaguePK.colleagueId",
userList.get(i).toString(),
userList.get(i).toString(),
ConstraintType.MUST)
) ;
}
Esse seu trecho de código vai te trazer 0 resultados quando procurar o dataset, afinal você quer um resultado no qual a matrícula seja igual a todas as contraints passadas.
O ConstraintType.MUST é como se fosse um AND numa consulta SQL.
Substitua por ConstraintType.SHOULD.
O erro tá dizendo que você tá chamando um método que não existe. No caso o método DatasetFactory.getDataset possuí 4 parâmetros obrigatórios, mas você está passando somente 3 argumentos.
Avancei aqui! Fiz as alterações que você me solicitou e também percebi que não posso acionar essa função num Evento Automático do Processos (ExcluisveGateWay) pois o userList retorna System:Auto, então parametrizei para as próximas Tarefas(Task) de fato.
Porém como estou tentando criar um método reutilizável, me deparei com outro problema, no meu caso as Task são atribuídas a um pepel, então sempre vou ter que identificar qual é o método de atribuição, pra poder fazer outro getDataSet dependendo da atribuição.
Nesse caso que atribui um papel pras próximas tarefas, vou ter que consultar o workflowColleagueRole para obter as matriculas, e por fim consultar o colleague para consultar os mails…
FINALIZADO! Agora sempre que o mecanismo de atribuição for para uma ou mais pessoas, ele vai sempre enviar para quem for, segue…
/**
*
*
* @param {string} colleagueId Matrícula do usuário corrente
* @param {number} nextSequenceId
* @param {java.util.List<string>} userList Lista de matrículas de usuários destino
*/
var tsk_validarNomeProduto = 64
var tsk_cadastrarProduto = 65
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
//ENVIAR EMAIL DE CRIAÇÃO DE SOLICITAÇÃO ASSIM QUE O FORMULÁRIO É SALVO.
if(nextSequenceId == tsk_validarNomeProduto || nextSequenceId == tsk_cadastrarProduto){
//MONTA UM ARRAY COM OS EMAILS DOS DESTINATARIAS DAS MATRICURAS RESPECTIVAMENTE, QUE FORAM PASSADAS EM codDestinatarios
var mailsDestinatarios = []
//VERIFICA SE EXISTE UM POOL (GRUPO OU PAPEIS), PRECISA BUSCAR AS MATRICULAS ANTES NO DATASET DE UM OU DE OUTRO
var UsersPool = new java.util.ArrayList();
var pool = userList.get(0).toString().split(":")[0]
var attr = userList.get(0).toString().split(":")[1]
var nameAttr = userList.get(0).toString().split(":")[2]
if(pool.trim() == 'Pool'){
if(attr == "Role"){
var constraintRole = [DatasetFactory.createConstraint(
"workflowColleagueRolePK.roleId",
nameAttr.trim(),
nameAttr.trim(),
ConstraintType.SHOULD
)]
var coluna = ["workflowColleagueRolePK.colleagueId"]
var Users = DatasetFactory.getDataset(
"workflowColleagueRole",
coluna,
constraintRole,
null
)
}
if(attr == "Group"){
var constraintGroup = [DatasetFactory.createConstraint(
"colleagueGroupPK.groupId",
nameAttr.trim(),
nameAttr.trim(),
ConstraintType.SHOULD
)]
var coluna = ["colleagueGroupPK.colleagueId"];
var Users = DatasetFactory.getDataset(
"colleagueGroup",
coluna,
constraintGroup,
null
)
}
for (var i = 0; i < Users.rowsCount; i++) {
UsersPool.add(Users.getValue(i,coluna))
}
}else{
UsersPool = userList
}
//ADICIONA O EMAIL DO SOLICITANTE
mailsDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",colleagueId,colleagueId,ConstraintType.SHOULD))
for(var i = 0; i < UsersPool.size(); i++){
mailsDestinatarios.push(DatasetFactory.createConstraint("colleaguePK.colleagueId",UsersPool.get(i).toString(),UsersPool.get(i).toString(),ConstraintType.SHOULD))
}
FxEnviarEmail(mailsDestinatarios);
}
}
function FxEnviarEmail(constraintsTo){
var parametros = new java.util.HashMap();
try {
//CONSULTAR O EMAIL DO SOLICITANTE E DOS DESTINATÁRIOS
var colunas = ["mail"]
var getMailDestinatarios = DatasetFactory.getDataset("colleague",colunas,constraintsTo,null);
var strMails = new java.util.ArrayList();
for(var i = 0; i < getMailDestinatarios.rowsCount; i++){
strMails.add(getMailDestinatarios.getValue(i,'mail'))
}
log.info("==============================\n\n" +
"E-MAIL DESTINATÁRIOS: " + strMails +
"\n\n==============================")
//MONTA MAPA COM PARAMETROS DO TEMPLATE
var processo = getValue("WKNumProces").toString();
parametros.put("NUMERO_SOLICITACAO", processo);
parametros.put("NOME_SOLICITANTE", getValue("WKUser").toString());
parametros.put("NOME_PRODUTO", hAPI.getCardValue('NOME_PROD'));
notifier.notify("ia.processos","tpEmailSolicitacaoNovoProduto_Inicio",parametros,strMails,"text/html");
} catch (error) {
log.info("==============================\n\n" +
"HOUVE UM ERRO AO ENVIAR O EMAIL" +
"\n\n==============================")
log.info("==============================\n\n" +
"DESCRIÇÃO DO ERRO" + error +
"\n\n==============================")
}
}