Este artigo foi traduzido por máquina.

Suplementos do Office

3 soluções para acessar dados do SharePoint no Office 2010

Donovan Follette

Baixe o código de exemplo

Milhões de pessoas usam aplicativos de cliente do Microsoft Office, suporte de seu trabalho diário para se comunicar, movimente a dados, os números de situação, criar documentos, enviar apresentações e tomar decisões de negócios. Em cada vez maiores números, muitos estão interagindo com o Microsoft SharePoint como um portal de colaboração e uma plataforma para acessar dados compartilhados e serviços.

Alguns desenvolvedores na empresa ainda não tiverem obtido aproveitar a oportunidade de criar a funcionalidade personalizada em aplicativos do Office — a funcionalidade que oferece um perfeito integrada experiência para os usuários acessem diretamente os dados do SharePoint de dentro de aplicativos de produtividade familiar. Para empresas que procuram maneiras de melhorar a produtividade do usuário final, disponibilizando os dados do SharePoint diretamente nos aplicativos do Office é uma opção importante a considerar.

Com o lançamento do SharePoint 2010, há um número de novas maneiras de acessar dados do SharePoint e apresentá-lo para o usuário do Office. Elas variam de praticamente sem código as soluções possibilitadas via 2010 de espaço de trabalho do SharePoint (anteriormente conhecido como o Groove), sincronização direta entre o SharePoint e o Outlook, a nova API de REST do SharePoint e o novo modelo de objeto cliente. Assim como no Microsoft Office SharePoint Server (MOSS) 2007, uma grande variedade de serviços da Web está disponível em SharePoint 2010 também.

Neste artigo, nós será descrevem algumas das soluções sem código e mostrarei como criar algumas soluções de mais complexa usando esses novos recursos no SharePoint 2010.

Fontes de dados externos

Iniciar o Let’s, dê uma olhada rápida nos tipos de lista do SharePoint que podem ser empregadas como fontes de dados.

Uma fonte de dados especialmente útil é uma lista que exibe os dados recuperados por meio de uma conexão com um sistema de linha de negócios (LOB). O MOSS 2007 permitem que você se conecte aos dados LOB utilizando o BDC (catálogo de dados de Business), que forneceu o acesso somente leitura para os sistemas back-end. SharePoint 2010 oferece serviços de conectividade de Business (BCS), que é uma evolução do BDC que ofereça suporte ao acesso de leitura/gravação completo aos dados LOB.

Por que você deseja incorporar dados LOB no SharePoint? Considere o caso de uso, onde você tiver um sistema CRM (gerenciamento) relacionamento com clientes que pode ser acessados diretamente apenas um número limitado de pessoas na organização. No entanto, há uma tabela de clientes no banco de dados com nome e endereço de dados que poderiam ser usados por muitos outros, se ela estivesse disponível. Na vida real, você provavelmente acabar com usuários que copiar essas informações de várias fontes não-autoritativas e colando em documentos do Office. Seria melhor acessar esses dados de cliente do sistema de CRM autoritativo e expô-lo no SharePoint como uma lista que podem ser acessados por clientes do Office.

SharePoint Designer 2010 é a ferramenta usada para configurar o acesso a um sistema LOB e disponibilizar seus dados em uma lista do SharePoint externa. Há duas etapas necessárias para fazer isso.

A primeira etapa é criar um novo External Content Type (ECT). O ECT contém metadados que descrevem a estrutura de dados back-end, como, por exemplo, os campos e métodos CRUD SharePoint irá usar para interagir com ele. Após a criação da ECT, uma lista pode ser gerada com ele em qualquer site do SharePoint. Listas externas, procure e atuam como qualquer outra lista no SharePoint, mas os dados da lista externa padrão não é armazenada no SharePoint. Em vez disso, ela é recuperada por meio da ECT quando acessado por um usuário final.

O SharePoint Designer inclui suporte padrão para se conectar a fontes de dados externos, incluindo o SQL Server, Windows Communication Foundation (WCF) e o Microsoft .NET Framework. Portanto, um ECT pode ser criado facilmente para se conectar a qualquer tabela de banco de dados do SQL Server ou o modo de exibição, o serviço do WCF ou o serviço da Web. Soluções personalizadas do .net podem ser criadas no Visual Studio 2010 usando o novo modelo de projeto do modelo de conectividade de dados do SharePoint 2010 Business.

Para fins deste artigo, o tipo de fonte de dados do SQL Server foi usado para criar um ECT para uma tabela de banco de dados. Em seguida, o ECT foi usado para criar uma lista externa. A Figura 1 mostra o resultante “ Customers do CRM ” ECT depois de concluir a configuração do SharePoint Designer.

image: ECT Configuration for Accessing External CRM Data

Figura 1 do ECT Configuration para acesso externo dados do CRM

Existem algumas coisas para destacar aqui. Primeiro, observe o painel de informações sobre o tipo de conteúdo externo se o valor da propriedade de tipo de item do Office está definido para o contato. Durante o processo de configuração, você pode mapear os campos de dados externos para um tipo de item correspondente do Office como o contato. Isso não é um requisito, mas porque os dados de nome e endereço do banco de dados do CRM podem ser mapeados corretamente para um contato do Outlook, essa designação foi escolhida. Você poderá usar o resultado dessa opção de configuração no Outlook mais tarde.

Em segundo lugar, observe o painel de operações de tipo de conteúdo externo que métodos CRUD completos foi habilitados para esta ECT. Isso se deve às seleções feitas no Assistente de configuração. No entanto, certamente possível que haja motivos comerciais para limitar as operações do sistema LOB para somente leitura. Nesse caso, você pode simplesmente selecionar as operações de leitura de lista e item de leitura durante a configuração. Esses são apenas duas operações necessárias para criar um ECT.

Após a criação da ECT, é uma etapa simples para criar uma lista a partir dele. Você pode fazer isso criando uma nova lista externa de dentro do SharePoint ou o SharePoint Designer.

Listas do SharePoint padrão

É claro, você pode empregar as listas do SharePoint padrão para exibir dados de negócios. Por exemplo, digamos que seu departamento gerencia o conteúdo do curso de treinamento. Você mantém duas listas do SharePoint: Categoria do curso e o curso. Essas listas contêm as informações de curso que os funcionários em outras equipes usam para criar cliente correspondência, folhetos ou campanhas publicitárias. Portanto, os dados são mantidos por uma equipe pequena, mas devem estar prontamente disponíveis para serem usados por muitas pessoas na empresa.

SharePoint 2010 tem um novo recurso, na qual as pesquisas formam as relações entre listas. Quando criar uma nova coluna em uma lista, uma das opções tornar a coluna de um tipo de pesquisa, indica outra lista no site como sua origem. O SharePoint oferece suporte a pesquisas de valor único para relações um-para-muitos ou pesquisas com valores múltiplos para relações muitos-para-muitos. Se você escolher, o SharePoint também manterá a integridade referencial entre as listas com suporte para exclusões restritos ou em cascata. Isso fornece várias opções de como configurar e usar as listas do SharePoint.

Voltando ao nosso exemplo, você pode criar facilmente uma coluna de pesquisa da lista de curso chamada categoria é originada na lista de categorias de curso conforme mostrado no do Figura 2.

image: Using a Lookup List to Source Course Category Data

A Figura 2 de usar uma lista de pesquisa para a fonte de dados de categoria de curso

Trazer dados de lista do SharePoint para o Office

Até agora, vimos como superfície dados externos, como listas do SharePoint usando os novos recursos BCS 2010 do SharePoint. Os usuários podem acessar os dados por meio do navegador em um Tablet PC ou um dispositivo móvel, mas os usuários provavelmente irão apreciar rica experiência de aplicativo de cliente completa do Office. Let’s ativar agora nossa atenção a usar os dados de lista do SharePoint no cliente de duas maneiras. Primeiro, veremos como é possível acessar os dados sem escrever nenhum código, empregando o espaço de trabalho do SharePoint e o Outlook.

Ao desenvolver o nosso exemplo de solução CRM, há dois conectar & Exportar botões na faixa de opções da SharePoint para a lista de clientes externos: Sincronizar a área de trabalho do SharePoint e conectar-se ao Outlook (consulte do Figura 3). Se 2010 de espaço de trabalho do SharePoint estiver instalado no computador cliente, a sincronização de espaço de trabalho do SharePoint permite que você sincronizar as listas e bibliotecas de documentos para o cliente com um único clique. Uma cópia em cache local do conteúdo está disponível para o usuário no espaço de trabalho do SharePoint, em seguida, se o usuário está on-line ou off-line. Quando o usuário está em um estado offline e modifica um documento ou item de lista e salvá-lo localmente, o item de lista ou o documento será sincronizado com o SharePoint automaticamente quando o usuário está on-line novamente.

image: Connect & Export Options in the SharePoint Ribbon

A Figura 3 conectar & Exportar opções na faixa de opções do SharePoint

Essa é uma solução nenhum código necessário. Dados são disponibilizados no aplicativo de cliente para o espaço de trabalho do SharePoint mostrado no do Figura 4. E como os métodos CRUD completos foram definidos em da ECT, quaisquer alterações feitas nos dados do cliente no espaço de trabalho do SharePoint serão atualizadas no banco de dados do CRM também.

image: Accessing External List Data in a SharePoint Workspace

Figura 4 de acesso a dados externos da lista de um espaço de trabalho do SharePoint

Porque nós mapeado os campos de banco de dados do CRM para o tipo de item de contato Office durante a configuração da ECT, SharePoint pode fornecer nossos dados externos ao Outlook como itens de contato nativo. Clicando em conectar-se ao Outlook botão na faixa de opções, o SharePoint sincronizará nesta lista externa diretamente para o Outlook. Novamente, nenhum código necessárias, com dados do SharePoint inicial no cliente do Office.

Usando a API do REST

Soluções de código não, tais como aqueles ativados por meio da conectividade de lista de espaços de trabalho do SharePoint e do Outlook são ótimas, mas existem algumas experiências do usuário requerem uma solução mais personalizada. Para acomodar isso, precisamos fornecer acesso a dados da lista de aplicativos do Office de forma que permite que nós adaptar ainda mais a solução.

Possivelmente, uma das maneiras mais fáceis para um desenvolvedor acessar dados de biblioteca de documentos e a lista do SharePoint é por meio da nova API de REST (listdata.svc). A maioria dos dados do SharePoint é exposta como um ponto de extremidade RESTful. O local padrão para SharePoint Services é _ vti_bin, portanto, se você simplesmente digite a URL no navegador para o seu site e acrescentar /_vti_bin.listdata.svc, receberá novamente um ATOM padrão de serviços de documento que descreve as coleções disponíveis no site (consulte do Figura 5).

image: ATOM Services Document

Do documento de serviços de ATOM, a Figura 5

Observe que as listas do curso e CourseCategory estão presentes. Por mais acrescentando /Course à URL, você pode recuperar todos os cursos na lista ou pode recuperar qualquer um curso específico anexando um número. Por exemplo, isso irá retornar o terceiro curso:

http://intranet.contoso.com/sites/SPC/_vti_bin/listdata.svc/Course(3)

Você pode fazer consultas mais avançadas, anexando o filtro de propriedade a seguir:

?$filter=startswith(propertyname,'value')

Mas uma consulta avançada que importante aqui é o que pode retornar os cursos com seus dados CourseCategory associados. Acrescentando a seguir para a URL do site, você pode recuperar a estrutura combinada do curso e CourseCategory em uma única carga:

/_vti_bin.listdata.svc/Course?$expand=Category

Você verá isso implementado em um suplemento do Word na próxima seção.

Criando um suplemento do Word

Você sabe como aproveitar as APIs do REST para obter acesso a dados, pode superfície os dados nos aplicativos cliente em que os usuários tenham uma rica experiência de criação. Neste exemplo, estamos irá criar um suplemento do Word e apresentar esses dados para o usuário de maneira significativa. Este aplicativo terá uma lista suspensa para as categorias do curso, uma caixa de listagem é carregado com cursos correspondentes à seleção categoria e um botão para inserir texto sobre o curso no documento do Word.

No Visual Studio 2010, crie um Office 2010 Word add-in de projeto novo no c#.

Agora, adicione uma nova fonte de dados do serviço. No painel de Add Service Reference no assistente, digite a URL do site do SharePoint e acrescente /_vti_bin/listdata.svc a ele. Por exemplo:

http://intranet.contoso.com/_vti_bin/listdata.svc

Depois de digitar a URL, clique em OK. Isso recupera os metadados para o site do SharePoint. Quando você clica em OK, os serviços de dados do WCF irá gerar classes com rigidez de tipos para você usando Estrutura de Entidade. Isso completamente abstrai o fato de que a fonte de dados é o SharePoint ou um produtor OData que fornece dados por meio do protocolo de dados aberto. A partir deste ponto, você simplesmente trabalhar com os dados como classes do .net familiares.

Para a interface do usuário, você irá criar um painel de tarefas personalizado que fornece uma interface do usuário em aplicativos do Office que podem ser encaixadas na parte superior, inferior, esquerda ou direita do aplicativo. Os painéis de tarefas podem ter adicionados a elas, incluindo o controle de usuário do Windows Presentation Foundation (WPF) que será usado aqui de controles Windows Forms.

Adicione um controle de usuário do WPF para o projeto usando a caixa de diálogo Add New Item e nomeá-la CoursePicker. Quando o designer é aberto, substitua o elemento Grid com o trecho de XAML mostrado no do Figura 6. Isso simplesmente adiciona a caixa de combinação, Button e ListBox e define algumas propriedades. Posteriormente, você adicionará alguns eventos.

Do Word de marcação da interface do usuário, a Figura 6

<StackPanel>

  <ComboBox 

    Name="cboCategoryLookup" Width="180" Margin="5" 

    HorizontalAlignment="Center" IsEditable="False" 

    ItemsSource="{Binding}"    

    DisplayMemberPath="CategoryName" 

    SelectedValuePath="CategoryName" />

  <Button Name="button1" 

    Content="Insert Course Information" Margin="5" />

  <ListBox Name="courseListBox" ItemsSource="{Binding}">

    <ListBox.ItemTemplate>

      <DataTemplate>

        <StackPanel>

          <StackPanel Orientation="Horizontal">

            <TextBlock Text="{Binding Path=CourseID}" 

              FontWeight="Bold" />

            <TextBlock Text=": " FontWeight="Bold" />

            <TextBlock Text="{Binding Path=Name}" />

          </StackPanel>

          <TextBlock Text="{Binding Path=Description}" 

            Margin="5 0 0 0" />

        </StackPanel>

      </DataTemplate>

    </ListBox.ItemTemplate>

  </ListBox>

</StackPanel>

Abra o arquivo CoursePicker.xaml.cs. Imediatamente após o namespace, você adicionará dois usando declarações, um para a referência de serviço, ServiceReference1 e outra para System.net:

namespace Conf_DS {

    using ServiceReference1;

    using System.Net;

Na classe CoursePicker, a prioritária é instanciar o objeto de contexto de dados. Aqui, você passa a URL para o seu site, anexado novamente com a designação _vti_bin/listdata.svc:

public partial class CoursePicker : UserControl {

  Office2010DemoDataContext dc = new Office2010DemoDataContext(

    new Uri("http://intranet.contoso.com/sites/spc/_vti_bin/listdata.svc"));

Em seguida, você terá uma variável de nível de classe de lista para armazenar em cache os itens recuperados do curso e salvar os ciclos no servidor:

List<CourseItem> courses = null;

O código para recuperar os cursos e CourseCategory dados estão sendo o OnInitialized substituir o método. Em primeiro lugar, você pode designar suas credenciais de logon para passar para o servidor. Em seguida, categorias de curso são recuperadas através do objeto de contexto de dados e vinculadas à categoria de caixa de combinação. Por fim, cursos usando a opção de expansão, são retornados com a categoria associada e carregados no objeto de lista de cursos. Isso irá armazenar em cache os cursos localmente para um melhor desempenho:

protected override void OnInitialized(EventArgs e) {

    dc.Credentials = CredentialCache.  

  DefaultCredentials;



    // Load Category dropdown list

    cboCategoryLookup.DataContext =  

      dc.CourseCategory;

    cboCategoryLookup.SelectedIndex = 0;



    // To cache data locally for courses 

    // Expand to retrieve the Category as well.

    courses = dc.Course.Expand("Category").ToList();



    base.OnInitialized(e);

  }

Agora você precisa adicionar alguns eventos. Retornar para o designer CoursePicker e clique duas vezes no botão para criar o botão do evento de clique. Em seguida, clique sobre a caixa de combinação e, no menu de propriedades, clique na guia Events e clique duas vezes o evento SelectionChanged. Adicione código para o manipulador de evento SelectionChanged para que ele se parece com isto:

private void cboCategoryLookup_SelectionChanged(

  object sender, SelectionChangedEventArgs e) {



  courseListBox.DataContext = from c in courses

    where c.Category.CategoryName == cboCategoryLookup.SelectedValue.ToString()

    orderby c.CourseID

    select c;

}

Aqui, uma consulta LINQ simples procura o objecto de lista de cursos (aquele carregada com dados recuperados usando a opção expandir) para localizar todos os cursos que tenham um nome de categoria correspondente ao nome da categoria de curso selecionada na caixa de combinação. Ele também ordena os resultados para proporcionar uma experiência de usuário de limpar.

Por fim, adicione código ao manipulador de eventos de botão para converter o item selecionado da caixa de listagem em um objeto CourseItem.  Em seguida, você adotar os vários elementos de dados que você deseja apresentar ao usuário e colocá-los no documento no local do ponto de inserção:

private void button1_Click(

  object sender, RoutedEventArgs e) {



  CourseItem course = (CourseItem)courseListBox.SelectedItem;

  Globals.ThisAddIn.Application.Selection.InsertAfter(

    String.Format("{0}: {1} \n{2}\n", course.CourseID, 

    course.Name, course.Description));

}

E é isso — código realmente simples para acessar os dados do SharePoint por meio de serviços de dados do WCF.

Agora, abra o arquivo ThisAddIn.cs. Este é o ponto de entrada principal para todos os suplementos do Office. Aqui você pode adicionar código para instanciar o painel de tarefas:

private void ThisAddIn_Startup(object sender, System.EventArgs e) {



  UserControl wpfHost = new UserControl();

  ElementHost host = new ElementHost();

  host.Dock = DockStyle.Fill;

  host.Child = new CoursePicker();

  wpfHost.Controls.Add(host);

  CustomTaskPanes.Add(wpfHost, "Training Courses").Visible = true;

}

O controle de usuário do WPF CoursePicker não pode ser adicionado diretamente para a coleção de objetos do painel de tarefas personalizado. Ele deve ser hospedado em um controle ElementHost, que fornece a ponte entre os controles de Windows Forms e controles do WPF. Observe que o objeto CoursePicker é adicionado como um filho do objeto ElementHost e, em seguida, o objeto ElementHost é adicionado para a coleção de objetos do painel de tarefas personalizado. Um aplicativo do Office pode ter mais de um painel de tarefas personalizados instalado e disponíveis para o usuário a qualquer momento, assim, o painel de tarefas para este suplemento só será um na coleção. A Figura 7 mostra o suplemento concluído.

image: The Word Add-In at Work

A Figura 7 O suplemento do Word no trabalho

Com os dados que aparecem no aplicativo do Office, você pode tirar a solução ainda mais adicionando o código que interage com as APIs do Word. Por exemplo, você pode adicionar código para que quando um usuário seleciona um curso, as informações são inseridas e formatadas no documento. O aplicativo do Office APIs ricos e você poderá adicionar mais recursos à sua solução personalizada que pode fazer os usuários ainda mais produtivo. Em seguida, veremos um exemplo com controles de conteúdo do Word conectado a um modelo de objeto do SharePoint no lado do cliente.

Usando o modelo de objeto do cliente

Usando as APIs do REST para obter acesso a dados é uma entre algumas opções disponíveis para você. Por exemplo, há também três novas APIs disponíveis para 2010 do SharePoint que fornecem um modelo de programação consistente em JavaScript, clientes de Silverlight e de aplicativos .NET gerenciados. Esses modelos de objeto três cliente interagem com um subconjunto de recursos de modelo de objeto de servidor do SharePoint e essencialmente interoperam com o SharePoint no nível do conjunto de sites e abaixo: Webs, listas, listitems, tipos de conteúdo, campos e listas externas. Se você estiver familiarizado com o modelo de objeto do servidor, você estará familiarizado com o modelo de objeto cliente.

Para demonstrar como usar o modelo de objeto cliente, usaremos a lista externa que contém os clientes do CRM para criar um suplemento do Word em nível de documento em que o painel de ações é carregado com os clientes. Este é um caso em que você precisará usar o modelo de objeto cliente porque o serviço de dados de lista não fornece acesso às listas externas. Neste exemplo, o usuário pode selecionar um cliente e inserir suas informações de nome e endereço em controles de conteúdo em um modelo de documento de cotação.

O exemplo anterior do curso e categoria era um suplemento em nível de aplicativo. Um nível de aplicativo Word add-in estará presente sempre que o Word é iniciado. Nível de documento add-ins, no entanto, são vinculados a um documento e só será carregado se abrir um documento de um determinado tipo. Nesse caso, a lista de clientes externos que só será apresentada ao usuário quando estiver trabalhando em um documento de cotação.

No Visual Studio, comece a criar um novo projeto de documento do Word 2010. No assistente, você precisará selecionar um documento padrão ou em um documento que você salvou. No meu caso, usei um documento de cotação, que eu já tinha salvo. Para abrir o documento dentro do Visual Studio e o Word torna-se o designer do documento.

Você pode usar a caixa de ferramentas para posicionar controles diretamente na superfície do documento como faria com um aplicativo Windows Forms. Aqui você pode adicionar controles de conteúdo do Word para obter as informações de nome e endereço. Esses controles de conteúdo será preenchido com dados da seleção de cliente do usuário em tempo de execução.

Para adicionar um controle de conteúdo no documento, selecione o texto no documento que você deseja quebrar o controle de conteúdo. Em seguida, arraste um RichTextContentControl a partir de controles do Word na caixa de ferramentas e soltá-la no texto selecionado. Em seguida, forneça um nome para o controle e um valor de texto em Propriedades. Para fazer isso para o cliente e da empresa a identificação do nome, endereço, cidade e cliente para que o documento se pareça com do Figura 8.

image: Creating the Quote Document

A Figura 8 de Criando o documento de cotação

Como o modelo de objeto do cliente não fornece com rigidez de tipos de dados do servidor, você precisa adicionar uma classe de cliente para o projeto. A classe Customer, será usada para mapear os dados retornados de um modelo de objeto do cliente:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace CSOM_Quote {

  public class Customer     {

    public string CustomerID { get; set; }

    public string CompanyName { get; set; }

    public string ContactName { get; set; }

    public string Address { get; set; }

    public string City { get; set; }

  }

}

Para usar o modelo de objeto cliente, você precisa referenciar Microsoft.SharePoint.Client e Microsoft.SharePoint.Client.Runtime.

Como no exemplo anterior, a recuperação de dados ocorre no método de substituição OnIntitialized. Há algumas das principais diferenças entre codificando o modelo de objeto do cliente e os serviços de dados do WCF. Em primeiro lugar, o modelo de objeto cliente espera que você tenha familiaridade com o SharePoint e sua estrutura. Com serviços de dados do WCF, que é abstraída fora e trabalhar com os dados somente. Em segundo lugar, com o modelo de objeto cliente, os dados retornados não é fortemente tipados. Você é responsável por obter os dados em objetos que podem ser usados para consultas do LINQ e vinculação de dados.

O código de acesso a dados é mostrado no do Figura 9. O contexto de cliente é o objeto central aqui. Passe o URL do site para criar uma nova instância do contexto de cliente. Em seguida, você pode iniciar a criação de objetos SharePoint, usando as seguintes etapas:

  1. Criar um site
  2. Criar uma coleção de listas do site
  3. Obter uma lista com um nome específico
  4. Obter todos os itens da lista
  5. Carregar da consulta para o contexto
  6. Executar a consulta

A Figura 9 CRM de código de acesso de dados

protected override void OnInitialized(EventArgs e) {

  SPClientOM.ClientContext context =  new ClientContext("http://intranet.contoso.com/sites/spc");

  SPClientOM.Web site = context.Web;

  SPClientOM.ListCollection lists = site.Lists;

  var theBCSList = lists.GetByTitle("Customers");

  SPClientOM.CamlQuery cq = new SPClientOM.CamlQuery();

  IQueryable<SPClientOM.ListItem> bcsListItems =  theBCSList.GetItems(cq);

  bcsList = context.LoadQuery(bcsListItems);

  context.ExecuteQuery();



  var bcsCustomerData = 

    from cust in bcsList

    select new Customer {

      CustomerID = cust.FieldValues.ElementAt(1).Value.ToString(),

      ContactName = cust.FieldValues.ElementAt(2).Value.ToString() 

        + " " 

        + cust.FieldValues.ElementAt(3).Value.ToString(),

      CompanyName = cust.FieldValues.ElementAt(4).Value.ToString(),



      Address = cust.FieldValues.ElementAt(5).Value.ToString(),

      City = cust.FieldValues.ElementAt(6).Value.ToString(),  };



  foreach (var x in bcsCustomerData)  {

    Customer tempCustomer = new Customer();

    tempCustomer.CustomerID = x.CustomerID;

    tempCustomer.CompanyName = x.CompanyName;

    tempCustomer.ContactName = x.ContactName;

    tempCustomer.Address = x.Address;

    tempCustomer.City = x.City;



    customers.Add(tempCustomer);

  }



  customerListBox.DataContext = customers;

  base.OnInitialized(e);

}

Antes de chamar o método ExecuteQuery, todas as afirmações anteriores são colocados em fila e enviadas apenas para o servidor execute quando é chamada de consulta. Dessa forma, você está no controle da largura de banda e cargas. Depois que a consulta retorna com seus resultados, o restante do código mapeia os dados em um objeto de lista de clientes que pode ser vinculado ao controle de caixa de listagem do cliente.

Um controle de usuário do WPF é usado para esse exemplo também. Como o XAML é semelhante ao exemplo anterior, ele não é mostrado aqui. No entanto, o código para instanciar um painel de ações de nível de documento, em vez de um painel de tarefas em nível de aplicativo é um pouco diferente, como você pode ver aqui:

public partial class ThisDocument {

  private CustomersCRM CustomerActionPane =  new CustomersCRM();



  private void ThisDocument_Startup(object sender, System.EventArgs e) {

    ElementHost host = new ElementHost();

    host.Dock = DockStyle.Fill;

    host.Child = new CustomerPicker();

    CustomerActionPane.Controls.Add(host);

    this.ActionsPane.Controls.Add(CustomerActionPane);

  }

...

Observe que o controle de usuário do WPF do selecionador de cliente é adicionado ao ElementHost, o objeto ElementHost é adicionado ao painel de ação de cliente controla a coleção e, em seguida, o painel de ações do cliente é adicionado à coleção de controles do painel de ações.

A última etapa é adicionar o botão de clique de evento para preencher os controles de conteúdo do Word com as informações de endereço e o nome apropriado, conforme mostrado no do Figura 10.

A Figura 10 de Adicionar o botão Click evento para controles de conteúdo do Word

private void button1_Click(

  object sender, RoutedEventArgs e) {

  Customer customer = (Customer)customerListBox.SelectedItem;



  Globals.ThisDocument.wccContactName.Text = customer.ContactName;

  Globals.ThisDocument.wccCompanyName.Text = customer.CompanyName;

  Globals.ThisDocument.wccAddress.Text = customer.Address;

  Globals.ThisDocument.wccCity.Text = customer.City;

  Globals.ThisDocument.wccCustomerID.Text = customer.CustomerID;

}

Em primeiro lugar, você converter o item selecionado da caixa de listagem a um objeto cliente.Em seguida, os dados do objeto cliente são usados para popular os controles de conteúdo.Os resultados da aparência do Figura 11.

image: The CRM Add-In Within Word

A Figura 11 O CRM de dentro do Word

Serviços da Web como serviços sociais

Até agora, você viu várias maneiras de que acessar os dados do SharePoint a partir de aplicativos cliente do Office.A técnica final, examinaremos está usando serviços da Web.Como a principal maneira de acessar remotamente os dados do SharePoint, o SharePoint oferece os serviços da Web.Os serviços da Web no SharePoint 2010 oferece acesso a quase toda a funcionalidade no SharePoint Server.Ao contrário de algumas das outras tecnologias de dados já vimos, como, por exemplo, REST e o modelo de objeto cliente, capas de serviços da Web tanto acesso a dados e acessar a funcionalidade administrativa.

Todos os serviços da Web que você adora ainda estão nesse local, como os serviços de Lists. asmx e Search.asmx.Serviços da Web do SharePoint são implementados como serviços da Web do asp.net com a extensão. asmx, e a maioria dos serviços de novos no SharePoint 2010 também é gravada como serviços ASMX.Isso foi feito principalmente para que a maior compatibilidade com outros produtos e ferramentas.

Um foco novo serviços da Web do SharePoint é serviços sociais.O Centro de todos os aplicativos sociais é o usuário.O SharePoint tem uma UserProfileService que lhe permite acessar todas as informações sobre um usuário de perfil.UserProfileService inclui as propriedades padrão, como nome e endereço, mas também inclui outras propriedades como, por exemplo, passatempos, habilidades, escolas e colegas de trabalho.Colegas de trabalho (ou amigos como são chamados em outros sites públicos de sociais) são um recurso-chave na estrutura social do SharePoint.

Outro aspecto importante dos aplicativos sociais é sobre o conteúdo que encontrarem pessoas pensar.O SharePoint tem uma SocialDataService permite que os usuários a marca, taxa e o comentário em dados, documentos e páginas em seus sites.

O terceiro aspecto importante de social do SharePoint é as atividades de publicação e assinatura de atividades que geram seus colegas de trabalho.O SharePoint oferece um ActivityFeed e APIs para publicar as atividades como um feed.

Porque este não é um artigo sobre os novos recursos sociais do SharePoint, não entraremos em mais detalhes sobre essas, mas eles fornecem algum contexto importante para os exemplos neste artigo.Consulte o Centro de desenvolvimento do SharePoint de ou “ do rede de gerenciamento social com o Microsoft Office SharePoint Server 2007 ” white paper para obter mais detalhes.

Estendendo o Outlook com serviços da Web

Nós vimos como SharePoint e o Office fornecem muitas opções quando estiver determinando a melhor maneira de acessar os dados para uso em aplicativos do Office.Outra maneira que inclui o consumo de serviços da Web do SharePoint.Neste exemplo, criaremos uma faixa de opções do Outlook novos que lhe permite extrair todos os seus colegas de trabalho do SharePoint ao Outlook como itens de contato.Você está mesmo capaz de superfície de imagem do perfil do usuário para o Outlook, exatamente como você está acostumado a ver com os contatos fornecidos pelo Microsoft Exchange.

Comece criando um suplemento do Outlook novo no Visual Studio 2010.Vamos escrever isso em c#, mas você pode usar o Visual Basic se você preferir.Nas versões anteriores, Visual Basic tinha uma pequena vantagem com suporte a recursos como, por exemplo, parâmetros opcionais, mas a Linguagem c# agora oferece suporte para eles, muito.

A faixa de opções fornece uma maneira fácil e consistente para interagir com todos os aplicativos do Office.O Outlook 2010 agora inclui uma faixa de opções na tela principal.Neste exemplo, você adicionará uma faixa de opções nova aqui.O Visual Studio 2010 torna fácil a criação de faixas de opções do Office com um visual designer de faixa de opções.Você pode simplesmente arrastar controles da caixa de ferramentas à esquerda e solte na superfície de design.

Neste exemplo, basta definir algumas propriedades, como o rótulo para a guia e o grupo.Em seguida, adicione um controle de botão para a superfície.Depois de ter um botão adicionado ao seu grupo de faixa de opções, pode definir o tamanho como grande e definir uma imagem do botão.A faixa de opções será semelhante ao do Figura 12.

image: Creating a New Outlook Ribbon

A Figura 12 de criação de uma nova faixa de opções do Outlook

A última coisa a fazer é definir a propriedade para determinar quando a faixa de opções será exibida.Por padrão, a faixa de opções é exibida no Gerenciador de mensagens.Esta é a janela que você vê quando você abre um item de email.Neste exemplo, você quer a faixa de opções para exibir na tela principal.Selecione a faixa de opções e defina a propriedade RibbonType como Microsoft.Outlook.Explorer.Você pode ver que há um número de casas em que a faixa de opções poderá ser exibida, inclusive os gerenciadores de contato de email e.

Em seguida, clique duas vezes em seu botão da faixa de opções para criar um code-behind clique manipulador de eventos.Este é o evento que você usará para criar o contato do Outlook.

Agora você está pronto para adicionar o código que cria um contato no Outlook.O Visual Studio 2010 torna isso fácil de fazer.Acho mais fácil dividir o problema em várias partes menores.Em primeiro lugar, você criou o suplemento do Outlook, você criou a faixa de opções.Após cada uma dessas etapas, certifique-se de que pressionar F5 para compilar e executar seu aplicativo.Agora você pode criar um contato do Outlook usando valores codificados.Depois de verificar se isso está funcionando, você pode adicionar o código que chama o SharePoint.Em cada etapa novamente, verifique se tudo está funcionando corretamente antes de passar para a próxima etapa.

A Figura 13 mostra o código para criar um novo contato codificado.Isso usa o método CreateItem para criar um novo objeto ContactItem.Em seguida, você pode definir as propriedades do ContactItem e chamar o método Save para confirmar as alterações.

A Figura 13 do código clichê para criar um contato

Outlook.ContactItem newContact = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olContactItem);



newContact.FirstName = "Paul";

newContact.LastName = "Stubbs";

newContact.Email1Address = "pstubbs@microsoft.com";

newContact.CompanyName = "Microsoft";

newContact.JobTitle = "Technical Evangelist";

newContact.CustomerID = "123456";

newContact.PrimaryTelephoneNumber = "(425)555-0111";

newContact.MailingAddressStreet = "1 Microsoft Way";

newContact.MailingAddressCity = "Redmond";

newContact.MailingAddressState = "WA";

newContact.AddPicture(@"C:\me.png");

newContact.Save();

A parte de apenas um realmente um desafio é a maneira de definir a imagem de contato chamar o método AddPicture que toma um caminho para uma imagem no disco. Isso é problemático porque você deseja receber imagens do SharePoint. Você verá como fazer isso na próxima seção. Depois que você verifique se o código funciona e um contato é criado no Outlook, você estará pronto para chamar o SharePoint e adicionar contatos reais.

Empregando o serviço de perfil de usuário

UserProfileService é um serviço da Web do SharePoint, que você pode usar para acessar as informações de perfil, incluindo uma lista dos seus colegas e suas informações de perfil. Para usar este serviço, comece adicionando uma referência ao seu projeto. Como esse é um serviço da Web e não é um serviço WCF, você precisará clique na guia avançada da caixa de diálogo Add Service e, em seguida, clique no botão Add Web Service. Isso abre a antiga caixa de diálogo Add Web Service que você se lembra do Visual Studio 2005.

Depois de adicionar a referência, você pode adicionar o código para recuperar seus colegas de trabalho:

// Instantiate the Web service.

UserProfileService userProfileService = new UserProfileService();



// Use the current user log-on credentials.

userProfileService.Credentials = System.Net.CredentialCache.DefaultCredentials;

Esse código cria uma instância do serviço e passa as credenciais atuais para o serviço. Em seguida, chame o método de GetUserColleagues passando o usuário que você deseja recuperar colegas para. Isso retornará uma matriz de objetos ContactData:

ContactData[] contacts = userProfileService.GetUserColleagues("contoso\\danj");

Agora podemos pode fazer loop através de todos os objetos ContactData que representam os dados de perfil para os colegas de trabalho do usuário do SharePoint. Podemos recuperar as propriedades estendidas, chamando o método GetUserProfileByName, que retorna uma matriz de PropertyData contém pares de chave e valor para cada colega:

// Add each Colleague as an Outlook Contact

foreach (ContactData contact in contacts) {

  // Get the users detailed Properties

  PropertyData[] properties = userProfileService.GetUserProfileByName(contact.AccountName);



  // Create a new Outlook Contact

  Outlook.ContactItem newContact = Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olContactItem);

Agora podemos converter os pares de chave/valor nas propriedades de contatos:

// Set the Contact Properties

newContact.FullName = contact.Name;

newContact.FirstName = properties[2].Values[0].Value.ToString();

newContact.LastName = properties[4].Values[0].Value.ToString();

newContact.Email1Address = properties[41].Values[0].Value.ToString();

...

Por fim, nós pegar a foto do contato e salvar o novo contato:

// Download the users profile image from SharePoint

SetContactImage(properties, newContact);



newContact.Save();

A última parte do quebra-cabeça está recuperando a imagem do contato do SharePoint. Uma das propriedades estendidas inclui um caminho para uma miniatura da imagem do perfil do usuário. Você precisa fazer o download desta imagem em um arquivo temporário em disco para que a API do Outlook pode adicioná-lo ao objeto ContactItem:

private static void SetContactImage(

  PropertyData[] properties, 

  Outlook.ContactItem newContact){



  // Download image to a temp file

  string userid = properties[16].Values[0].Value.ToString();

  string imageUrl = properties[15].Values[0].Value.ToString();

  string tempImage = string.Format(@"C:\{0}.jpg", userid);

  WebClient Client = new WebClient();

  Client.Credentials = CredentialCache.DefaultCredentials;

  Client.DownloadFile(imageUrl, tempImage);

  newContact.AddPicture(tempImage);

}

E pronto!Agora você tem uma Outlook add-in de faixa que chama o SharePoint para extrair dados sociais para contatos do Outlook.Quando você executa o aplicativo, você verá um ContactItem preenchido com dados do SharePoint, incluindo informações de perfil do usuário e a imagem.

Conclusão

Agora você viu como é fácil obter dados do SharePoint para clientes do Office.Mostramos a você uma variedade de opções de soluções sem código altamente adaptável soluções usando c# ou Visual Basic.

Emprego de serviços de dados do WCF para acessar dados de lista do SharePoint fornece um padrão comum para desenvolvedores .net que possui um rápido e fácil de implementar.O modelo de objeto cliente fornece os meios para acessar o SharePoint externo listas e abre um mundo de oportunidades de trazer dados LOB para o Office.E, finalmente, serviços da Web do SharePoint permite o acesso mais flexível para dados, mas também requer um pouco mais de compromisso em termos de codificação e teste.

Disponibilizar os dados do SharePoint aos usuários como listas é uma etapa importante, pois ele permite que uma ótima experiência no navegador.Retirá-lo um passo além disso, você pode utilizar uma variedade de opções de acesso a dados, em seguida, trazer os dados para os aplicativos do Office que já são familiares aos usuários.O Visual Studio 2010 torna tudo isso muito mais fácil de criar, depurar e implantar.Como você pode ver, elas representam alguns dos recursos novos e importantes do desenvolvimento, que você pode aproveitar com as novas versões do produto.

Mais treinamento, informações e exemplos podem ser encontradas online no desenvolvedor de SharePoint e do Office de centers.

Donovan Follette  um divulgador técnico da Microsoft está trabalhando com tecnologias, incluindo o Active Directory, Lightweight Directory Services e os serviços de federação do Active Directory.Agora, ele se concentra no desenvolvimento do Office e a criação de soluções integradas com o SharePoint 2010.Visite seu blog em blogs.msdn.com/b/donovanf/ de .

Paul Stubbs é um divulgador técnico da Microsoft que focaliza a comunidade de desenvolvimento do operador de informações para o SharePoint e o Office, o Silverlight e o Web 2. 0 social redes. Ele é autor de três livros sobre desenvolvimento de soluções com o Office, SharePoint e o Silverlight. Leia seu blog em blogs.msdn.com/b/pstubbs/de .

*Meus agradecimentos aos seguinte especialista técnico para revisar este artigo:*John Durant