webservice e outlook

11/03/2009

Tenho um webservice que faz uma consulta ao banco de dados (tabela contatos, por exemplo), quero que o outlook receba o retorno dessa consulta e leia esses dados formando uma lista de contatos. Só que tenho algumas duvidas, o Outlook se conectaria ao webservice, ou o webservice retornaria um xml que o outlook abriria? Estou no caminho certo ou existe outra forma? Como vocês recomendam fazer?

Obrigado

Tiago Leite
Tiago Leite

Tiago Leite

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

11/03/2009

Olá Tiago,   Nem um nem outro. Na verdade vc precisa fazer uma rotina .Net que usa um Add-in do MS Office do qual permite vc integrar o Visual Studio com os componentes do Office e interagir com os mesmos a partir de sua codificação.   Bom, ja que o seu WS retorna os dados contatos de uma tabela, o que vc deve fazer é o seguinte:   Na aplicação que invoca o WS e recebe este XML de contatos, vc joga os dados num controle de coleção do aspnet, tipo o DataTable, DataSet, DataList e outros. Prefiro o DataTable.   De posse desta coleção com os dados de Contato, vc deve implementar um rotina que insere estes dados na Lista de Contatos do Outlook. Veja abaixo o passo a passo de uma rotina destas, lembrando que esta abaixo esta sem o loop, vc deve apenas implementar o foreach e jogar os dados pertinetes aos seus contatos nas variaveis "teste" escritas em verde.   Para criar um contato com o ADO e o provedor EXOLEDB usando Visual C# , execute estas etapas: Adicione uma referência ao Microsoft ActiveX Data Objects 2.5 Library. Para fazer isso, execute estas etapas: No menu Project , clique em Add Reference . Clique na guia com. , localize Microsoft ActiveX Data Objects 2.5 Library e, em seguida, clique em Selecionar .
Use a seguinte codificação:   using System;

namespace Samples
{
class Class1
{
static void Main(string[] args)
{
try
{
                        // TODO: Substitua esta linha com o caminho de seu arquivo EML ou com a URL de seu Exchange
   string sURL = "http:/<ExchServer>/Exchange/<UserAlias>/Contacts/Test.eml";

ADODB.Connection oCn = new ADODB.Connection();
ADODB.Record oRc = new ADODB.Record();
ADODB.Fields oFields;

oCn.Provider = "exoledb.datasource";

oCn.Open(sURL, "", "", 0); 
if(oCn.State == 1)
{
Console.WriteLine("Connection Successful");
}
else
{
Console.WriteLine("Connection Unsuccessful");
return;
}

oRc.Open(sURL, oCn,
ADODB.ConnectModeEnum.adModeReadWrite,
ADODB.RecordCreateOptionsEnum.adCreateNonCollection,
ADODB.RecordOpenOptionsEnum.adOpenRecordUnspecified,
"", "");

oFields = oRc.Fields;

oFields["DAV:contentclass"].Value = "urn:content-classes:person";
oFields["http://schemas.microsoft.com/exchange/outlookmessageclass"].Value = "IPM.Contact";
oFields["urn:schemas:contacts:cn"].Value = "Luiz Maia";
oFields["urn:schemas:contacts:nickname"].Value = "Luiz";
oFields["urn:schemas:contacts:title"].Value = "Analista de Sistemas";
oFields["urn:schemas:contacts:department"].Value = "Nome do departamento";
oFields["urn:schemas:contacts:email1"].Value = "luiz.agnelo.maia@gmail.com";


oFields.Update();


oCn = null;
oRc = null;
oFields = null;
}
catch (Exception e)
{
Console.WriteLine(" Exception caught.", e);
}
}
        }
}     Acima fiz os procedimentos dentro do metodo MAIN, faça um metodo para isto que ira varer sua coleção usando um foreach e substiruir os atributos em verde acima pelos valores pertinentes aos seus contatos.   Mais ou menos isto:   foreach(DataRow dr in SeuDataTable.Rows) {    .    .    .     oFields["urn:schemas:contacts:cn"].Value = dr["nome_contato"].ToString();
    oFields["urn:schemas:contacts:nickname"].Value = dr["apelido_contato"].ToString();
    oFields["urn:schemas:contacts:title"].Value = dr["titulo_contato"].ToString();
    oFields["urn:schemas:contacts:department"].Value = dr["area_contato"].ToString();
    oFields["urn:schemas:contacts:email1"].Value = dr["email_contato"].ToString();      .    .    .   }     Espero ter ajudado. Aguardo um retorno seu se deu tudo certo.   Abraços Tiago Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

E ai Tiago, Obteve algum avanço na rotina? Estou aguardando um feedback seu. Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Ola Tiago,   Como não obtivemos resposta para suas dúvidas, estamos fechando o chamado. Continuamos a sua disposição para eventuais dúvidas.   Abraços Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Ola Luiz,

Eu ainda estou tentando resolver, não consegui ainda, te passarei mais detalhado outra duvidas nesse chamado caso não consiga concluir o desenvolvimento
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Ola Tiago, estou a disposição, quando puder me envie para solucionarmos juntos o problema.   Att, Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Só eu jogar os ccontatos em um datatable que o outlook ja  conseguira ver?
Eu já adiconei uma nova referencia, queria saber se tenho que criar uma pagina em aspx para usar a codificação que vc passou para dar o ADODB
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Vc precisa jogar os contatos num DataTable, depois fazer um loop nele e chamar o metodo que te passei abaixo, para cada registro do datatable vc executa o metodo, que pode ser uma classe, so trocando os valores em verde.   Abraços   Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Olá Luiz,  
Pra mim não aparece o menu Project, eu criei o WS como aplicação web, sera que tem que criar como projeto? Acho melhor eu começar a minha aplicação do começo, não deu certo.

Abraço
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Não é menu Project, e sim, clicar com o botão direito em cima do seu projeto e adicionar a referencia:   >> Add Reference   Aguardo Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz
TEnho o meu WS lendo os dados do banco dedados e montando um XML, estou tentando inserir esses dados em um DataGrid, dai de posse desse datagrid eu iria conseguir inserir no outlook, na verdade eu não estou entendendo muito bem essa logica, terei que inserir no projeto do webservice uma pagina aspx contendo esse datagrid, e criar um "Web reference" e a partir desse datagrid eu iria usa-lo no outlook?

você não tem algo mais completo pra me enviar e eu olhar pra poder entender melhor? pode ser só um exemplo de pegar um xml e inserir num datagrid e enviar para o outlook, a logica de leitura do banco e estrutura final eu monto, só pra eu entender a logica mesmo

Obrigado

Sou meio novo com .net
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Esquece datagrid, vc tera que jogar os dados num DataTable pode ser dentro de seu ws mesmo. dai vc cria um CLASSE que contem o codigo que te passei. Faz um loop no DataTable chamando o metodo da classe para cada registro.   Abraços Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Cara você não teria um email pra eu te mandar o que eu já fiz? Assim você ve se estou no caminho certo
To me enroscando aqui
O que eu  colocaria nessa string?
string sURL = "http:/<ExchServer>/Exchange/<UserAlias>/Contacts/Test.eml";
O que colocar no exchange? Preciso dele instalado?


GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Vc pode me mandar sua aplicação via FTP do DevMEdia, um lugar disponivel para que os usuarios troquem arquivos.   Vc não precisa ter o exchange instalado, na linha vc precisa achar o arquivo onde estão seus contatos em sua maquina.   Aguardo sua aplicação.   Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Fala Luiz, coloquei a aplicação lá no disco virtual, chama "WebServices".
Dá uma ajudinha, to meio enrolado com webservices, parece ser de boa, mas não estou entendo bem.
Você recomenda algum livro pra estudar isso mais a fundo?
Obrigado
GOSTEI 0
Devmedia

Devmedia

11/03/2009

Tiago,
o consultor não tem acesso ao seu disco virtual. Por isso, vc deve postar o caminho do mesmo.
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

O caminho é esse: https://www.devmedia.com.br/discovirtual/default.asp?f=\WebServices Só copiei e colei o link do navegador, só não sei como ele vai conseguir acessar isso
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago, a url esta errada. Aguardo o link correto para que eu possa baixar o projeto. Faça um teste vc mesmo antes, clicando no link que me mandar, se conseguir baixar o arquivo, esta correto.   Abraços   Att Luiz Maia 
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz, eu copiei e colei o link, o problema é que quando vocÊ abre ele aponta para o seu usuario, agora eu não sei exatamente como te passar, não tem como você perguntar para o pessoal ai? Quando eu clico no link abre normalmente o meu diretorio
GOSTEI 0
Devmedia

Devmedia

11/03/2009

Tiago,
quando vc acessa o seu disco virtual, vc clica com o botão direito do mouse no arquivo e escolhe a opção copiar link.
Ao responder o post, vc cola o link. Se mesmo assim não conseguir, por favor, envie o print da tela com o cursor apontado para o arquivo desejado.
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Dei uma olhada no seu projeto, vc esta no caminho certo, mas segue algumas considerações:   Vc deve localizar em sua maquina o arquivo .eml (mande buscar por *.eml no C: ), este é o arquivo do outlook onde estão os contatos e sera incluso os outros. Substitua a string abaixo pelo caminho de seu arquivo eml que vc quer acrescentar um contato: string sURL = "http:/<ExchServer>/Exchange/<UserAlias>/Contacts/Test.eml"; Seu metodo GetCostumers() no web service esta correto, mas a Classe que te passei deve estar no Projeto que ira consumir o WS. Ou se desejar e não for reusar o metodo, pode coloca-lo na mesma classe do arquivo aspx, como eu fiz no exemplo a seguir. Eu criei uma outra aplicação web, referenciei seu WS a ela e criei um metodo de IncluirContato. Na Default.aspx tem um botao que executa todo procedimento.   http://video.devmedia.com.br/naoexclusivo/LuizMaia/Consultoria/tiago.zip   Qualquer coisa me avise, Att Luiz Maia        
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Olá Luiz,

Eu estava dando uma olhada e entendi o que foi feito, só fiquei com uma duvida, é gerado um XML no WebService, correto? Quando vc usa esse comando DataTable dt = ws.GetCostumers().Tables[0]; ele entende que o XML é uma tabela e tras cada dado separado? Está dando erro pra mim.

Quanto ao arquivo EML, não achei nenhum arquivo EML, mas achei um chamado extend.data, ele é usado tambem?
Mas e quando eu achar esse arquivo EML, substituo o conteudo inteiro da sURL, por exemplo "C:\Documents and Settings\Tiago\contacts.eml"?

Brigadão cara, to conseguindo compreender a resolução

Abraço
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Quanto a questão do XML retornado do WS, isto é transparente para vc, o que importa no .net é o tipo de retorno setado na assinatura do metodo, no seu caso vc colocou que retornará um DataSet, não um XML, portanto ira retornar um DataSet, que internamente é um XML tb.   Instale o Outlook na sua maquina e mande procurar pelo arquivo .eml, depois faça o que vc fez abaixo mesmo, coloque o caminho real, ex: C:\\windows\msoffice\outlook\tiago\contats.eml     E quanto ao erro, que tipo de erro esta ocorrendo? Me manda um print da tela para eu ver isto pra vc.   Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Ola Tiago,   Como não obtivemos resposta do chamado, estamos concluindo o mesmo. Continuamos a sua disposição para quaisquer tipo de duvida.   Abraços Att Luiz Maia  
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz

Depois que foi feita essa alteração começou a dar o erro de acesso ao servidor.
Esse erro que está dando, parece coisa bem simples mas não consegui resolver

Abraço

GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Vc precisa refazer a referencia para seu web service. Repare que o meu chama-se localhost, logo acima da linha de erro. Vc tem que trocar esta linha.   Abraços Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

E ai Tiago, deu certo?
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz,   Eu fiz novamente a conexão com o webservice e o erro não ocorreu, clico no botão adicionar e ele não dá problema, o que eu ainda não consegui foi fazer foi alterar o caminho do *.eml, não acho o arquivo na minha maquina mesmo com o MS Outlook instalado, vou tentar re-instalar... mas creio que agora esteja funcionando.... se eu clicar no botão adicionar ele já teria que inserir os dados da consulta nos meus contatos, correto?   Obrigado cara   Grande abraço
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Sim, contanto que vc tenha o arquivo .eml em sua maquina e lembrando que o mesmo tem que dar permissão para o usuario do aspx escrever nele.   Para fazer um novo registro do tipo de arquivo .eml em Meu computador:
1. Na Área de trabalho, clique duas vezes em Meu computador.
2. No menu Ferramentas, clique em Opções de pasta.
3. Clique na guia Tipos de arquivo.
4. Em Tipos de arquivo registrados, clique em EML Email do Outlook Express e em Avançado.
5. Clique em Open e em Editar.
6. Digite a seguinte linha na caixa Aplicativo usado para executar a ação:
“C:\Arquivos de Programa Files\Outlook Express\MSIMN.EXE” /eml:%1
7. Clique em OK, em OK novamente e em Fechar. PS: Meu outlook é versão 6.0, mas funciona da 5.5 para cima.   Para executar o arquivo Msimm com a opção /reg:
1. Feche o Outlook Express.
2. Clique em Iniciar e em Executar.
3. Na caixa Abrir, digite msimn /reg e clique em OK.
Para fazer um novo registro do tipo de arquivo .eml em Meu computador: 1. Na Área de trabalho, clique duas vezes em Meu computador.
2. No menu Ferramentas, clique em Opções de pasta.
3. Clique na guia Tipos de arquivo.
4. Em Tipos de arquivo registrados, clique em EML Email do Outlook Express e em Avançado.
5. Clique em Open e em Editar.
6. Digite a seguinte linha na caixa Aplicativo usado para executar a ação:
"C:\Arquivos de Programa Files\Outlook Express\MSIMN.EXE" /eml:%1
7. Clique em OK, em OK novamente e em Fechar.
  Abraços Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz,   Não consigo localizar o .eml em meu computador, fiz todos os passos que vc me passou e não adiantou. Tem diferença usar o Outlook Express e o Microsoft Outlook? Tentei pelos dois já.   Abraço
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Vc tem o Exchange?
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Não tenho o exchange não
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Tem diferenças sim:   Outlook Express(.eml)  Microsoft Outlook(.msg)   Att Luiz Maia
GOSTEI 0
Tiago Leite

Tiago Leite

11/03/2009

Luiz,
Ainda não consegui, to achando meio estranho, eu já vi esse arquivo na minha maquina. Vou continuar tentando Obrigado Abraço
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tem que existir este arquivo, pois vc tem uma lista de contatos correto? Então ele pode estar oculto provavelmente dentro da pasta de cada perfil, se vc tem tres usuarios em uma maquina, tera 3 arquivos destes.   Aguardo seu retorno Att Luiz Maia
GOSTEI 0
Luiz Maia

Luiz Maia

11/03/2009

Tiago,   Estou fechando o chamado pois a sulução ja foi dada, mas vc ainda não achou o arquivo de contatos em sua maquina. Assim que encontra-lo pode entrar em contato novamente conosco, estaremos prontos para ajuda-lo.   Abraços Att Luiz Maia
GOSTEI 0
POSTAR