Skip to content

Instantly share code, notes, and snippets.

@ricardoperovano
Created November 23, 2021 17:35
Show Gist options
  • Save ricardoperovano/5fdb7377dd17e30817349a270178ec31 to your computer and use it in GitHub Desktop.
Save ricardoperovano/5fdb7377dd17e30817349a270178ec31 to your computer and use it in GitHub Desktop.
Helper Formula Visual Totvs RM
private void Perovano_ExecuteCode(object sender, System.EventArgs args)
{
}
public static class PerovanoFramework
{
/*
Framework Criado Para Ajudar a Construção de Formula Visual
Autor: Perovano
Data: 09/04/2015
*/
#region EnviarEmailPerovano
/// <summary>
/// Envia um email de acordo com os parametros informados
/// Exemplo de Chamada: PerovanoFramework.EnviarEmailPerovano("[email protected],[email protected]","Assunto do Email","Mensagem do email",false,this.Context.CodSistema,this.Context.CodColigada,this.Context.CodUsuario);
/// </summary>
/// <param name="para">Destinatário do Email</param>
/// <param name="assunto">Assunto do Email</param>
/// <param name="corpo">Mensagem do email</param>
/// <param name="isHtml">Informa se a mensagem está em formato html ou texto</param>
/// <param name="codSistema">Código do Sistema</param>
/// <param name="codColigada">Código da Coligada</param>
/// <param name="codUsuario">Código do Usuário</param>
public static void EnviarEmailPerovano(string para, string assunto, string corpo, bool isHtml, string codSistema, int codColigada, string codUsuario)
{
RMSMailParams mailParams = new RMSMailParams(
codSistema,
codColigada,
codUsuario,
para,
assunto,
corpo
);
mailParams.IsHTMLBody = isHtml;
mailParams.Sender = new RMSMailSenderParams(RMSMailSender.Company);
IRMSMailServer iRMSMailServer = RMSBroker.CreateServer<IRMSMailServer>("RMSMailServer");
iRMSMailServer.Send(mailParams);
}
#endregion
#region ExibirMensagemErro
/// <summary>
/// Lança uma exceção fazendo com que gere uma mensagem de erro
/// </summary>
/// <param name="msgErro">Um texto a ser exibido na janela de erro do RM</param>
public static void ExibirMensagemErro(string msgErro)
{
throw new System.Exception(msgErro);
}
/// <summary>
/// Lança uma exceção fazendo com que gere uma mensagem de erro
/// </summary>
/// <param name="ex">Exceção gerada em um bloco try catch</param>
public static void ExibirMensagemErro(System.Exception ex)
{
throw new System.Exception(ex.Message);
}
#endregion
#region PreencheDataSet
/// <summary>
/// Preenche um DataSet existente com o resultado de uma consulta Sql
/// </summary>
/// <param name="DBS">DataBase Service - Sempre será passado como this.DBS</param>
/// <param name="DS">Um objeto DataSet</param>
/// <param name="nomeTabela">Um nome para a tabela que será criada no DataSet com o resultado da consulta</param>
/// <param name="textoConsulta">O texto sql da consulta que será executada. EX: SELECT * FROM TMOV WHERE IDMOV = :IDMOV AND CODCOLIGADA = :CODCOLIGADA</param>
/// <param name="parametrosConsulta">Parametros da consulta sql. Se não existir parametros na cosnulta deverá ser passado
/// um objeto em branco. Exemplo de parametros em branco: new object[]{} Exemplo de Parametros new object[]{12355,1}
/// </param>
public static void PreencherDataSet(IRMSWorkflowDbService DBS, System.Data.DataSet DS, string nomeTabela, string textoConsulta, params object[] parametros)
{
DBS.QueryFill(DS, nomeTabela, textoConsulta, parametros);
}
/// <summary>
/// Preenche um DataSet com o resultado de uma consulta Sql
/// </summary>
/// <param name="DBS">DataBase Service - Sempre será passado como this.DBS</param>
/// <param name="nomeTabela">Um nome para a tabela que será criada no DataSet com o resultado da consulta</param>
/// <param name="textoConsulta">O texto sql da consulta que será executada. EX: SELECT * FROM TMOV WHERE IDMOV = :IDMOV AND CODCOLIGADA = :CODCOLIGADA</param>
/// <param name="parametrosConsulta">Parametros da consulta sql. Se não existir parametros na cosnulta deverá ser passado
/// um objeto em branco. Exemplo de parametros em branco: new object[]{} Exemplo de Parametros new object[]{12355,1}
/// </param>
/// <returns>Retorna um novo dataset com o resultado da consulta sql</returns>
public static System.Data.DataSet PreencherDataSet(IRMSWorkflowDbService DBS, string nomeTabela, string textoConsulta, params object[] parametros)
{
System.Data.DataSet DS = CriarDataSet(nomeTabela);
DBS.QueryFill(DS, nomeTabela, textoConsulta, parametros);
return DS;
}
#endregion
#region CriarDataSet
/// <summary>
/// Cria um dataset vazio com o nome informado no parametro
/// </summary>
/// <param name="dataSetName">Nome do DataSet</param>
/// <returns>Retorna um dataset vazio</returns>
public static System.Data.DataSet CriarDataSet(string dataSetName)
{
return new System.Data.DataSet() { DataSetName = dataSetName };
}
#endregion
#region
/// <summary>
/// Exibe todas as tabelas e colunas de um determinado dataset
/// </summary>
/// <param name="DS">Dataset que se quer exibir os seus dados</param>
public static void ExibirDadosDataSet(System.Data.DataSet DS)
{
System.Text.StringBuilder txt = new System.Text.StringBuilder();
for (int i = 0; i < DS.Tables.Count; i++)
{
txt.Append("Tabela: ");
txt.AppendLine(DS.Tables[i].TableName.ToString());
for (int l = 0; l < DS.Tables[i].Columns.Count; l++)
{
txt.Append(DS.Tables[i].Columns[l].ColumnName.ToString());
txt.Append("\t");
}
txt.AppendLine();
txt.AppendLine("---------------------------------------------------------------------------------------------");
for (int j = 0; j < DS.Tables[i].Rows.Count; j++)
{
for (int k = 0; k < DS.Tables[i].Columns.Count; k++)
{
txt.Append(DS.Tables[i].Rows[j][k].ToString());
txt.Append("\t");
}
txt.AppendLine();
txt.AppendLine("---------------------------------------------------------------------------------------------");
}
}
ExibirMensagemErro(txt.ToString());
}
#endregion
#region
/// <summary>
/// Faz a inclusão de um Registro no banco de dados do RM
/// </summary>
/// <param name="DBS">DabaBaseService, sempre será passado como this.DBS na formula visual</param>
/// <param name="textoSql">string sql de inclusão</param>
/// <param name="valores">valores dos campos que serão inseridos Ex: new object[]{campo1,campo2,campo3}
/// Respeitando o tipo de dados do banco RM
/// </param>
public static void InserirRegistro(IRMSWorkflowDbService DBS,string textoSql, params object[] parametros)
{
if (textoSql.IndexOf("INSERT INTO") == -1)
{
ExibirMensagemErro("Este Metodo Só Aceita Inclusão de Registros!");
}
else
{
if (parametros == null)
{
ExibirMensagemErro("Não é possível inserir registros sem passar os valores para a consulta");
}
else
{
string msgStatus = string.Empty;
try
{
InicializarTransacao(DBS);
DBS.QueryExec(textoSql, parametros);
}
catch (System.Exception ex)
{
msgStatus = ex.Message;
}
finally
{
FinalizarTransacao(DBS, msgStatus);
}
}
}
}
#endregion
#region
/// <summary>
/// Finaliza a transação no banco de dados
/// Caso encontre algum erro: Rollback
/// Se nenhum erro for encontrado Commit
/// </summary>
/// <param name="DBS">Um DataBaseService. sempre será passado como this.DBS na formula visual</param>
/// <param name="erro">mensagem de erro</param>
public static void FinalizarTransacao(IRMSWorkflowDbService DBS,string erro)
{
if (!string.IsNullOrEmpty(erro))
{
DBS.Rollback();
ExibirMensagemErro(erro);
}
else
{
DBS.Commit();
}
}
#endregion
#region
/// <summary>
/// Inicializa uma transação no banco de dados
/// </summary>
/// <param name="DBS">Um DataBaseService. sempre será passado como this.DBS na formula visual</param>
public static void InicializarTransacao(IRMSWorkflowDbService DBS)
{
DBS.BeginTransaction();
}
#endregion
#region
/// <summary>
/// Faz o UPDATE de um Registro no banco de dados do RM
/// </summary>
/// <param name="DBS">DabaBaseService, sempre será passado como this.DBS na formula visual</param>
/// <param name="textoSql">string sql de atualização</param>
/// <param name="valores">valores dos campos que serão atualizados Ex: new object[]{campo1,campo2,campo3}
/// Respeitando o tipo de dados do banco RM
/// </param>
public static void AtualizarRegistro(IRMSWorkflowDbService DBS, string textoSql, params object[] parametros)
{
if (textoSql.IndexOf("UPDATE") == -1)
{
ExibirMensagemErro("Este Metodo Só Aceita Update de Registros!");
}
else
{
if (parametros == null)
{
ExibirMensagemErro("Não é possível atualizar registros sem passar os valores para a consulta");
}
else
{
string msgStatus = string.Empty;
try
{
InicializarTransacao(DBS);
DBS.QueryExec(textoSql, parametros);
}
catch (System.Exception ex)
{
msgStatus = ex.Message;
}
finally
{
FinalizarTransacao(DBS, msgStatus);
}
}
}
}
#endregion
#region
/// <summary>
/// Retorna um valor do tipo object com o dado do campo solicitado.
/// Retorna somente a primeira linha da consulta. Ideal passar parametros com a chave primária
/// </summary>
/// <param name="DBS">DabaBaseService, sempre será passado como this.DBS na formula visual</param>
/// <param name="colunaRetorno">A coluna que deverá ser retornada</param>
/// <param name="textoSql">Consulta Sql que busca os dados</param>
/// <param name="parametros">Parametros passados para a consulta no formato new object[]{param1,param2}</param>
/// <returns>Retorna um valor do tipo object</returns>
public static object RetornaCampo(IRMSWorkflowDbService DBS, string colunaRetorno, string textoSql, params object[] parametros)
{
object obj = null;
using (var DS = CriarDataSet("Retorno"))
{
DBS.QueryFill(DS, "Retorno", textoSql, parametros);
if (DS.Tables["Retorno"].Rows.Count > 0)
{
obj = DS.Tables["Retorno"].Rows[0][colunaRetorno];
}
if (obj == null || obj == System.DBNull.Value)
{
obj = string.Empty;
}
}
return obj;
}
#endregion
#region
/// <summary>
/// Faz o envio do sms
/// </summary>
/// <param name="chaveApi">Chave de Acesso no site de sms</param>
/// <param name="remetente">usuario que está enviando</param>
/// <param name="destinatario">usuário de destino</param>
/// <param name="mensagem">mensagem</param>
/// <returns></returns>
public static bool EnviarMensagem(string chaveApi, string remetente, string destinatario, string mensagem)
{
try
{
string url = System.String.Format("https://sms.comtele.com.br/api/{0}/sendmessage?sender={1}&receivers={2}&content={3}", chaveApi, remetente, destinatario, mensagem);
System.Threading.AutoResetEvent ev = new System.Threading.AutoResetEvent(false);
WebPost(new System.Uri(url), string.Empty, (data) =>
{
//Retorno enviado pela API.
var d = data;
ev.Set();
});
ev.WaitOne();
return true;
}
catch (System.Exception ex)
{
return false;
}
}
#endregion
#region
private static void WebPost(System.Uri uri, string data, System.Action<object> callback)
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "text/plain;charset=utf-8";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(data);
request.ContentLength = bytes.Length;
using (System.IO.Stream requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
}
request.BeginGetResponse((x) =>
{
using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.EndGetResponse(x))
{
if (callback != null)
{
System.Runtime.Serialization.Json.DataContractJsonSerializer ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(object));
callback(ser.ReadObject(response.GetResponseStream()) as object);
}
}
}, null);
}
#endregion
#region
/// <summary>
/// Esse metodo seta um valor unico para todos os registros da visão
/// </summary>
/// <param name="NomeColuna">Nome da coluna a ser criada</param>
/// Ex: "System.String", "System.Int32"
///</param>
/// <param name="valorColuna">O valor que receberá a coluna</param>
/// <param name="DS">Data set que contem a tabela que receberá a coluna</param>
public static void CriarColuna(string NomeColuna, object valorColuna, System.Data.DataSet DS)
{
System.Data.DataColumn dataColumn;
dataColumn = DS.Tables[0].Columns.Add(NomeColuna, System.Type.GetType("System.String"));
dataColumn.ExtendedProperties.Add("Perovano", "PerovanoFramework");
for(int i =0; i< DS.Tables[0].Rows.Count; i++)
{
DS.Tables[0].Rows[i][NomeColuna] = valorColuna;
}
}
#endregion
#region
/// <summary>
/// Esse metodo seta um valor especifico para cada registro da visão, de acordo com uma consulta SQL
/// </summary>
/// <param name="NomeColuna">Nome da coluna a ser criada</param>
/// Ex: "System.String", "System.Int32"
///</param>
/// <param name="valorColuna">O valor que receberá a coluna</param>
/// <param name="DS">Data set que contem a tabela que receberá a coluna</param>
/// <param name="DBS">DabaBaseService, sempre será passado como this.DBS na formula visual</param>
/// <param name="colunaRetorno">A coluna que deverá ser retornada</param>
/// <param name="textoSql">Consulta Sql que busca os dados</param>
/// <param name="parametros">Parametros passados para a consulta no formato new object[]{param1,param2}</param>
public static void CriarColuna(string NomeColuna, System.Data.DataSet DS,IRMSWorkflowDbService DBS, string colunaRetorno, string textoSql, params object[] parametros)
{
System.Data.DataColumn dataColumn;
dataColumn = DS.Tables[0].Columns.Add(NomeColuna, System.Type.GetType("System.String"));
dataColumn.ExtendedProperties.Add("Perovano", "PerovanoFramework");
for(int i =0; i< DS.Tables[0].Rows.Count; i++)
{
string par1 = (string)parametros[0].ToString();
string par2 = (string)parametros[1].ToString();
var val1 = System.Int32.Parse(DS.Tables[0].Rows[i][par1].ToString());
var val2 = System.Int32.Parse(DS.Tables[0].Rows[i][par2].ToString());
DS.Tables[0].Rows[i][NomeColuna] = RetornaCampo(DBS,colunaRetorno,textoSql,new object[]{val1,val2}).ToString();
}
}
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment