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
nfe nota fiscal eletr??nica salvador xml

NfseUtil – Utilit??rio e C??digo-fonte de Aplicativo que Assina e Envia os XMLs para emiss??o da Nota Fiscal Eletr??nica

Depois de nos matarmos para entender o funcionamento, noites em claro para testes e mais testes, a SEFAZ – Salvador disponibilizou uma DLL e um conjunto de c??digos-fonte para realizar todo o processo de assinatura e envio. Agora ?? m??o na roda para quem ir?? come??ar a implementar. Para quem j?? passou por esse sofrimento agora ?? s?? descan??o… Para mais informa????es acesse aqui. Abaixo tem os links dos principais arquivos para o utilit??rio, documentos e XMLs de exemplo:

Categorias
certificado digital linux nfe nota fiscal eletr??nica salvador windows xml

Usando Certificado Digital para Nota Fiscal Eletr??nica no Windows Server 2003/2008

Desde que lan??aram a nota fiscal eletr??nica, n??s programadores ficamos com receio do uso das leitoras e cart??es nos sistemas operacionais para a assinatura do XML usando o certificado digital. Geralmente os servidores usufruem de alguma vers??o do Windows Server para acomodar as aplica????es web (que realizam o processo de assinatura) al??m de proporcionar mais robustez e qualidade diante dos trabalhos. Mas as leitoras e cart??es simplesmente n??o funcionam como deveriam! Incompatibilidade… dizem.
Enfim… como fazer? Simplesmente ?? s?? usar outro sistema operacional!

“Mas como vou usar se meu servidor ?? Windows Server e n??o posso instalar outro SO?” (Voc?? se perguntando)

Resposta: Use os dois atrav??s de uma m??quina virtual! H?? v??rios tipos e para v??rios gostos ficando a crit??rio do que voc?? for utilizar. Recomendo o VMware! Ele disp??e de duas vers??es (h?? outras que voc?? pode optar tamb??m) que s??o ??timas para uso: Player e Server. Em resumo, a Player ?? limitada pois seu uso ?? simples mas n??o deixa de ser ??til.

Vamos ao processo que ser?? bem simples:

  1. Instale uma das vers??es do VMware;
  2. Instale um Windows 2000/XP/Vista nela contanto que seja compat??vel com sua leitora/cart??o (a instala????o ?? bem simples e sem dificuldades – ?? mais f??cil do que quando vai instalar no computador “de verdade” bastando seguir o Wizard dela);
  3. Agora conecte a leitora do cart??o no PC. Note que no Windows Server n??o acontecer?? nada, mas no Windows interno come??ar?? a instala????o;
  4. Em seguida espete o cart??o na leitora;
  5. Abra o utilit??rio da leitora (atrav??s do Windows da m??quina virtual) e ver?? que o cart??o foi lido corretamente.

Pronto! Da?? basta compartilhar uma pasta entre o Windows Server e a m??quina virtual (atrav??s do VMWare se faz isso) e, enquanto no Windows Server vai jogando os XMLs nessa pasta, o Windows MV (da m??quina virtual) vai assinando/enviando. Bem louco, n??o? Mas funciona! Pode at?? ter o Linux virtualizando um Windows que a leitora ir?? funcionar.

Categorias
nfe nota fiscal eletr??nica salvador xml

Processo de Assinatura de Rps/Lote – Nota Fiscal Eletr??nica

Lendo aquele bolo de especifica????o da ABRASF muitos devem perguntar: “Certo, sei quais campos colocar no XML mas qual a ordem do processo de assinatura?”. A documenta????o n??o fica claro realmente como e qual a melhor forma de assinar. Realize a seguinte ordem:

  1. Gere o XML da Rps e assine;
  2. Se for enviar mais de uma Rps em um mesmo lote, repita o passo 1 para cada Rps;
  3. Anexe todas as Rps j?? assinadas no XML do Lote;
  4. Assine o Lote e fa??a o envio.

Seu XML de envio deve ficar semelhante ?? figura abaixo:

Para fazer a assinatura dos XMLs, utilize a fun????o abaixo:

private XmlDocument AplicaAssinatura(string xml, string uri)
{
try
{
// Obtem o certificado
X509Certificate2 X509Cert = ObtemCertificado();
// Cria um documento XML para carregar o XML
XmlDocument docXML = new XmlDocument();
docXML.PreserveWhitespace = true;
// Carrega o documento XML
docXML.LoadXml(xml);
// Cria o objeto XML assinado
SignedXml signedXml = new SignedXml(docXML);
// Assina com a chave privada
signedXml.SigningKey = X509Cert.PrivateKey;
// Atribui o m??todo de canoniza????o
signedXml.SignedInfo.CanonicalizationMethod = “http://www.w3.org/TR/2001/REC-xml-c14n-20010315”;
// Atribui o m??todo para assinatura
signedXml.SignedInfo.SignatureMethod = “http://www.w3.org/2000/09/xmldsig#rsa-sha1”;
// Cria a referencia
Reference reference = new Reference();
// Pega a URI para ser assinada
XmlAttributeCollection _Uri = docXML.GetElementsByTagName(uri).Item(0).Attributes;
foreach (XmlAttribute _atributo in _Uri)
{
if (_atributo.Name == “id”)
reference.Uri = “#” + _atributo.InnerText;
}
// Adiciona o envelope ?? refer??ncia
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Atribui o m??todo do Hash
reference.DigestMethod = “http://www.w3.org/2000/09/xmldsig#sha1”;
// Adiciona a referencia ao XML assinado
signedXml.AddReference(reference);
// Cria o objeto keyInfo
KeyInfo keyInfo = new KeyInfo();
// Carrega a informa????o da KeyInfo
KeyInfoClause rsaKeyVal = new RSAKeyValue((System.Security.Cryptography.RSA)X509Cert.PrivateKey);
KeyInfoX509Data x509Data = new KeyInfoX509Data(X509Cert);
x509Data.AddSubjectName(X509Cert.SubjectName.Name.ToString());
keyInfo.AddClause(x509Data);
keyInfo.AddClause(rsaKeyVal);
// Adiciona a KeyInfo
signedXml.KeyInfo = keyInfo;
// Atribui uma ID ?? assinatura
signedXml.Signature.Id = “Assigned” + uri;
// Efetiva a assinatura
signedXml.ComputeSignature();
// Obtem o XML assinado
XmlElement xmlDigitalSignature = signedXml.GetXml();
// Adiciona o elemento assinado ao XML
docXML.DocumentElement.AppendChild(docXML.ImportNode(xmlDigitalSignature, true));
// Retorna o XML
return docXML;
}
catch (Exception erro) { throw erro; }
}

O par??metro URI ?? o nome da tag geral que deve ser assinada de um XML, no caso dever?? assinar as tags InfRps (cada uma) e LoteRps. A fun????o ObtemCertificado j?? foi exibida aqui em um t??pico anterior que serve para captura do certificado digital.

Categorias
rss xml

Criar RSS

Depois de muito tempo voltei a escrever alguns artigos. Pouco tempo dispon??vel e algumas prioridades… Bem, esse t??pico, apesar de simples, ?? de bem ajuda para que desejar gerar RSS dinamicamente. O c??digo ?? bem simples: apenas Response!
Crie uma p??gina que ir?? exibir o RSS e coloque o seguinte c??digo no Page_Load:

StringBuilder rss = new StringBuilder();
rss.AppendLine(“<rss version=”2.0″>”);
rss.AppendLine(“<channel>”);
rss.AppendLine(“<title>Thiago Mar??al</title>”);
rss.AppendLine(“<link>http://thiagomarcal.blogspot.com/</link>”);
rss.AppendLine(“<description>Blog que compartilha id??ias e c??digo-fontes ?? comunidade.</description>”);
rss.AppendLine(“<language>pt-br</language>”);
SqlDataReader dr = consulta(“SELECT * “);
while (dr.Read())
{
        rss.AppendLine(“<item>”);
        rss.AppendLine(“<title>” + Funcoes.RemoveHTML(Server.HtmlDecode(dr[“titulo”].ToString())) + “</title>”);
        rss.AppendLine(“<description>” + Funcoes.RemoveHTML(Server.HtmlDecode(dr[“texto”].ToString())) + “</description>”);
        rss.AppendLine(“<link>” + dr[“link”].ToString() + “</link>”);
        rss.AppendLine(“<pubDate>” + DateTime.Parse(dr[“data”].ToString()).ToString(“dd/MM/yyyy HH:mm:ss”) + “</pubDate>”);
        rss.AppendLine(“</item>”);
}
rss.AppendLine(“</channel>”);
rss.AppendLine(“</rss>”);
dr.Close();
Response.ContentType = “text/xml”;
Response.Write(rss.ToString());

Bem simples, n??o? O m??todo Funcoes.RemoveHTML remove qualquer tag HTML que contenha na string. Eu criei uma bem simples baseada em express??o regular. Voc?? pode criar a seu gosto…