Categorias
ajax dicas javascript

Usando o ScripManager em sequ??ncia

Esse artigo ser?? apenas uma dica para os desatentos. Quando voc?? usa o ScriptManager para exibir um alerta, por exemplo, e em outro trecho do c??digo fazer a mesma coisa, ver?? que apenas o primeiro alerta ?? demonstrado e o segundo n??o. O porqu?? disso ?? se estiver reaproveitando o mesmo script e n??o diferenciar o bloco de execu????o dele, sempre ser?? exibido apenas o primeiro. Logo, o certo, ?? ter algo do tipo:

// Exibe o primeiro alerta
ScriptManager.RegisterStartupScript(Page, typeof(Page), “script1”, “alert(‘Alerta 1’);”, true);




// Exibe o segundo alerta
ScriptManager.RegisterStartupScript(Page, typeof(Page), “script2”, “alert(‘Alerta 2’);”, true);

Reparou no bloco script1 e script2? ?? isso.

Categorias
dicas iis plesk seguran??a windows

Recuperando a senha da conta identidade do Pool de Aplicativos do Plesk no IIS

Mais um t??tulo longo… um tanto confuso, mas em resposta a uma d??vida de um amigo:

“Exclui um Application Pool no IIS e nela estava configurada uma conta interna do Plesk: IWAM_plesk. N??o sei a senha utilizada. Tem como recuperar a senha para recriar um novo application?”

Sim! O Plesk sempre nos pregando aquela pe??a… Os dois pools que o Plesk utiliza est??o vinculados ?? conta IWAM_plesk (conta interna) para que possam manipular corretamente os arquivos e seus aplicativos (bem como as permiss??es necess??rias) no sistema operacional:

  1. plesk(default)(2.0)(pool)
  2. plesk(default)(4.0)(pool)

 Ent??o fa??amos as seguintes etapas:

  • Abra o Prompt de Comando em Modo Administrador;
  • Navegue para a pasta C:Windowssystem32inetsrv;
  • Execute o comando appcmd.exe list apppool ???plesk(default)(2.0)(pool)??? /text:*
Aparecer?? a descri????o completa desse pool. Procure a entrada referente ao usu??rio e senha do Plesk conforme a figura abaixo:
Agora voc?? tem a senha do usu??rio! No site de Dhiraj tem mais detalhes acerca desse tipo de recupera????o.
Categorias
crystal reports dicas

Calculando saldo final no Crystal Reports

Antes de come??ar o artigo, queria dizer que nesse m??s irei responder muitas das quest??es que recebo por e-mail (calma que um dia sempre respondo) em forma de artigo, ent??o muitos deles ser??o curtos e r??pidos. Uma das respostas ser?? nesse artigo.
Bem, como calculo o saldo, linha a linha, de entradas e sa??das no Crystal Reports? De forma bem simples: uso de vari??veis globais. Um bom artigo que sempre recomendo ?? o de Vince Varallo: n??o tem erro!
Supondo que voc?? tenha o seguinte relat??rio e com os respectivos campos:

Esses dados j?? devem ser puxados do DataSet utilizado (na d??vida, veja o post de criar relat??rios). Agora adicionamos um Formula Field com o nome SALDO.

Clique em Use Editor e escreva a seguinte f??rmula:

Global NumberVar SALDO_FINAL;

if (RECORDNUMBER = 1) then
    SALDO_FINAL := @ENTRADA – @SAIDA
else
    SALDO_FINAL := SALDO_FINAL + @ENTRADA – @SAIDA

Ou seja, na primeira linha obtenho o saldo inicial diminuindo a ENTRADA da SAIDA. Nos demais j?? adiciono o saldo anterior. Tranquilo? Agora basta adicionar no relat??rio esse campo criado.

Categorias
dicas host iis site web

Testando um Web-Site na pr??pria m??quina como se fosse externamente

Tentei elaborar um t??tulo de forma que ficasse entend??vel o que eu queria dizer. N??o sei se ajuda, mas significa que:

“Testaremos o acesso a um web-site que est?? publicado no IIS mas que no navegador n??o iremos usar localhost para busc??-lo e sim o pr??prio endere??o.”

Ficou bom agora? Ent??o vamos l??. No IIS crie um web-site. O processo ?? bem simples:

Pronto! J?? temos nosso site, mas se formos testar: http://thiagomarcal.com.br/ n??o encontra!

Por que isso? Quando queremos procurar um site, o sistema operacional analisa o hostname para saber onde encontrar esse endere??o: se for interno e mapeado usa-se a rede interna, sen??o procura a rede externa dentre outros. Como n??o existe o mapeamento e tampouco o dom??nio externo, n??o acha nada. Ent??o vamos alterar o arquivo de host.

Siga para o caminho: C:WindowsSystem32driversetc e abra o arquivo hosts, em modo texto, para adicionarmos algumas entradas.

# copyright (c) 1993-2009 microsoft corp.

#
# this is a sample hosts file used by microsoft tcp/ip for windows.
#
# this file contains the mappings of ip addresses to host names. each
# entry should be kept on an individual line. the ip address should
# be placed in the first column followed by the corresponding host name.
# the ip address and the host name should be separated by at least one
# space.
#
# additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# for example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

# localhost name resolution is handled within dns itself.
# 127.0.0.1 localhost
# ::1 localhost

127.0.0.1 thiagomarcal.com.br

Coloque, na ??ltima linha, o IP, tabula????o e nome do dom??nio nessa ordem para o site desejado. Salve e teste novamente o acesso. E pronto!

Mais f??cil do que isso: imposs??vel!

Categorias
dicas php visual studio web-service wsdl

Consumindo Web-Service PHP atrav??s do ASP.NET (C#)

J?? passou por aqui um post sobre de como consumir um web-service, mas era em ASP.NET. Agora como consumir um web-service em PHP? Da mesma forma. N??o muda! O fato de escrever esse post ?? apenas e pelo simples fato de ter um certo inconveniente na elabora????o do web-service em PHP.
Se procurar na net, recomendo o artigo de Maur??cio Reckziegel da iMasters que ?? muito bom e explica certinho como fazer. Se voc?? seguir ?? risca o que est?? escrito ir?? conseguir elaborar um web-service em PHP normalmente e ir?? conseguir consumir, menos em ASP.NET. N??o ?? que a mat??ria esteja errada, ?? porque o ASP.NET ?? chato com a valida????o do WSDL que ?? gerado pelo PHP. O documento (WSDL) tem que ser gerado na m??o e, quando n??o ?? gerado de forma autom??tica, estamos suscept??veis ao erro. Com o web-service em PHP ?? assim…
Ent??o, digamos que voc?? tenha elaborado o web-service em PHP e j?? fez refer??ncia na sua aplica????o. Contudo sua aplica????o pode dar erro ou retornar nada. Primeiramente, todo WSDL que iremos usar deve ser validado antes de ser devidamente consumido. O Visual Studio disp??e de uma ferramenta que valida e gera a classe consumidora (que n??o precisar ser usada pois est?? intr??nseco na ferramenta). V?? em Iniciar > Todos os Programas > Microsoft Visual StudioVisual Studio ToolsVisual Studio 2008 Command Prompt. Ir?? abrir um prompt de comando. Escreva por exemplo: wsdl http://thiagomarcal.blogspot.com/webservice.php?wsdl . Se der tudo certo, ir?? surgir um resultado semelhante a esse:

Se estiver tudo OK, ent??o pode usar tranquilamente, caso contr??rio ir?? surgir o seguinte problema:

Microsoft (R) Web Services Description Language Utility

[Microsoft (R) .NET Framework, Version 2.0.50727.3038]
Copyright (C) Microsoft Corporation. All rights reserved.

Warning: This web reference does not conform to WS-I Basic Profile v1.1.

Ou seja, o WSDL gerado pelo PHP n??o est?? conforme o padr??o. Dando uma alterada aqui e ali, podemos usar o seguinte c??digo para gerarmos o web-service em PHP dentro dos conformes:

<?php
// Requerimento aos componentes
require_once(‘nusoap/nusoap.php’);
include(“class.phpmailer.php”);
include(“class.smtp.php”);


// Cria????o da inst??ncia
$server = new soap_server();


// Registro do m??todo
$server->register(‘EnviaMail’);


// WSDL
$server->configureWSDL(‘server.EnviaMail’,’urn:server.EnviaMail’);
$server->wsdl->schemaTargetNamespace = ‘urn:server.EnviaMail’;
// registra o m??todo a ser oferecido
$server->register(‘EnviaMail’, //nome do m??todo
array(‘email’ => ‘xsd:string’), //par??metros de entrada
array(‘return’ => ‘xsd:string’), //par??metros de sa??da
‘urn:server.EnviaMail’, //namespace
‘urn:server.EnviaMail#EnviaMail’, //soapaction
‘rpc’, //style
‘literal’, //use
‘Retorna se o e-mail foi enviado’ //documenta????o do servi??o
);


// Defini????o do m??todo a ser utilizado
function EnviaMail($email) {
return “E-email enviado com sucesso!”;
}


// Requisi????o para uso do servi??o
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ;
$server->service($HTTP_RAW_POST_DATA);
?>

Perceberam a diferen??a? Praticamente nenhuma, mas h??: o estilo do documento. N??o irei entrar em detalhes, mas dois tipos de documentos mais usados: encoded e literal (veja mais nesse artigo). Use literal! Com isso seu web-service ser?? consumido certinho…
Se estiver com o erro: O cliente encontrou o tipo conte??do de resposta de ‘ text/html; charset = utf-8 ‘, mas era esperado ‘text/xml’ ou The client find the answer ‘text/html’, but was expected ‘text/xml’. verifique se seu web-service est?? imprimindo conte??do HTML (echo) e comprometendo o retorno dos dados. Tranquilo, n???

Categorias
banco de dados desempenho dicas sql server

Problemas de cache no SQL Server

Se voc?? estiver recebendo uma mensagem do tipo:

O SQL Server encontrou %d ocorr??ncia(s) de libera????o de armazenamento em cache para o cache ‘%s’ (parte do cache do esquema) devido ?? manuten????o do banco de dados ou opera????es de reconfigura????o.

ou

SQL Server has encountered %d occurrence(s) of cachestore flush for the ‘%s’ cachestore (part of plan cache) due to some database maintenance or reconfigure operations.

?? porque, segundo a MSDN, ao limpar o cache do plano gera uma recompila????o de todos os planos de execu????o subseq??entes e pode provocar uma queda repentina e tempor??ria no desempenho da consulta. Para cada armazenamento em cache limpo no cache do plano, aparece a mensagem supracitada.

Para resolver isso, basta ir no banco correspondente, clicar com o direito sobre ele e escolher Properties (Propriedades). Entre em Options (Op????es) e configure o Auto-Close (Fechamento Autom??tico) para False.

Categorias
cufon dicas javascript jquery master page

Cufon na Master Page

Para quem est?? com problemas no carregamento/aplica????o do Cufon quando estiver usando Master Page, chame-o da seguinte forma:

<script>
Cufon.now();
function pageLoad(sender, args) {
      Cufon.refresh();
}
</script>

Assim ele aplica corretamente ap??s o carregamento da p??gina.

Categorias
ajax dicas

Out of Memory at Line – Mem??ria Insuficiente

Dica r??pida para quem tiver esse tipo de problema: remova o atributo LoadScriptsBeforeUI=’false’ from ScriptManager. Dentro de Grid edit??veis ou em formul??rios din??micos a valida????o do Javascript falha quando estiver fazendo esse tipo de otimiza????o.

Categorias
dicas erros web.config

Erros mais frequentes no ASP.NET

Para quem est?? come??ando a desenvolver com ASP.NET e se depara com a tela amarela, j?? deve ficar horrorizado com a linguagem. Diferente das linguagens ultrapassadas, essa tela ?? muito ??til para desvendar os problemas e, posteriormente, corrig??-los.

As telas de erro do ASP.NET mais comuns s??o aquelas nas quais s??o exibidas direto o erro para o usu??rio. Lembrando que j?? vimos em um post que isso demonstra vulnerabilidade do sistema mas que, a n??vel de homologa????o, ?? utiliz??vel para identificar os problemas, an??lise da pilha e comportamento do mesmo.

N??o vou explicar tudo sobre erros no ASP.NET sen??o ter??amos um grande post de tudo o que ocasiona erros, mas para auxiliar os iniciantes, a Locaweb disponibilizou um t??pico nas quais explica os erros mais comuns de programa????o bem como corrig??-los. D??em uma lida para conferir… Veja aqui!

Categorias
ajax componentes dicas javascript

Utilizando mensagem de confirma????o e executando c??digo de acordo com o que foi clicado na mesma p??gina

N??o sei se o t??tulo ficou claro com o que eu queria dizer, mas vejamos a seguinte situa????o:

“Quero colocar uma mensagem de confirma????o via code-behind onde ir?? ser emitida para o usu??rio e a depender do que ele escolher ir?? ser processado um certo trecho de c??digo ou outro. Tipo o confirm do JavaScript, s?? que ?? executado pelo ASP.NET.”

No Code Project tem v??rias formas de implementa????o e umas delas me chamou a aten????o: o de Yavuz Kucukpetek. Usando AJAX ?? poss??vel transformar um Panel nessa janela flutuante usando o ModalPopupExtender. Dei uma simplificada no c??digo dele (j?? informei que n??o fiz, apenas ajustei) e voc?? podem baixar o controle modificado aqui.

Depois que baixarem o controle, adicione no seu projeto. Vamos l??! Na p??gina que deseja utilizar o controle, registre-o e coloque-o da seguinte forma:

<%@ Register Src=”~/inc_ConfirmMessage.ascx” TagName=”ConfirmacaoBox” TagPrefix=”Thiago” %>


<Thiago:ConfirmacaoBox ID=”ConfirmacaoBox” runat=”server”></Thiago:ConfirmacaoBox>

No code-behind dever?? ficar o seguinte:

    protected void Page_Load(object sender, EventArgs e)
    {
        ConfirmacaoBox.MsgBoxAnswered += Mensagem_Resposta;
    }

    public void Mensagem_Resposta(object sender, inc_ConfirmMessage.MsgBoxEventArgs e)
    {
        if (e.Answer == inc_ConfirmMessage.enmAnswer.OK)
        {
            // Se clicou em OK processa o que deseja
        }
        else
        {
            // Sen??o processa outra coisa
        }
    }

    protected void ExecutaProcesso_Click(object sender, EventArgs e)
    {
        ConfirmacaoBox.AddMessage(“Deseja continuar o c??lculo do processo na mesma p??gina?”, inc_ConfirmMessage.enmMessageType.Attention, true, true, “”);
    }

Pronto! Apenas isso… Vamos ??s explica????es. No Page_Load precisamos informar o m??todo que ir?? gerenciar as decis??es do usu??rio, por isso informamos o Mensagem_Resposta. Dentro dele ir?? conter os processos que ir??o ser executados a depender da escolha. O ExecutaProcesso_Click ?? o m??todo executado quando clicamos no bot??o que ir?? disparar a pergunta.

“Ah Thiago, mas a?? ?? s?? apenas uma confirma????o. E se eu quiser v??rias intera????es?”

Simples, basta adicionar outra Caixa de Confirma????o para a segunda etapa de decis??es chamando-a dentro do processo de decis??o da primeira e assim por diante.