Usando Smart Tags - Marcas inteligentes


Smart Tags ??? Marcas Inteligentes ??? Oque vem a ser isto ??? Um novo ambiente ? Uma nova tecnologia ???

As marcas inteligentes ( smart tags ) são uma das novidades que o office XP apresenta em sua integração com a Web. As marcas inteligentes implementam o reconhecimento dinâmico para termos dentro de documentos e e-mails. Com as Smart Tags podemos desenvolver 'pequenos arquivos' que após instalados fazem cocm que  office XP possa carregar informações que são exibidas nos documentos do Word e Excel e Outlook ; podem ainda conectar estes  documentos com os serviços do seu site na internet.

Podemos pensar nas marcas inteligentes como uma string com um tipo de informação embutido que pode ser reconhecida como uma informação de determinado tipo e que pode gerar um resposta como uma lista de possíveis ações a realizar : enviar um email , acessar uma URL , agendar um encontro , etc...

As marcas inteligentes podem automaticamente atuar em páginas Web sob o Windows XP e então inserir links em certas palavras como nomes de empresas , produtos, etc. . Se o usuário clicar no link criado uma nova janela será aberta com mais links para os sites Relacionados ( MSN , Microsoft, não podem faltar é claro ).

Isto causou uma certa oposição a esta tecnologia e aumentou as suspeitas sobre o monopólio pretendido pela Microsoft na WEB ;A Microsoft chegou a anunciar que não incluiria as Marcas inteligentes nas novas atualizações do Windows XP e Internet Explorer 6. Existe até um movimento de oposição que informar como desabilitar as Smart Tags em páginas web. Para 'proteger' suas páginas das Marcas Inteligentes inclua o código abaixo em cada página web:

<meta name="MSSmartTagsPreventParsing" content="TRUE">

Não vou entrar no mérito da questão ; você decide...

O Office XP inclui algumas Marcas inteligentes que reconhecem datas , nomes , endereços , telefones, números, etc . Quer ver (na minha máquina estão instaladas algumas smart tags para língua inglesa) ?

A relação de smart tags instaladas para minha máquina.

 

E o que o Visual Basic tem a haver com as Marcas Inteligentes ??? Ora você pode desenvolver as suas próprias marcas inteligentes usando o Visual C++ ou o Visual Basic . Para criar marcas inteligentes você vai precisar do seguinte:

  1. Instalar o Office XP
  2. fazer o download do - Smart Tag SDK  v.1.1
  3. Possuir o Visual Basic 6.0 (Service pack 5) ou Visual C++ instalado.

Antes de mostrar como criar sua primeira marca inteligente vamos dar uma olhada na sua arquitetura.

A arquitetura das marcas inteligentes

As marcas inteligentes usam a tecnologia COM - Component Object Model - DLL também conhecida no VB como ActiveX DLL. A DLL COM deve suportar um número predefinido de interfaces como definido na Smart Tag Type Library.( No VB devemos fazer referência a Microsoft Smart Tags 1.0 Type Library - MSTAG.TLB)

Feito a referência devemos implantar duas interfaces: ISmartTagRecognizer e ISmartTagAction.  A interface determina como duas entidades vão interagir e contém código e serviços; no caso das smart Tags a implementação torna possível fazer o reconhecimento e ativar as ações. Veja abaixo o esquema:

O processo é idêntico ao desenvolvimento de um Add-In (Se você já desenvolveu um vai perceber) e, basicamente temos que nos preocupar com duas coisas : as APIs e o mecanismo de registro. As APIs implementam o reconhecimento de ações e serviços e o registro das DLLs marcas inteligentes faz com que as aplicações Office possam reconhecer as marcas e ativar suas ações. Você pode usar o regsvr32.exe para registrar ou deixar isto a cargo do programa instalador. O Office XP contém chaves especiais no registro do Windows que identificam quais DLLs instaladas são Marcas Inteligentes. A chaves são :

- a chave recognizer - HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart Tag\Recognizers

- a chave actions - HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Smart Tag\Actions

Para evitar conflitos de com smart tags que estejam atuando simultaneamente a arquitetura smart tag utiliza os namespaces XML ( baseados no consórcio W3C ) de forma que quando um smart tag reconhece um termo a ele é atribuído um identificador único. Por exemplo , a smart tag para  reconhecimento de datas da microsoft usa o seguinte namespace:

urn:schemas-microsoft-com:office:smarttags#date

Se você for sua própria smart tag para reconhecimento de datas você poderá o seguinte namespace:

urn:schemas-seu-nome-com:smarttag#date

Assim se houver concorrência será apresenta uma lista com as opções das duas smart tags.

Criando sua marca inteligente

Vamos ver como criar sua marca inteligente :

1- Inicie o Visual Basic e em novo projeto selecione - ActiveX DLL e altere o nome para algo sugestivo , eu vou usar jcmsoft.

2- Agora no menu Project | References , inclua a referência a - Microsot Smart tags 1.0 Type

3- Vamos criar as classes : SmartTagAction e SmartTagRecognizer

SmartTagAction -  irá fazer o reconhecimento do texto e esta dividida em três partes:

SmartTabRecognizer - define quais as ações executadas após reconhecer um trecho de texto.

Veja como criar as duas classes:

4- No menu Project clique em Properties  e informe o nome do projeto na caixa Project Name ( vou informar jcmsoft)

5- Na janela Properties , selecione Class1 e altere o nome para SmartTagAction (Fig 1)

 

Fig 1 Fig 2 -

6- No menu Project selecione a opção - Add Class Module e clique em Abrir . Para renomear a classe repita o procedimento feito para class1. Selecione  - class2 -  e informe o nome SmartTagRecognizer (fig 2)

7- Na seção - General Declarations da classe - SmartTagRecognizer - digite o seguinte código:

8-  Na seção - General Declarations da classe - SmartTagAction - digite o seguinte código:

Implements IsMartTagAction

9- Agora salve o seu projeto.

Implementando a interface ISmartTagRecognizer

10 - Após configurar o seu projeto DLL vamos implementar a interface para ISmartTagRecognizer. Para isto devemos informar um identificador - ID - único , um título e a descrição para a smart tag através de código para classe como abaixo:

Private Property Get ISmartTagRecognizer_ProgId() As String
  ISmartTagRecognizer_ProgId = "jcmsoft.SmartTagRecognizer "
End Property

Private Property Get ISmartTagRecognizer_Name(ByVal LocaleID As Long) As String
  ' Adicionar a descrição que será mostrada no menu
  ' Ferramentas>Opções de Auto Correção>Marcas Inteligentes no Word e no Excel.

  ISmartTagRecognizer_Name = "jcmsoft"
End Property


Private Property Get ISmartTagRecognizer_Desc(ByVal LocaleID As Long) As String
  ' Descrição mais completa da Marca Inteligente .
   ISmartTagRecognizer_Desc = "Visual Basic - José Carlos Macoratti - Banco de dados"
End Property

11- A seguir forneça o número dos tipos das smart tags , a lista de ações e os locais adicionais para  download das smart tags . Conforme o código a seguir :

Private Property Get ISmartTagRecognizer_SmartTagCount() As Long
  ' Número de tipos de Marcas Inteligentes este Recognizer vai possuir.
   ISmartTagRecognizer_SmartTagCount = 1
End Property
 

Private Property Get ISmartTagRecognizer_SmartTagName(ByVal SmartTagID As Long) As String
  ' Os nomes das Marcas Inteligentes devem ser do seguinte formato  namespaceURI#tagname.
  If (SmartTagID = 1) Then
     ISmartTagRecognizer_SmartTagName = "schemas-jcmsoft-com#visualbasic"
  End If
End Property


Private Property Get ISmartTagRecognizer_SmartTagDownloadURL(ByVal SmartTagID As Long) As String
  ' Esta propriedade pode possuir como valor um NULL.
  ISmartTagRecognizer_SmartTagDownloadURL = Null
End Property

12- Forneça uma lista de itens para reconhecimento inserindo o código a seguir na seções General Declarations e Class_Initialize :

Dim termos(6) As String
Dim numTermos As Integer

Private Sub Class_Initialize()
  ' Coloque as palavras em minúsculo, para não ter  problemas com "case-sensitive".
  termos(1) = "visual basic"
  termos(2) = "www.geocities.com/macoratti"
  termos(3) = "macoratti"
  termos(4) = "ado"
  termos(5) = "jcmSoft"
  termos(6) = "José Carlos Macoratti"
  numTermos = 6
End Sub

13- Para encerrar insira o código que irá fazer a procura de strings a cada texto digitado no Word , Excel ou Outlook Express para fornecer o método de reconhecimento das smart tags.

Public Sub ISmartTagRecognizer_Recognize(ByVal Text As String, ByVal DataType As SmartTagLib.IF_TYPE, ByVal LocaleID As Long, ByVal RecognizerSite As SmartTagLib.ISmartTagRecognizerSite)

Dim i As Integer
Dim indice As Integer

Dim tamanho As Integer
Dim propbag As SmartTagLib.ISmartTagProperties

Text = LCase(Text)
   For i = 1 To numTermos
         indice = InStr(Text, termos(i))
         tamanho = Len(termos(i))
         While (indice > 0)
            ' Inicia uma nova Marca Inteligente
            Set propbag = RecognizerSite.GetNewPropertyBag
            ' Adiciona a Marca Inteligente a aplicação
           RecognizerSite.CommitSmartTag "schemas-jcmsoft-com#visualbasic", indice, tamanho, propbag
            ' Procura outra Marca Inteligente na aplicação
           indice = InStr(indice + tamanho, Text, termos(i))
        Wend
   Next i
End Sub

 

Implementando a interface ISmartTagAction

14- Primeiro vamos fornecer um identificador único , um título e uma descrição para a smart tag DLL:

Private Property Get ISmartTagAction_ProgId() As String
    ISmartTagAction_ProgId = "jcmsoft.SmartTagAction"
End Property


Private Property Get ISmartTagAction_Name(ByVal LocaleID As Long) As String
  ' Pequena descrição da ação da Marca Inteligente.
  ISmartTagAction_Name = "JcmSof -  Visual Basic"
End Property


Private Property Get ISmartTagAction_Desc(ByVal LocaleID As Long) As String
  ' Uma descrição mais completa da ação da Marca Inteligente
  ISmartTagAction_Desc = " Visual Basic - Banco de dados - José Carlos Macoratti"
End Property

15- A seguir informe as propriedades : ProgID , Name e Desc , os tipos de marcas ( pedaços de textos que serão reconhecidos ) para isto usamos as propriedades:

e  as matrizes com os textos que serão reconhecidos pelas marcas conforme o código abaixo:

Private Property Get ISmartTagAction_SmartTagCount() As Long
   ' Número de tipos de Marcas Inteligentes que este Recognizer vai possuir.
   ISmartTagAction_SmartTagCount = 1
End Property

Private Property Get ISmartTagAction_SmartTagName(ByVal SmartTagID As Long) As String
  ' Os nomes das Marcas Inteligentes devem ser do seguinte formato  namespaceURI#tagname.
  If (SmartTagID = 1) Then
        ISmartTagAction_SmartTagName = "schemas-jcmsoft-com#visualbasic"
  End If
End Property


Private Property Get ISmartTagAction_SmartTagCaption(ByVal SmartTagID As Long, ByVal LocaleID As Long) As String
   ' Especificar o nome do título que irá aparecer na Marca Inteligente dentro da aplicação do usuário
   ISmartTagAction_SmartTagCaption = "Visual Basic - Jcmsoft"
End Property

16 - Agora vamos forncer o código para os números , nomes, e IDs da smart tags conforme código abaixo:

Private Property Get ISmartTagAction_VerbCount(ByVal SmartTagName As String) As Long
  ' Especificar o numero de ações relacionada a esta Marca Inteligente
  If (SmartTagName = "schemas-jcmsoft-com/jcmsoft#visualbasic") Then
        ISmartTagAction_VerbCount = 1
  End If
End Property

Private Property Get ISmartTagAction_VerbID(ByVal SmartTagName As String, ByVal VerbIndex As Long) As Long
         ISmartTagAction_VerbID = VerbIndex
End Property


Private Property Get ISmartTagAction_VerbCaptionFromID(ByVal VerbID As Long, ByVal ApplicationName As String, ByVal LocaleID As Long) As String
  ' Descrição que aparece na Marca Inteligente da aplicação do  usuário
  If (VerbID = 1) Then
         ISmartTagAction_VerbCaptionFromID = "Visite o site www.geocities.com/macoratti"
  End If
End Property


Private Property Get ISmartTagAction_VerbNameFromID(ByVal VerbID As Long) As String
' Uma identificação da ação relacionada a Marca Inteligente
If (VerbID = 1) Then
    ISmartTagAction_VerbNameFromID = "NavegarInternet"
End If
End Property

Para encerrar  vamos fornecer o código para lista de ações  correspondentes a cada opção da smart tag clicada.

Public Sub ISmartTagAction_InvokeVerb(ByVal VerbID As Long, ByVal ApplicationName As String, ByVal Target As Object, ByVal Properties As SmartTagLib.ISmartTagProperties, ByVal Text As String, ByVal XML As String)
Dim ie
If (VerbID = 1) Then
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Navigate2 ("www.geocities.com/macoratti")
    ie.Visible = True
End If
End Sub
 

17 - Compile o seu projeto e registre o componente DLL na sua máquina . Uma das formas é usar o regsvr32.exe:   Regsvr32.exe jcmsoft.dll

Testando a sua primeira Marca inteligente

Vai continuar

...


José Carlos Macoratti