Categorias
crystal reports dicas dll

N??o foi poss??vel carregar arquivo ou assembly System.Web.Extensions, Version=2.0.0.0

Dica r??pida para quem tiver esse erro…
Acontece quando est?? utilizando uma vers??o do ASP.NET Ajax diferente do Framework da aplica????o. Muitas vezes, tamb??m, acontece quando est?? utilizando o Crystal Report ao renderizar um relat??rio. Ent??o ?? exibido a seguinte mensagem:
A solu????o ?? simples: basta remover a System.Web.Extensions.dll e/ou System.Web.Extensions.Design.dll do projeto (na pasta Bin).

N??o foi poss??vel carregar arquivo ou assembly ‘System.Web.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ ou uma de suas depend??ncias. A defini????o do manifesto do assembly localizado n??o corresponde ?? refer??ncia do assembly. (Exce????o de HRESULT: 0x80131040)

Categorias
dicas sql server

Dicas de Instru????es SQL para facilitar o uso no dia-a-dia

Bom, abaixo separei algumas instru????es SQL que muitos programadores tem d??vidas de como us??-las e que facilitam muitas tarefas.

1) INSERT de SELECT: Fazer inser????es em uma tabela puxando dados de outra(s)

Bem parecido com o SELECT INTO por??m voc?? pode fazer v??rias manipula????es conforme desejar usando um simples SELECT. No caso vou mostrar um exemplo bem f??cil: irei adicionar v??rios Alunos numa tabela sendo que os dados est??o em outra tabela (Cadastros), logo minha instru????o ficaria assim:

INSERT INTO Alunos (nome, email) SELECT nome, email FROM Cadastros

O nome dos campos n??o precisam serem iguais, basta estar na mesma ordem e respeitar o tipo de dados (tamanho tamb??m).

2) UPDATE relacionado com outra tabela

Nessa situa????o o que desejamos ?? fazer um UPDATE na tabela sendo que ?? preciso fazer um JOIN com outra tabela. No nosso exemplo: desejamos alterar o preco de um produto sendo que o valor do mesmo est?? relacionado com seu tipo e ele est?? armazenado em outra tabela. Logo podemos usar a seguinte instru????o:

UPDATE Produto SET preco = T.preco FROM Produto AS P, Tipo AS T WHERE P.Id_Tipo = T.Id

Meio complicado quando se v??, n??? Mas se voc?? reparar detalhadamente ver?? que a atualiza????o do pre??o ?? feita, para cada produto, quando o Id_Tipo (da tabela Produto) for igual ao Id (da tabela Tipo) obtendo assim o preco (da tabela Tipo).

3) Remover registros duplicados deixando apenas um

A explica????o desse objetivo ?? bem ??bvia: remover registros duplicados em uma determinada tabela sob,algum crit??rio. Por??m, sua sintaxe ?? mais complicada, mas vamos l??… Para nosso exemplo iremos remover os registros duplicados (ou mais que um) de e-mails deixando apenas um na tabela Mailing:

;WITH Listagem(email, ranking)
AS
(
SELECT email
,ranking = DENSE_RANK() OVER(PARTITION BY email ORDER BY NEWID() ASC)
FROM Mailing WITH (NOLOCK) WHERE email IS NOT NULL 
)
DELETE Listagem WHERE ranking > 1

Esse emaranhado de instru????es se resume em gerar um ranking indicando quantas vezes o registro se repete. Esse ranking ?? armazenado em uma tabela “tempor??ria” (tabela Listagem) com refer??ncia ?? original (tabela Mailing)… Logo que ?? gerado o ranking, ?? feita a exclus??o dos registros que possuem ranking maior que 1, ou seja, apaga todos aqueles que est??o se repetindo deixando apenas um deles.

Bem, ?? isso! Espero ter ajudado… Lembrando que os exemplos acima foram os mais simples e voc??s podem encontrar situa????es semelhantes ou piores mas que, usando-os, podem ajudar a chegar na resolu????o.

Categorias
dicas javascript jquery mootools

Problema do Mootools dentro de um frame

O Mootools ?? um framework JavaScript para criar abas com um belo design e praticidade no uso. Por??m verifiquei que ele tem um certo “probleminha de comportamento” quando o usa dentro de um frame / frameset no IE. O seu carregamento / aplica????o de estilo se d?? atrav??s de uma adi????o de uma fun????o chamadora na janela (usando window.addEvent). A condi????o para execu????o do script se d?? quando o DOM estiver pronto, ou seja, window.addEvent(‘domready’,function({})); . O problema ?? que, para o Internet Explorer (IE) o carregamento da p??gina ?? meio que desordenado enquanto o Firefox e Chrome (n??o testei nos demais navegadores) possuem uma ??tima engine de carregamento de p??gina. Ou seja, ?? vezes o conte??do da p??gina demora a ser carregado e o DOM fica pronto antes dos controles HTML serem devidamente carregados ocasionando erro na execu????o. Para contornar o problema, basta substituir o ‘domready‘ por ‘load‘. Ent??o a aplica????o do Mootools sobre o conte??do ser?? providenciado logo que a p??gina for totalmente carregada. O problema ?? se houver muito conte??do na p??gina e houver demora no carregamento da p??gina pois o estilo ser?? aplicado apenas no final… da?? ?? s?? ter mesmo paci??ncia (ou remove do frame)!

Obs: outros frameworks JavaScript podem vir a ocasionar o mesmo problema sob as mesmas circunst??ncias.

Categorias
dicas mem??ria sql server

Problema no uso de mem??ria no SQL Server 2008

Se em algum momento, quando em trabalho, estiver recebendo uma das seguintes mensagens abaixo, voc?? est?? tendo s??rios problemas de uso de mem??ria:

“There is insufficient system memory in resource pool ‘internal’ to run this query” *
ou
“H?? mem??ria de sistema insuficiente no pool de recursos internos para executar essa consulta” *

Isso ocorre quando h?? v??rias instru????es SQL sendo executadas em seq????ncia. Como o pool n??o aguenta, os dados, em algumas vezes, podem travar… Mesmo que fisicamente eles estejam l??, n??o se pode mais ser utilizados at?? que o banco seja reiniciado. Para corrigir esse problema h?? duas formas: instalar o hotfix que a Microsoft disponibilizou ou reduzir quantidade de instru????es a serem executadas por vez.

1) Instalar o HotFix

O arquivo est?? dispon??vel em um pack cumulativo p??s SP1 do SQL Server 2008. Para mais informa????es e download, clique aqui.

2) Reduzir a quantidade de instru????es SQL

Fazendo um teste de v??rios UPDATE’s seguidos, consegui obter tal erro. Gerei um arquivo .sql com quase 100mil updates e mandei o SQL Server executar, da?? obtive o erro. Nunca tente isso! Se desejar executar v??rios UPDATE’s ou INSERT’s de vez fragmente a execu????o das instru????es em blocos (nem t??o grandes e nem t??o pequenos) dando uma pausa entre as execu????es. Pode-se utilizar uma Store Procedure buscando os dados em um tabela tempor??ria e executar a instru????o de forma gen??rica (INSERT com SELECT, por exemplo). Tamb??m pode-se usar um artif??cio do ASP.NET, Batch Update, para executar a instru????o de forma gen??rica com alto desempenho.

* A depender da configura????o do SQL Server, ao inv??s de ser o recurso interno (ou internal) pode ser o recurso default.

Categorias
dll flash gr??ficos xml

Gerando Gr??ficos em ASP.NET

Um componente que gosto de utilizar para gerar gr??ficos ?? o FusionCharts. Atrav??s dele ?? poss??vel criar gr??ficos animados e interativos em Flash como gr??ficos em pizza, barra, colunas, funil, linha, ??rea, bolha, etc. Al??m de trabalhar com ASP, ASP.NET, PHP, JSP, ColdFusion, Ruby on Rails, Python e HTML puro, pode-se utilizar em conjunto com bancos de dados como SQL Server, Oracle, MySQL, PostgreSQL, etc… O seu funcionamento consiste em apenas gerar o XML (em tempo de execu????o ou n??o) e indicar qual o gr??fico. Vamos ?? pr??tica…

Acesse o site da FusionCharts e baixe o pacote com os gr??ficos (na vers??o trial vem apenas os gr??ficos comuns – os mais complexos vem na vers??o paga). No arquivo baixado vem os SWF’s dos gr??ficos, exemplos de XML’s a serem gerados para cada gr??ficos, o JavaScript a ser incorporado na p??gina e demais documentos (qualquer d??vida veja na pasta Code > CSNET que cont??m um exemplo em ASP.NET e cont??m todos os arquivos que ir?? precisar). Para nosso exemplo, vamos gerar um gr??fico em pizza.

Crie um Web Site e adicione as pastas conforme a estrutura abaixo:

Adicione no App_Code as classes Util.cs e DbConn.cs. Na Bin adicione a refer??ncia ?? DLL da FusionCharts.dll, na Graficos adicione o SWF do gr??fico que iremos gerar (no caso escolha o Pizza3D.swf) e na pasta Js adicione o FusionCharts.js. Todos esses arquivos s??o encontrados no ZIP que baixou no mesmo caminho dito anteriormente.

Adicione uma p??gina ASPX agora e adicione no body ou no head o script:
<script language=”Javascript” type=”text/javascript” src=”js/FusionCharts.js”></script>

Tamb??m adicione um Literal (Controle) no local onde dever?? surgir o gr??fico. Para fins did??ticos coloque o ID do controle como GraphPizza. Agora tudo ser?? no Code-Behind… Adicione os namespaces Utilities e InfoSoftGlobal usando a cl??usula using. Em seguida criamos um m??todo onde ?? gerado o XML e encapsulado sobre o SWF da seguinte forma:

public void CriarGraficoPizza3D()
{
    string strXML = “<graph showNames=’1′ caption=’Tipos de Clientes’ decimalPrecision=’0′>”;
    strXML += “<set name=’Alvos’ value=’10’ color=’ED1C24’/>”;
    strXML += “<set name=’Prospects’ value=’5′ color=’FFFF00’/>”;
    strXML += “<set name=’Clientes’ value=’2′ color=’00E600’/>”;
    strXML += “</graph>”;
    GraphPizza.Text = FusionCharts.RenderChart(“Graficos/Pizza3D.swf”, “”, strXML, “GraficoPizza3D”, “400”, “300”, false, false);
}

No caso, gero todo o XML contendo os dados a serem apresentados e o passo por par??metro ao m??todo do FusionCharts para renderiz??-lo e exibi-lo. Bem simples, n??o? Esse ?? o exemplo mais f??cil… H?? v??rias formas de apresent??-lo bem como suas op????es fazem com que apresente mais variantes. O mais dif??cil (quer dizer trabalhoso) ?? gerar o XML…

Categorias
dicas iis windows

Corrigindo dois erros em uma tacada s??: O provedor ???Microsoft.Jet.OLEDB.4.0??? n??o est?? registrado na m??quina local e O inicializador de tipo de ‘CrystalDecisions.CrystalReports.Engine.ReportDocument’ acionou uma exce????o.

Problema: Porque o sistema operacional ?? 64bits.
Solu????o: Modo de compatibilidade em 32bits.

Bom se todo post fosse assim t??o r??pido para solucionar nossos problemas. Agora vamos alongar mais as respostas e enriquecer nosso conte??do:

1) O provedor ???Microsoft.Jet.OLEDB.4.0??? n??o est?? registrado na m??quina local

Se por ventura voc?? recebeu esse erro ao executar uma query em um banco de dados usando OleDb mesmo que tenha o Microsoft Office instalado corretamente ?? porque provavelmente a vers??o do driver instalado ?? para 32bits. Para corrigir isso, sua aplica????o deve rodar em 32bits (x86). Nesse post aqui ?? mostrado como compilar sua aplica????o desktop em x86 exclusivamente solucionando o problema. Mas para quem usa aplica????es desktop ter?? que mudar a configura????o do pool de aplica????o no IIS. Para isso v?? no IIS, Pools de Aplicativos e selecione o Pool usado pelas suas aplica????es. Clique em Configura????es Avan??adas e no item Habilitar Aplicativos 32bits configure para True.

2) O inicializador de tipo de ‘CrystalDecisions.CrystalReports.Engine.ReportDocument’ acionou uma exce????o

Caso bem semelhante ao anterior ocorre se sua m??quina ?? 64bits e instalar o Crystal Reports 32bits (x86). O modo de compatibilidade que o Windows coloca para aplica????es instaladas n??o funciona no caso. Para resolver isso basta instalar a vers??o 64bits do Crystal Reports (x64). Mas se voc?? realizou o passo acima e est?? habilitado o modo de compatibilidade de 32bits no IIS ent??o ter?? que usar a vers??o 32bits do Crystal de qualquer jeito.

Categorias
ajax html javascript

Refresh autom??tico ou execu????o de script em ciclos

Durante o desenvolvimento de muitos sistemas web nos deparamos com as seguintes situa????es:

  • P??gina dar refresh automaticamente a cada x segundos;
  • Executar um bloco de script (JavaScript) a cada x segundos;
  • Executar um bloco de c??digo (ASP.NET) a cada x segundos sem refresh na p??gina.

Creio que s??o essas as principais situa????es que s??o mais comumentes buscadas afim de atingir o objetivo de atualiza????o autom??tica. Pois bem, nesse artigo irei demonstrar como solucion??-las de maneira r??pida e eficaz.

Situa????o 1: Atualizar p??gina automacatimente

Para essa situa????o, que ?? a mais simples, basta inserir a seguinte tag no head da p??gina especificando a quantidade de segundos que deve aguardar para dar o refresh:

<META HTTP-EQUIV=“Refresh”
CONTENT=“10;URL=http://thiagomarcal.blogspot.com”>

Situa????o 2: Executar uma fun????o JavaScript a cada x segundos

Se derem uma olhada no post anterior do chat, ver??o que uso uma fun????o chamada setTimeout() que ir?? registrar qual fun????o ir?? executar e qual o tempo de espera. Ent??o, coloque o seguinte c??digo JS:

window.onload = function() {
    setTimeout(“FuncaoJS()”, 10000);
}
 
function FuncaoJS(){
    // Instru????es
    setTimeout(“FuncaoJS()”, 10000);
}

De forma similar, pode-se usar tamb??m a fun????o setInterval().

Situa????o 3: Executar um m??todo ASP.NET a cada x segundos sem dar refresh

J?? para o ASP.NET podemos usar o AJAX. Para isso utilizaremos um Timer e um UpdatePanel. Na p??gina, adicione o ScriptManager e insira o Timer dentro do ContentTemplate do UpdatePanel. Atribua um m??todo no evento OnTick do Timer ficando da seguinte forma:

<Ajax:ScriptManager ID=“ScriptManagerAjax” runat=“server”>
</Ajax:ScriptManager>
<Ajax:UpdatePanel ID=“Painel” runat=“server”>
<ContentTemplate>
<Ajax:Timer ID=“Temporizador” runat=“server” Interval=“10000” OnTick=“ExecutaScript_Tick”>
</Ajax:Timer>
</ContentTemplate>
</Ajax:UpdatePanel>

Se voc?? deixar o Timer fora do UpdatePanel ele ir?? realizar a execu????o do bloco de script, mas ir?? dar PostBack e, consequentemente, refresh na p??gina. Por isso, e mais amig??vel, deve-se deixar dentro.
Agora basta criar o m??todo no Code-Behind contendo o c??digo a ser executado:

protected void ExecutaScript_Tick(object sender, EventArgs e)
{
}

Tranquilo, n???

Categorias
chat javascript visual studio

Criando um Chat em ASP.NET em 1 minuto

Para quem quer ter um chat em seu web site, esse componente ?? uma m??o na roda. Muito f??cil de ser utilizado e configurado, apesar de seus bugs (irei solucion??-los no fim do post). Em poucos segundos voc?? tem um chat funcional! A Web Furbish desenvolveu esse componente e pode ser encontrado tanto aqui quanto aqui e em v??rios mirros pela net. Vamos ao desenvolvimento…
Extraia os arquivos em um local onde poder?? busc??-los. Agora crie um novo Web Site. Se for sua primeira vez usando o componente, primeiramente, deve-se adicionar o novo controle ao ToolBox do Visual Studio. Para isso, clique com o bot??o direito em algum local onde ?? exibido os itens e escolha a op????o Choose Items:

Quando surgir a caixa de sele????o de componentes, na aba .NET Framework Components, clique no bot??o Browse… para selecionar a DLL JaxterChat.dll na pasta onde extraiu os arquivos a princ??pio. Clique em OK para carreg??-la. Ver?? que ela foi adicionada ao ToolBox. Esse passo foi o mais dif??cil! Em seguida copie a pasta JaxterChat (que havia junto ?? DLL) e incorpore-o a seu projeto. Nessa pasta cont??m arquivos de imagem, som, etc. Agora ?? simples: arraste-o para a p??gina para que ele seja adicionado. Pronto! Voc?? j?? tem seu chat
O resto ?? apenas configura????o: tema, tempo de atualiza????o, usar som, nome dos labels, etc. Veja como ficou o meu!

Tranquilo e pr??tico, n??o? Antes dos bugs, vamos a alguns questionamentos?

1) Como fa??o para ter v??rias salas?

Voc?? n??o precisar criar v??rias p??ginas para a cada sala. Basta que, no Page_Load, atribua o nome da sala ao controle. Exemplo: Chat.RoomName = “Blog”; O controle ir?? se encarregar de fazer a separa????o dos usu??rios de acordo com o nome da sala.

2) Como gravar o log das conversas?

Crie um m??todo para o OnMessagePosted do chat. Voc?? pode gravar em banco ou em arquivo. Ficaria mais ou menos assim:

protected void Grava_Log(object sender, WebFurbish.JaxterMessageEventArgs e)
{
      string sala = e.RoomName;
      string usuario = e.UserName;
      string mensagemExibida = e.Message;
      string mensagemHtml = e.MessageHTML;
      string hora = DateTime.Now.ToString(“dd/MM/yyyy HH:mm:ss”);
      // Grava o log em banco ou em arquivo
}
 
3) Como enviar mensagens ??s salas (avisos de administra????o, etc) igual a um Broadcast?
 
Esse ?? um pouco mais complicado e demorado, ent??o irei explicar em linhas gerais como seria:

  • Pegaria todas as sala usando o m??todo GetRoomList();
  • E para cada sala faz-se o envio atrav??s do m??todo SendCustomMessage().

Um exemplo seria: Chat.SendCustomMessage(“Nova not??cia no blog!”, “Administra????o”, “Blog”, false);
O par??metro false indica que essa mensagem n??o ser?? processada em log (ou seja, n??o parass?? pelo m??todo do OnMessagePosted).
 
E n formas que h?? de customizar o chat para trabalhar da forma como desejar. Pois bem, agora vamos aos bugs encontrados. Quando levantei esses bugs enviei um e-mail para eles mas n??o obtive resposta at?? o momento (tamb??m nem tentei mais… :P).

Bug 1: A cada mensagem entrada, a barra de rolagem ao inv??s de acompanhar as mensagens, ela fica sempre apontada para o topo. Ou seja, ela n??o desce…

Notamos isso quando come??a a encher de mensagens. A barra ao inv??s de rolar automaticamente para baixo, fica estagnada no topo. Analisando o JavaScript que ele gera, verifiquei que h?? um problema na fun????o WF_goToBottomScroll. Da??, como n??o posso apagar ela, criei uma outra com o mesmo nome. Como h?? sobrecarga ela ser?? executada tamb??m. ?? armengue, mas ?? uma solu????o. Como funciona essa solu????o? A cada 0 segundos verifico se o foco est?? no campo de texto digitado: se estiver, a barra da div rola automaticamente para baixo. Para que isso funcione, baixe esse script aqui para fazer uma varredura de controles HTML. E adicione o seguinte bloco de c??digo JS na p??gina que cont??m o chat:

window.onload = function() {
    setFocusTracking();
    sizeMsgOut = document.getElementById(‘WF_msgOut’).scrollHeight;
    setTimeout(“WF_goToBottomScroll(‘WF_msgOut’);”, 0);
}


function WF_goToBottomScroll(elemento) {
    var msgOut = document.getElementById(elemento);
    if (document.hasFocus) {
        if (document.hasFocus.id == ‘WF_textInput’)
            msgOut.scrollTop = msgOut.scrollHeight;
    }
    setTimeout(“WF_goToBottomScroll(‘” + elemento + “‘);”, 0);
}

Bug 2: O som n??o funciona!

Quando vi que iria ter som, pensei: “Bala!”. Mas da?? ele exige Java para rodar. Pensei novamente: “Tranquilo! Hoje na net, em sites de banco, tem que ter Java, logo pro chat vai ser pr??-requisito ter tamb??m.”. Instalei a vers??o mais recente e n??o funcionou! Porque, eu n??o sei. Como o componente ?? fechado, a ??nica coisa que deu para ver ?? que ele chama uma classe Java SoundApplet.class j?? compilada. Enfim, providenciei outra solu????o: coloquei a propriedade EnableSound como false e adicionei algumas linhas ao script WF_goToBottomScroll para tocar um som a cada vez que ?? dado uma entrada de mensagem. Esse som ?? puro JavaScript! Primeiro, adicione uma tag de som em background em qualquer local da p??gina, assim:

<BGSOUND id=“sound” src=“”>

Depois crie uma vari??vel global var sizeMsgOut = 0; antes do window.onload . Ou seja, estou criando uma vari??vel global que ir?? armazenar o tamanho de minha div a cada momento e quando entrar na p??gina pela primeira vez ter?? valor 0. Agora, adicione as linhas abaixo na fun????o WF_goToBottomScroll antes do setTimeout:
if (document.getElementById(‘WF_msgOut’).scrollHeight != sizeMsgOut) {
    document.all.sound.src = “JaxterChat/Sounds/alert.au”;
    sizeMsgOut = document.getElementById(‘WF_msgOut’).scrollHeight;
}

A cada itera????o da fun????o, verifico se o tamanho da div que cont??m as mensagens ?? diferente do valor armazenado na vari??vel. Se for ?? porque entrou nova mensagem logo deve tocar o som.

Esses foram dois bugs que encontrei quando estava usando-o. Pode ser que haja outros que n??o encontrei. Se n??o tiver ?? bom, pois ?? um chat bem legalzinho e f??cil e manipular. At?? mais!

Categorias
komerci

Gerando o C??digo de Verifica????o (CODVER) para o Komerci em ASP.NET ou em Qualquer Linguagem

Quem est?? come??ando a fazer a integra????o de sua loja virtual com o Komerci e est?? lendo o manual da vers??o Integrada, se deparou com a parte da gera????o do c??digo de verifica????o. Eles disponibilizam uma classe Java denominada CodVer.class. Da?? voc?? pensa: “Para eles disponibilizarem uma classe espec??fica em Java deve ser porque ?? algo muito espec??fico ou cabuloso!”. Mas n??o ??… N??o sei porque no pr??prio manual eles n??o colocam um pseudo-algoritmo ou diagramas que possam facilitar para a elabora????o nas demais linguagens. No mesmo manual eles dizem que disponibilizam um ActiveX para quem usa ASP Cl??ssico. ?? de dar risada! Bem, o c??digo ?? bem simples. J?? converti do Java para C# e, para quem est?? familiarizado com C/Java, vai entender o algoritmo rapidinho e elaborar o seu tamb??m:

public string GeraCodigoVerificao(string _numfil, string _valor)
{
// In??cio da codifica????o
string codigo = string.Empty;
// N??mero da filia????o
int numfil = 0;
numfil = int.Parse(_numfil);
// Total
int total = 0;
string parteInteira = _valor.Substring(0, _valor.IndexOf(‘.’));
total = int.Parse(parteInteira);
// Codifica????o a hora
int segundosAgora = DateTime.Now.Second;
int segundosAgoraCodificados = 0;
switch (segundosAgora)
{
case 0:
segundosAgoraCodificados = 11;
break;
case 1:
segundosAgoraCodificados = 17;
break;
case 2:
segundosAgoraCodificados = 21;
break;

case 3:
segundosAgoraCodificados = 31;
break;
case 4:
segundosAgoraCodificados = 56;
break;
case 5:
segundosAgoraCodificados = 34;
break;
case 6:
segundosAgoraCodificados = 42;
break;
case 7:
segundosAgoraCodificados = 3;
break;
case 8:
segundosAgoraCodificados = 18;
break;
case 9:
segundosAgoraCodificados = 13;
break;
case 10:
segundosAgoraCodificados = 12;
break;
case 11:
segundosAgoraCodificados = 18;
break;
case 12:

segundosAgoraCodificados = 22;
break;
case 13:
segundosAgoraCodificados = 32;
break;
case 14:
segundosAgoraCodificados = 57;
break;
case 15:
segundosAgoraCodificados = 35;
break;
case 16:
segundosAgoraCodificados = 43;
break;
case 17:
segundosAgoraCodificados = 4;
break;
case 18:
segundosAgoraCodificados = 19;
break;
case 19:
segundosAgoraCodificados = 14;
break;
case 20:
segundosAgoraCodificados = 9;
break;
case 21:
segundosAgoraCodificados = 20;
break;
case 22:
segundosAgoraCodificados = 23;
break;
case 23:
segundosAgoraCodificados = 33;
break;
case 24:
segundosAgoraCodificados = 58;
break;
case 25:
segundosAgoraCodificados = 36;
break;
case 26:
segundosAgoraCodificados = 44;
break;
case 27:
segundosAgoraCodificados = 5;
break;
case 28:
segundosAgoraCodificados = 24;
break;
case 29:
segundosAgoraCodificados = 15;
break;
case 30:
segundosAgoraCodificados = 62;
break;
case 31:
segundosAgoraCodificados = 25;
break;
case 32:
segundosAgoraCodificados = 34;
break;
case 33:
segundosAgoraCodificados = 59;
break;
case 34:
segundosAgoraCodificados = 37;
break;
case 35:
segundosAgoraCodificados = 45;
break;
case 36:
segundosAgoraCodificados = 6;
break;
case 37:
segundosAgoraCodificados = 25;
break;
case 38:
segundosAgoraCodificados = 16;
break;
case 39:
segundosAgoraCodificados = 27;
break;
case 40:
segundosAgoraCodificados = 63;
break;
case 41:
segundosAgoraCodificados = 26;
break;
case 42:
segundosAgoraCodificados = 35;
break;
case 43:
segundosAgoraCodificados = 60;
break;
case 44:
segundosAgoraCodificados = 38;
break;
case 45:
segundosAgoraCodificados = 46;
break;
case 46:
segundosAgoraCodificados = 7;
break;
case 47:
segundosAgoraCodificados = 26;
break;
case 48:
segundosAgoraCodificados = 17;
break;
case 49:
segundosAgoraCodificados = 28;
break;
case 50:
segundosAgoraCodificados = 14;
break;
case 51:
segundosAgoraCodificados = 36;
break;
case 52:
segundosAgoraCodificados = 2;
break;
case 53:
segundosAgoraCodificados = 39;
break;
case 54:
segundosAgoraCodificados = 47;
break;
case 55:
segundosAgoraCodificados = 8;
break;
case 56:
segundosAgoraCodificados = 29;
break;
case 57:
segundosAgoraCodificados = 22;
break;
case 58:
segundosAgoraCodificados = 55;
break;
case 59:
segundosAgoraCodificados = 33;
break;
}
// C??lculos e atribui????es
segundosAgora = segundosAgoraCodificados;
string pad = string.Empty;
if (segundosAgora < 10)
pad = “0”;
else
pad = “”;
string ipremoto = Request.ServerVariables[“REMOTE_ADDR”];
int tamIP = ipremoto.Length;
int i_5_ = total + segundosAgora;
int i_6_ = segundosAgora + tamIP;
int i_7_ = segundosAgora * numfil;
int i_8_ = i_7_.ToString().Length;
// Monta o c??digo
codigo = i_7_.ToString() + i_5_.ToString() + i_6_.ToString() + “-“ + i_8_.ToString() + pad + segundosAgora.ToString();
// Retorna
return codigo;
}

Categorias
komerci post

Dar POST em um Form e Redirecionar para P??gina Externa com ASP.NET

Recentemente estava programando o envio de informa????es de pagamento para o Komerci (estrutura de pagamentos da Redecard) e em certo momento precisaria realizar um POST a um endere??o passando par??metros/vari??veis a ela. Antes de partir para a solu????o, vou revisar aqui alguns conceitos b??sicos que podem ser usados para esse tipo de envio:

  • Responde.Redirect: Por esse m??todo s?? podemos passar os par??metros via GET;
  • Server.Transfer: Por esse m??todo podemos usar o POST mas se o destino estiver no mesmo dom??nio da aplica????o; 
  • HttpWebRequest: Por esse m??todo voc?? pode fazer uma requisi????o atrav??s de uma convers??o dos dados em bytes passando via POST/GET, contudo n??o h?? como fazer um redirecionamento;
  • WebClient: Por esse m??todo pode-se realizar a passagem de par??metros, mas tamb??m n??o consegue fazer o redirecionamento ap??s o envio.

Analisando a melhor forma de fazer isso, encontrei um artigo no Code Project na qual baseei-me para fazer o meu e simplifiquei/facilitei mais o processo. Quando criamos um Web Form ele j?? vem com uma tag form. Adicionei dentro dele um Literal para adicionarmos meus par??metros que ser??o gerados via Code-Behind.

Agora vamos criar um m??todo que ir?? criar os inputs com atributo hidden e seus respectivos valores, montar um JavaScript que for??a o POST e “startar” o processo:

private void PostRedirectAspNet()
{
StringBuilder formulario = new StringBuilder();
// Adiciono todos os campos e seus valores que devem ser passados via POST
formulario.Append(“<input type=”hidden” name=”TRANSACAO” value=”04″>”);
// Crio um JavaScript para for??ar o POST na p??gina corrente
formulario.Append(“<script language=”javascript”>”);
formulario.Append(“var theForm = document.forms[‘formAsp’]; if (!theForm) { theForm = document.formAsp; } “);
formulario.Append(“theForm.action = “http://thiagomarcal.blogspot.com”;”);
formulario.Append(“theForm.method = “post”;”);
formulario.Append(“theForm.submit();”);
formulario.Append(“</script>”);
// Aplica o script gerado no Literal para iniciar o processo
FormularioPost.Text = formulario.ToString();
}
 
Assim, basta cham??-lo onde quiser que ele ir?? gerar as tags HTML contendo as informa????es desejadas,  realizar?? o POST e, consequentemente, seu redirecionamento. Bem simples, n??o? Esse m??todo (de fazer) pode ser aproveitado para quaisquer linguagem de programa????o (PHP, Java, ASP, .NET, CodFusion, etc). O importante ?? como providenciar seu funcionamento de acordo com a l??gica.