|
Técnicas Avançadas
Como você provavelmente já notou, há várias maneiras de criação de painéis de tarefa. Nesta seção, você irá criar um painel de tarefa HTML complexo que chama um XML Web service, puxa conteúdo dinâmico a partir de um arquivo na Internet e executa algum código de manipulador personalizado.
Chamando XML Web Services
Para a primeira subseção de conteúdo do painel, você chama um XML Web service. Você pode facilmente chamar XML Web services a partir de painéis de tarefa para recuperar e exibir conteúdo. Por exemplo, se você possui uma intranet de empresa que fornece informações corporativas por meio de um XML Web service, é possível hospedar facilmente uma interface dentro do painel de tarefas. Do mesmo modo, os criadores de XML Web services podem publicar painéis de tarefa do Visual FoxPro que conectam-se aos seus serviços. Para esse exemplo, você chama um .NET XML Web service publicamente disponível que recupera informações de ação baseada em um símbolo de ação. Esse é um bom exemplo do uso de informações de opção personalizadas em um painel para coletar o símbolo do Task Pane Options.
No formulário Pane Customization, clique no botão New na barra de ferramenta do painel e digite o nome do seu fornecedor, o nome do painel My HTML e selecione HTML como o Pane type. A seção do conteúdo raiz My HTML é exibida na árvore de conteúdo. Clique no botão Add na barra de ferramenta do conteúdo e digite My Stock Quote para o nome da seção do conteúdo. Você também pode digitar um ID único. Nesse caso, use MASSI.QUOTE como o unique ID para esta subseção. Na guia Data, para Source selecione Web Service. Chamar um XML Web service desse modo é fácil. O Task Pane Manager manipula a configuração do código proxy apropriado para você. No entanto, se você precisar controlar a solicitação e resposta SOAP, é possível selecionar Script como Source e digitar o código. Nesse caso, você também pode selecionar a caixa na parte inferior da guia Data, "Source of this content is from the Internet”, que indica ao Task Pane Manager que ele deve exibir as opções de cache para a subseção do painel em Task Pane Options.
No campo WSDL URL, insira o local do arquivo WSDL usando o seguinte serviço:
http://www.webservicex.net/stockquote.asmx?WSDL
Como esse é um .NET XML Web service, você pode explorar o serviço indo até:
http://www.webservicex.net/stockquote.asmx
Esse serviço possui um método chamado GetQuote que aceita um símbolo de ação como uma seqüência de caracteres. Você cria uma opção para inserir o símbolo de ação no campo Method da seguinte maneira:
GetQuote("##stocksymbol##")
Para criar a opção, selecione a guia Options e clique em New para criar uma nova opção. Na caixa de diálogo que aparece, digite o nome da opção, "stocksymbol”, e uma legenda, "Stock Symbol" (Figura 13).

Figura
13 Você pode criar opções de painel personalizadas que aparecem em Task Pane
Options para seu painel.
Agora você especifica a transformação. Esse XML Web service retorna a informação de ação formatada como XML. Por exemplo, chamar o método GetQuote e passar um parâmetro de MSFT retorna o seguinte:
< StockQuotes> < Stock> < Symbol>MSFT< /Symbol> < Last>23.60< /Last> < Date>2/26/2003< /Date> < Time>4:01pm< /Time> < Change>-0.59< /Change> < Open>24.08< /Open> < High>24.47< /High> < Low>23.58< /Low> < Volume>57314560< /Volume> < MktCap>252.6B< /MktCap> < PreviousClose>24.19< /PreviousClose> < PercentageChange>-2.44%< /PercentageChange> < AnnRange>20.705 - 32.50< /AnnRange> < Earns>0.87< /Earns> < P-E>27.80< /P-E> < Name>MICROSOFT CP< /Name> < /Stock> < /StockQuotes>
Para exibir isso em um painel HTML, você especifica uma transformação em HTML. Você pode fazer isso no código ou usar XSLT. O código ou XSLT pode vir de um local na Internet, um arquivo em seu computador ou até mesmo de outro Web service. Para esse exemplo, você pode usar texto estático e digitar a definição da folha de estilos XSLT. Na guia Transform Data, selecione XSL como Type e Static Text como Source. A seguinte folha de estilos transforma somente os seguintes elementos: Name, Symbol, Last, Change e PercentageChange.
< xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> < xsl:template match="StockQuotes"> < TABLE BORDER="0" > < xsl:apply-templates select="Stock"/> < /TABLE> < /xsl:template> < xsl:template match="Stock"> < TR> < TD>Company< /TD> < TD>: < xsl:value-of select="Name"/>< /TD> < /TR> < TR> < TD>Symbol< /TD> < TD>: < xsl:value-of select="Symbol"/>< /TD> < /TR> < TR> < TD>Last< /TD> < TD>: < xsl:value-of select="Last"/>< /TD> < /TR> < TR> < TD>Change< /TD> < TD>: < xsl:value-of select="Change"/>< /TD> < /TR> < TR> < TD>Change %< /TD> < TD>: < xsl:value-of select="PercentageChange"/>< /TD> < /TR> < TR> < TD colspan="2">< a href="vfps:options?uniqueid=MASSI.QUOTE">Change Symbol< /a>< /TD> < /TR> < /xsl:template> < /xsl:stylesheet>
Essa folha de estilos transforma o XML em uma tabela HTML. Esse HTML é apenas uma parte do painel inteiro. Se você chamar novamente, o painel transforma todos os dados das subseções antes de executar a transformação final. Nesse caso, a transformação final cria todo o documento HTML. Para exibir as subseções da definição do painel nas próprias seções, especifique que o dado mesclado a partir das subseções devem estar no formato XML. Você, então, define a transformação final de modo que você veja a saída do painel final quando você cria o restante das seções.
Selecione o nó do conteúdo raiz My HTML a partir da árvore de conteúdo e selecione a guia Data. Selecione Static Text como Source e insira a seguinte informação:
< VFPData> < !-- XMLCONTENT --> < /VFPData>
Na guia Transform Data, selecione XSL como Type e Static Text como Source. Em seguida, insira a transformação final:
< xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> < xsl:output method="html" /> < xsl:template match="VFPData"> < HTML> < TITLE>< /TITLE> < HEAD> < STYLE> BODY { font-family:verdana; font-size:9pt; } TD {font-size:9pt} TD.TableTitle { font-family: Verdana; font-size: 9pt; font-weight: bold; background-color: #0066CC; padding:2px; color: #FFFFFF } TABLE { margin-bottom:12px } < /STYLE> < /HEAD> < BODY> < TABLE BORDER="0" width="100%" cellpadding="0" cellspacing="0" > < xsl:for-each select="PaneContent"> < TR>< TD class="TableTitle">< xsl:value-of select="PaneTitle" disable-output-escaping="no"/>< /TD>< /TR> < TR>< TD >< xsl:value-of select="HTMLText" disable-output-escaping="yes"/>< /TD>< /TR> < /xsl:for-each> < /TABLE> < /BODY> < /HTML> < /xsl:template> < /xsl:stylesheet>
Isso define um estilo para esse painel e retira cada um dos nomes da seção do conteúdo e os dados transformados. No caso da seção My Stock Quote, os dados transformados estão em uma tabela HTML. Clique em Apply na parte inferior do formulário Pane Customization e abra Task Pane Manager Options. Selecione o painel My HTML a partir da árvore e selecione a categoria My Stock Quote. Insira um símbolo de ação na caixa de texto e clique em OK. Vá ao painel de tarefas e você verá a informação de ação. Você irá notar que há um link para Task Pane Options para ir diretamente à opção Stock Symbol a partir do painel usando um manipulador interno (Figura 14).

Figura
14 Você pode facilmente chamar Web services e especificar opções personalizadas
para as subseções do painel.
Exibindo Informações Dinâmicas
Na próxima seção, você irá ler os dados a partir de um arquivo na Internet. Essa técnica pode ser uma alternativa para chamar um XML Web service se o conteúdo alterar com menos freqüência e a informação for facilmente criada por uma pessoa e não por um computador. Por exemplo, os fornecedores de ferramenta podem fornecer links para Ajuda e recursos, documentos e artigos online ou o site comercial criando um arquivo na Internet e tendo um painel que lê o arquivo. Quando os links forem atualizados, as informações são atualizadas em todos os painéis de tarefa dos desenvolvedores. A Microsoft usa essa técnica para exibir informações dinâmicas nos painéis de tarefa Start, Solution Samples e XML Web Services.
Para este exemplo, você cria um arquivo XML que exibe links para um fornecedor de ferramenta fictício chamado "Cool Tools". O arquivo é chamado Coolinfo.xml e contém as seguintes informações:
< ?xml version='1.0' encoding='windows-1252' standalone='no'?> < VFPData> < content> < name>Cool Tools Home Page< /name> < link> < ![CDATA[vfps:linkto?url=http://www.massitools.com/default.htm]]> < /link> < desc>Take a tour of all the Cool Tool products!< /desc> < /content> < content> < name>Cool Tools Reference< /name> < link> < ![CDATA[vfps:linkto?url=http://www.massitools.com/help.htm]]> < /link> < desc>Access the Cool Tools Help file.< /desc> < /content> < content> < name>Cool Tools News< /name> < link> < ![CDATA[vfps:linkto?url=http://www.massitools.com/news.htm]]> < /link> < desc>Get the most up-to-date information on Cool Tools.< /desc> < /content> < /VFPData>
Há três nós de conteúdo definidos no arquivo XML que apresentam descrições breves e URLs para páginas da Web na Internet (os URLs neste exemplo não existem). Teoricamente, esse arquivo está no site comercial de Cool Tools na Web. Esse site não existe de verdade, de modo que para esse exemplo você pode colocar o arquivo no seu próprio site ou no servidor local. No entanto, o arquivo não precisa estar em um servidor Web. Ele pode estar localizado em um compartilhamento de rede, ou você pode colocá-lo em sua unidade de disco rígido. Tenha em mente que esse arquivo não é distribuído com o painel de tarefas; dessa forma, colocá-lo em sua unidade local é somente para fins de teste.
Para definir a subseção do conteúdo dinâmico, clique no botão Add na barra de ferramentas do conteúdo e nomeie-o para "What's New with Cool Tools." Abra a guia Data e selecione URL para Source. Na caixa de texto, digite o URL para o arquivo:
http://www.massitools.com/coolinfo.xml
Se você colocou o arquivo em sua unidade C local para fins de teste, digite o seguinte na caixa de texto:
file://c:/coolinfo.xml
Agora especifique a transformação desse dado em HTML. Abra a guia Transform Data, selecione XSL como Type, Static Text como Source e digite a seguinte transformação do XSL:
< xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> < xsl:template match="VFPData"> < table border="0" width="100%" cellpadding="2" cellspacing="0" > < xsl:apply-templates /> < /table> < /xsl:template> < xsl:template match="content" name="contents"> < xsl:variable name="linkvar" select="link"/> < tr> < td > < a href="{$linkvar}">< xsl:value-of select="name"/>< /a> < /td> < /tr> < tr> < td class="description"> < xsl:text>- < /xsl:text>< xsl:value-of select="desc"/> < /td> < /tr> < /xsl:template> < /xsl:stylesheet>
Isso transforma o XML em uma tabela em HTML que será usada na transformação final do conteúdo raiz. Agora é possível fazer o download do conteúdo XML contido no arquivo Coolinfo.xml a partir do local especificado e armazenar em cache de acordo com as configurações de Task Pane Manager. Dessa forma, se não for possível estabelecer a conexão posteriormente, a cópia em cache é usada. Se o URL não foi atingido na primeira vez em que você abrir o painel, você poderá especificar os dados XML padrão para serem exibidos na guia Default Data. Geralmente, você somente copia os conteúdos do arquivo online para uma caixa de edição nessa guia. No entanto, você coloca qualquer dado lá contanto que tenha o mesmo formato do arquivo online para que a transformação funcione corretamente.
Agora clique em Apply, e o painel exibe a nova seção "What's New with Cool Tools” (Figura 15). Você verá o conteúdo XML exibido no painel. Se você modificar o arquivo Coolinfo.xml e clicar no botão Refresh no Task Pane Manager, a seção do conteúdo é atualizada. Essa é uma maneira de você colocar o conteúdo dinâmico nas áreas de trabalho dos usuários.

Figura
15 Você pode criar subseções do painel de tarefa que exibem conteúdo dinâmico a
partir de arquivos na Internet.
Usando Manipuladores Personalizados e Interagindo com o Navegador
Você pode chamar código de manipuladores personalizados a partir de um hiperlink e manipular o HTML no painel a partir de seu código usando o objeto do navegador. Você cria um link que reinicia o Internet Information Server em seu computador local. Como esse processo pode levar algum tempo, as mensagens de status aparecem no painel enquanto os serviços IIS estão desligando ou iniciando o backup. Você chama o utilitário da linha de comando do IIS iisreset para fazer isso.
Crie uma nova subseção de conteúdo chamada Utilities. Na guia Data, selecione Static Text como Source. Digite o seguinte HTML:
< a href="vfps:runbatch?utility=iisreset">Restart IIS< /a> < BR> < span id=status>
Especifique um manipulador personalizado e passe a ele um parâmetro do utilitário iisreset. Esses dados também apresentam um elemento < SPAN> vazio que você usa para exibir mensagens de status no painel. Na guia Handler Code, especifique o código a ser executado ao clicar nesse link.
LPARAMETERS cAction, oParameters, oBrowser, oContent LOCAL cUtility cUtility = oParameters.GetParam("utility") DO CASE CASE cAction == "runbatch" oBrowser.document.all.status.innerText = "Restarting IIS, please wait..." RUN &cUtility oBrowser.document.all.status.innerText = "IIS has been restarted." ENDCASE
Para esse exemplo, também é possível especificar o manipulador como iisreset e o comando RUN. No entanto, esse processo demonstra como recuperar parâmetros a partir de objeto do parâmetro usando o método GetParam. Note também que as atualizações no painel são feitas definindo a propriedade innerText do elemento < SPAN> referindo-se ao seu ID, status. Você pode usar o objeto oBrowser para acessar o Document Object Model (DOM) e usar Dynamic HTML para manipular o painel para fazer o que você quiser. Como você está executando o código do Visual FoxPro, também é possível acessar qualquer recurso do Visual FoxPro que você normalmente usaria.
Isso aponta uma questão muito importante. Ao instalar painéis de tarefas, confie plenamente no provedor do painel. Como você pode ver, quando o painel de tarefas estiver instalado, ele poderá executar o código do Visual FoxPro em seu contexto de segurança. Portanto, tenha cuidado! Se você pretende se tornar um fornecedor de painéis de tarefa pela Internet, é possível assinar digitalmente seus downloads. A distribuição de painel dentro da comunidade do desenvolvedor é algo mais ou menos perigoso do que a troca de qualquer outro código – apenas fique atento com relação a quem o dá a você.
Agora clique em Apply, e o painel aparece na nova seção Utilities. Clique em Reset IIS para executar o utilitário da linha de comando iisreset. Note como as mensagens de status são exibidas no painel (Figura 16).

Figura
16 Você pode executar o código do manipulador personalizado para executar
qualquer ação a partir de hiperlinks nos painéis de tarefa.
Se o código do manipulador for longo ou complexo, você pode chamar um programa ou uma biblioteca de classe. Nesse caso, seu manipulador chama um comando DO (ou NEWOBJECT) que especificou um nome de arquivo que você inclui no cache do painel. Por exemplo, você pode digitar o seguinte código:
LPARAMETERS cAction, oParameters, oBrowser, oContent LOCAL cUtility DO CASE cUtility = oParameters.GetParam("utility") CASE cAction == "runbatch" oUtil = NEWOBJECT("MyUtilities", oContent.CacheDir + "myutilities.prg") oUtil.RestartIIS ENDCASE
Você adiciona o arquivo (no exemplo, Myutilities.prg) selecionando a opção View Files no formulário Pane Customization e clicando em Add na barra de ferramenta do arquivo. Esse arquivo é alterado automaticamente no pacote de distribuição. Observe o painel Solution Samples para obter um exemplo dessa técnica.
Voltar para o menu
|