Skip to main content

Programação em C# - Na Regra de Negócio

IMPORTANTE: as variáveis e métodos descritos aqui só funcionarão na programação C# na Regra de Negócio do formulário. Para programação C# nas APIs clique aqui.

O agilityflow permite a customização em C#, além de já disponibilizar diversas bibliotecas e funções para facilitar sua programação, incluindo acesso a dados, validações, envio de e-mail, notificação, entre outras.

Abaixo mostramos alguns exemplos, se o material abaixo não for suficiente , entre em contato com nossa equipe.

Variáveis disponíveis

Variável Tipo  
FormularioCamposPreenchidos dynamic (Json)

retorna um json com os campos do preenchidos no formulário, exemplo:

{

 "campo1": "xxxxx",

 "campo2": "yyyyy",

 "campo3": "zzzzz",

}

 

Para resgatar a informação do campo1, utilize:

 

var campo1 = FormularioCamposPreenchidos["campo1"];

 

IsNovoFormulario bool retorna true, caso seja um novo formulário, e false caso contrário.
IdFormulario Guid 

retorna o ID do formulário

CurrentStatusFluxo StatusFluxo? (Enum)

Variável disponível apenas para Workflow

 

Nessa ENUM será retornado o Status do fluxo.

As opções podem ser:

 

  • StatusFluxo.Pendente - Enquanto o fluxo ainda estiver pendente em alguma das etapas.
  • StatusFluxo.Aprovado - Depois do fluxo encerrado e completamente aprovado
  • StatusFluxo.Reprovado - Depois do fluxo encerrado e completamente reprovado

Exemplo de utilização:

 

if(CurrentStatusFluxo == StatusFluxo.Aprovado){
//restante do código
}

 

 

 

Métodos Disponíveis no contexto da Regras de Negócio do Formulário

Método Retorno  
FormContext.GetDataTable(string sql, params DbParameter[] parameters) DataTable

Permite retornar informações dos bancos de dados através de uma query.

Veja exemplo

FormContext.SaveEntity(Guid estruturaformularioid_ASerCriadoOuAtualizado, NameValueCollection campos_e_valores) void

Salva as informações de um formulário no bancos de dados. 

 

Obs: Para cadastrar valores numéricos, o números devem estar no formato com ponto no separador decimal: 999999.99 sem utilização de virgulas.

 

Veja exemplo

FormContext.ApproveEntity(Guid estruturaformularioid_ASerAprovado, NameValueCollection campos_e_valores) void

Avança uma etapa em um formulário com Workflow.

As regras de usuário aprovador, permissão de aprovação e responsabilidade por uma etapa devem ser validadas antes desse método ser executado. 

 

Obs: Para cadastrar valores numéricos, o números devem estar no formato com ponto no separador decimal: 999999.99 sem utilização de virgulas.

 

Veja exemplo

FormContext.DeleteEntity(Guid formularioid) void

Deletar um um registro

FormContext.SetValueField(string idCampo, string value) void

Esse método preencherá um campo com um novo Valor (passado por paramêtro)

FormContext.GetValueField(string idCampo) string Esse método retornará o Valor de um determinado campo
FormContext.GetTextField(string idCampo) string

Esse método retornará o Texto de um determinado campo, utilizado apenas se o campo for um campo de lista dinâmica, exemplo: Combo, Auto complete, Campo de Múltipla escolha, radio etc.

Esse método é necessário em algumas situações pois no Json de Campos Preenchidos no Formulario ( variável FormularioCamposPreenchidos), só retorna o ID que foi selecionado nos campos que são de Lista Dinâmica.
Veja exemplo

 

FormContext.GetEnvironmentVariable(string nomeVariavel)

ou

FormContext.GetEnvironmentVariable_Text(string nomeVariavel) **

string

Recupera o Valor de uma variável de ambiente.

 

** Recupera a Descrição (texto), no caso de variáveis do Tipo "Query com Id + Descrição":

FormContext.WarningMessage(string message)

void

Apresenta um aviso para o usuário

veja detalhes aqui

FormContext.Log(string log, string logTipo)

void

Cria um log na tabela de log geral, o log pode ser consultado entrando na Área de Customização e clicando na opção "Log Geral >> consultar Log"

 

FormContext.GetUrlBase()

 

 

Retorna a URL base da sua aplicação

exemplo:

 

https://suaempresa.agilityflow.io/

 

*A url sempre virá com uma barra no final /

Buscar informações do usuário logado

Método Retorno  
FormContext.GetUsuarioLogadoNome();
string Nome Completo  do usuário logado
FormContext.GetUsuarioLogadoPrimeiroNome(); string Primeiro nome do usuário logado
FormContext.GetUsuarioLogadoPrimeiroESegundoNome(); string Primeiro e Segundo nome do usuário logado
FormContext.GetUsuarioLogadoEmail(); string E-mail do usuário logado
FormContext.GetUsuarioLogadoId(); Guid Id do usuário logado

 

Recuperando dados do banco de dados através de uma query SQL
//parametros da query
var paramsQuery = new List<SqlParameter>();
paramsQuery.Add(new SqlParameter("@param1", "xxx"));
paramsQuery.Add(new SqlParameter("@param2", "yyy"));
paramsQuery.Add(new SqlParameter("@param3", "zzz"));

//query usando (nolock) nas tabelas para evitar problema com a transação que está ativa
var sql = "select column1,column2,column3 from table (nolock) where column1 = @param1 or  column2 = @param2 or  column3 = @param3 ";

//executar no banco de dados
var dt = FormContext.GetDataTable(sql, paramsQuery.ToArray());

//percorrendo as linhas de retorno da tabela
foreach (DataRow dr in dt.Rows)
{
  if (dr["column1"] != DBNull.Value)
  	FormContext.WarningMessage(dr["column1"].ToString());
}
Salvando/Criar um outro formulário através do método SaveEntity

* Para cadastrar valores numéricos, o números devem estar no formato com ponto no separador decimal: 999999.99 sem utilização de virgulas.

//guarda em uma variável o ID da  E S T R U T U R A  do formulário de pessoa
var idEstruturaFormulario_PESSOA = Guid.Parse("0b56b66a-4f6f-4ded-ad04-016d7c0724e1");

var values = new NameValueCollection();
values.Add("nome", json["nome"].ToString());
values.Add("email", json["email"].ToString());


//salva a informação no banco de dados
FormContext.SaveEntity(idEstruturaFormulario_PESSOA, values);
Aprovar um outro formulário através do método ApproveEntity

* Para cadastrar valores numéricos, o números devem estar no formato com ponto no separador decimal: 999999.99 sem utilização de virgulas.

//guarda em uma variável o ID da  E S T R U T U R A  do formulário de pessoa
var idEstruturaFormulario_PESSOA = Guid.Parse("0b56b66a-4f6f-4ded-ad04-016d7c0724e1");

var values = new NameValueCollection();
values.Add("nome", json["nome"].ToString());
values.Add("email", json["email"].ToString());


//salva a informação no banco de dados
FormContext.ApproveEntity(idEstruturaFormulario_PESSOA, values);
Salvando um outro formulário com Tabela Associativa através do método SaveEntity

* Para cadastrar valores numéricos, o números devem estar no formato com ponto no separador decimal: 999999.99 sem utilização de virgulas.

//guarda em uma variável o ID da  E S T R U T U R A  do formulário de pessoa
var idEstruturaFormulario_PESSOA = Guid.Parse("0b56b66a-4f6f-4ded-ad04-016d7c0724e1");

var values = new NameValueCollection();
values.Add("nome", json["nome"].ToString());
values.Add("email", json["email"].ToString());


        //no caso do campo do formulário ser uma tabela associativa (tabela relacional N:N)
        var idCampoTabelaAssociativa = "70b6f362-2587-4fd2-a2fb-148bd0caf437";

        //itens da tabela associativa que serão adicionados
        var idItem1 = "51cf02f1-3787-4dca-8a2c-e219a5ce1298";
        var idItem2 = "f999f103-c775-4245-92d3-034cb3ded5e4";                          
        var idItem3 = "XXXXf103-c775-4245-92d3-034cb3ded5e4";                          
        var idItem4 = "YYYYf103-c775-4245-92d3-034cb3ded5e4";                          
        var idsJuntos_ConcatenadosComVirgula = idItem1 + "," + idItem2 + "," + idItem3 + "," + idItem4 + ",";

        //adiciona
        values.Add(idCampoTabelaAssociativa, idItem1); //adiciona idItem1
        values.Add(idCampoTabelaAssociativa, idItem2); //adiciona idItem2
        values.Add(idCampoTabelaAssociativa, idItem3); //adiciona idItem3
        values.Add(idCampoTabelaAssociativa, idItem4); //adiciona idItem4
        values.Add("tabela_associativa_added-"+idCampoTabelaAssociativa,idsJuntos_ConcatenadosComVirgula);// itens concatenados com virgula
        values.Add("tabela_associativa_removed-"+idCampoTabelaAssociativa,"");//em branco
        values.Add("tabela_associativa_colunas_adicionais-"+idCampoTabelaAssociativa,"");//em branco
        //---------------------------------------



//salva a informação no banco de dados
FormContext.SaveEntity(idEstruturaFormulario_PESSOA, values);
Para recuperar o Texto de um campo que seja uma Lista Dinâmica (Combo, Auto completar, Múltipla seleção, Radio):

Suponhamos que você tenha um formulário de Pedido e  nesse formulário você tenha um campo chamado 'Produto'.
Esse campo é do tipo 'Pesquisa com Auto Completar' e listará os 'Produtos' por 'Nome'.
Quando o usuário salvar o formulário, no Json de envio não retornará o Nome do Produto, apenas o Id do produto selecionado (Esse id estará no formato de um GUID).
Para recuperar o Nome do produto, você precisará executar o método GetTextField da seguinte forma:

var nomeProduto = FormContext.GetTextField("produto");
Recuperar os valores das "Variáveis de Ambiente"

Para saber mais sobre variáveis de ambiente entre em Variáveis de ambiente

var valorDaVariavel = FormContext.GetEnvironmentVariable("var_nomeDaVariavel");

Recuperar a Descrição (texto), no caso de variáveis do Tipo "Query com Id + Descrição":

var textDaVariavel = FormContext.GetEnvironmentVariable_Text("var_nomeDaVariavel");

 

Enviar Mensagem para o usuário: A execução do código abaixo apresentará uma mensagem para o usuário
FormContext.WarningMessage("Exemplo de mensagem para o usuário");

O código C# se encerrará no exato momento em que for chamado o método para apresentação de mensagem.

 

Retorno da mensagem

Envio de e-mail

Responsável pelo envio de e-mail 

Método Retorno  
EmailSender.SendToGrupoUsuario(Guid grupoUsuarioId, string subject, string htmlContent) void Enviar um e-mail para um determinado Grupo de Usuario
EmailSender.SendEmail(string toEmail, string subject, string htmlContent) void Enviar um e-mail 
EmailSender.SendEmail(string toEmail, string subject, string htmlContent, string ccEmail) void Enviar um e-mail, com copia (CC)

 

Enviar e-mail para um Grupo de Usuário

Antes de iniciar, crie um "Grupo de Usuário" no menu "Segurança e Acesso".  Depois de criado, associe os usuários que receberão e-mail ao novo grupo de usuário que você acabou de criar.

Pegue o ID desse novo Grupo de usuário. Você vai precisar dele para enviar o e-mail. 

var grupoUsuarioId = Guid.Parse("af7c9275-0e23-4b64-a433-f238bb457005"); //substitua o ID "af7c9275-0e23-4b64-a433-f238bb457005" pelo Id do grupo de usuario que você deseja enviar o e-mail
var assunto = "Novo E-mail para um Grupo de usuario ";
var html = "Olá Grupo, <BR><BR> Teste para envio de e-mail para um Grupo de Usuário no AgilityFlow!";

EmailSender.SendToGrupoUsuario(grupoUsuarioId, assunto, html);

 

Enviar e-mail 
var htmlContent = "<strong>Olá,</strong> teste envio de e-mail.";
var emailTo = "john@email.com";
var subject = "Subject do E-mail";

EmailSender.SendEmail(emailTo, subject, htmlContent);

 

Método principal para utilização da Programação em C# na opção "Regra de Negócio"

A única regra é que o método se chame Execute, não tenha parâmetros de entrada e o retorno seja void.

Exemplo:

public void Execute(){            



  //aqui você pode programar   



}