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...
Mostrando postagens com marcador xml. Mostrar todas as postagens
Mostrando postagens com marcador xml. Mostrar todas as postagens
NfseUtil - Utilitário e Código-fonte de Aplicativo que Assina e Envia os XMLs para emissão da Nota Fiscal Eletrônica
Postado por
Thiago Marçal
on quinta-feira, 1 de julho de 2010
/
Marcadores:
nfe,
nota fiscal eletrônica,
salvador,
xml
/
Comments: (18)
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:
Usando Certificado Digital para Nota Fiscal Eletrônica no Windows Server 2003/2008
Postado por
Thiago Marçal
/
Marcadores:
certificado digital,
linux,
nfe,
nota fiscal eletrônica,
salvador,
windows,
xml
/
Comments: (2)
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:
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:
- Instale uma das versões do VMware;
- 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);
- 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;
- Em seguida espete o cartão na leitora;
- Abra o utilitário da leitora (através do Windows da máquina virtual) e verá que o cartão foi lido corretamente.
Processo de Assinatura de Rps/Lote - Nota Fiscal Eletrônica
Postado por
Thiago Marçal
on domingo, 20 de junho de 2010
/
Marcadores:
nfe,
nota fiscal eletrônica,
salvador,
xml
/
Comments: (2)
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:
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.
- Gere o XML da Rps e assine;
- Se for enviar mais de uma Rps em um mesmo lote, repita o passo 1 para cada Rps;
- Anexe todas as Rps já assinadas no XML do Lote;
- Assine o Lote e faça o envio.
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.
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...
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...



