Olá Internautas, hoje gostaria de dar continuidade ao artigo com controle feito usando User Control Windows executando no Internet Explorer.
De acordo com o artigo passado, ou seja, o parte 1 (http://aspneti.com/User+Control+Windows+executando+no+Internet+Explorer+parte+1+861,0.aspx), ficou faltando a parte final onde executo de fato o controle dentro da página web.
Peço que leia atentamente a primeira parte, antes de começar a segunda. Criei um projeto do tipo Web chamado "ProjetoWeb" e dentro tem uma pasta chamada "Controles". Depois de compilar, enviei tudo para dentro da pasta, todas as dlls, arquivos de configuração e tudo mais.
É necessário marcar todas as referências como "Copy Local" igual a "True". Tive que fazer isso para funcionar de fato o controle. Imagem 1
Imagem 1
clique para ampliar
Depois de compilado, o software jogou tudo para a pasta "Controles" automaticamente. Imagem 2
Imagem 2
clique para ampliar
O próximo passo foi criar uma página web específica que usa o controle compilado. Pra isso, uso um "object" e com ele posso passar parâmetros necessários para acesso. Na parte HTML (aspx) utilizo o "<asp:literal>". Code 1.
<table border="0">
<tr>
<td align="center" valign="top">
<br />
<asp:Literal ID="objeto" runat="server" />
</td>
</tr>
</table>
..........................................................
Code 1
Na parte C#, fica bem simples e fácil. Criei uma "StringBuilder" e depois atribuir ao meu objeto "literal" chamado objeto. Code 2
StringBuilder stControle = new StringBuilder();
stControle.Append("<object id='ControlConfigurarScanner'
classid='Controles/DigitalizadoraRetaguarda.dll#ImagonFormDigitalizadora.ControlConfigurarScanner'
height='161' width='445'>");
stControle.Append("<PARAM NAME='Parametro1' VALUE='0' />");
stControle.Append("<PARAM NAME='Parametro2' VALUE='1' />");
stControle.Append("<PARAM NAME='Parametro3' VALUE='2' />");
stControle.Append("<PARAM NAME='Parametro4' VALUE='3' />");
stControle.Append("<PARAM NAME='Parametro5' value='4' />");
stControle.Append("</object>");
objeto.Text = stControle.ToString();
......................................................................
Code 2
É necessário prestar atenção para alguns fatos importantes utilizando o "object". O id, coloquei o mesmo nome da tela .cs, ou seja, "ControlConfigurarScanner". Na parte de classid, comecei do endereço da pasta de onde foi colocado a dll, isto é, classid='Controles/...".
Continuando com o "classid", depois de colocar o início indicando a pasta "Controles" continuei com outras informações específicas: "Controles/DigitalizadoraRetaguarda.dll#ImagonFormDigitalizadora.ControlConfigurarScanner". A primeira é o nome da pasta, seguido por barra e o nome da dll gerada do projeto user control. O próximo passo é colocar o sharp (#) seguido do namespace completo do projeto. Continuando na primeira linha, coloquei os atributos height=161 e width=445 referentes ao tamanho da tela desenvolvida. Na sua tela, coloque o tamanho que desejar. Coloquei apenas o tamanho da tela.
Criei outra linha relacionada a parâmetros com nome e valor. São 5 parâmetros e valores necessários para a tela. O nome pode ser qualquer um e o valor também de acordo com a sua necessidade.
No final da linha, fechei com o "</object>" e atribuí ao objeto da tela. "objeto.Text = stControle.ToString();"
Para pegar os parâmetros enviados e seus respectivos valores, basta usar uma declaração simples. Code 3.
public Int32 Parametro1 { get; set; }
public string Parametro2 { get; set; }
public string Parametro3 { get; set; }
public string Parametro4 { get; set; }
public Int32 Parametro5 { get; set; }
.............................................................
Code 3
De acordo com o Code 3, para pegar o valor só declarei as variáveis como "public" e com "get" e "set". Assim o valor pego automaticamente.
Antes de testar localmente, certifique que as dlls do outro projeto estão na pasta controles e publique no IIS, isso porque o funcionamento necessariamente precisa do servidor de internet chamado IIS. A imagem 3 mostra o mesmo publicado e sem qualquer problema.
Imagem 3
clique para ampliar
Com o "User Control" consegui acessar toda a máquina do usuário sem qualquer problema. Pegar dados, números de hardware, acessar pastas e tudo mais. Porém, como falei no início do artigo (parte 1), só funciona no Internet Explorer e com uma certa permissão que precisa ser gerada.
Para a permissão, acesssei: Menu iniciar -> Painel de Controle -> Ferramentas Administrativas -> Microsoft .NET Framework 2.0 Configuration -> Acessar a pasta RunTime Security Policy -> Machine.
Dentro da pasta Machine existem duas sub-pastas principais para criação (Code Groups e Permissions Sets). Primeiro precisei colocar as permissões na pasta permissions set e depois adicionar um code groups. (Imagem 4)
Imagem 4
clique para ampliar
Isso é para exportar um arquivo .msi e executar antes do início da tela. Depois disso, o acesso será rápido e simples. A única coisa que o .msi faz é colocar as permissões na máquina de quem está acessando. A imagem 5 mostra como exportar o pacote para instalação.
Imagem 5
clique para ampliar
Bom, espero que tenha ajudado até aqui. Não é tão complicado, só precisa prestar atenção nos detalhes informados para o perfeito funcionamento.
Qualquer dúvida, pode entrar em contato pelo site.