Fórum webservice e outlook #3527

11/03/2009

0

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

Responder

Posts

11/03/2009

Luiz Maia

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
Responder

Gostei + 0

13/03/2009

Luiz Maia

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

Gostei + 0

16/03/2009

Luiz Maia

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
Responder

Gostei + 0

16/03/2009

Tiago Leite

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
Responder

Gostei + 0

16/03/2009

Luiz Maia

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

Gostei + 0

16/03/2009

Tiago Leite

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
Responder

Gostei + 0

16/03/2009

Luiz Maia

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
Responder

Gostei + 0

17/03/2009

Tiago Leite

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
Responder

Gostei + 0

18/03/2009

Luiz Maia

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
Responder

Gostei + 0

18/03/2009

Tiago Leite

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
Responder

Gostei + 0

18/03/2009

Luiz Maia

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
Responder

Gostei + 0

19/03/2009

Tiago Leite

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?


Responder

Gostei + 0

19/03/2009

Luiz Maia

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
Responder

Gostei + 0

19/03/2009

Tiago Leite

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
Responder

Gostei + 0

19/03/2009

Devmedia

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar