Criar um suplemento hospedado pelo provedor que inclui um tipo de conteúdo e lista personalizada do SharePoint

Criar um Suplemento do SharePoint que agrupa um aplicativo Web hospedado na nuvem com modelos de lista personalizada, instâncias de lista e tipos de conteúdo personalizado, hospedados no SharePoint, usando as Office Developer Tools para Visual Studio. Saiba como interagir com Webs do suplemento do SharePoint usando o serviço Web REST/OData, assim como implementar o OAuth em um suplemento do SharePoint.

A maioria dos componentes clássicos do SharePoint, como tipos de conteúdo personalizados, definições de listas personalizadas e fluxos de trabalho pode ser incluída em um suplemento do SharePoint hospedado na nuvem. O exemplo simples deste artigo contém o seguinte:

  • Uma Web de suplemento com:

    • Algumas colunas de site personalizadas

    • Um tipo de conteúdo personalizado que usa colunas personalizadas

    • Um modelo de lista personalizada que usa o tipo de conteúdo personalizado

    • Uma instância de lista baseada na definição de lista personalizada

  • Um aplicativo Web ASP.NET que lê os dados da instância de lista

Pré-requisitos para criar esse suplemento do SharePoint

  • Visual Studio

  • O Visual Studio inclui o Microsoft Office Developer Tools para Visual Studio, mas, às vezes, uma versão das ferramentas é lançada entre as atualizações do Visual Studio. Para garantir que você tenha a versão mais recente das ferramentas, execute o instalador do Office Developer Tools para Visual Studio 2013 ou o instalador do Office Developer Tools para Visual Studio 2015.

  • Uma instalação do SharePoint para teste e depuração

    • Ela pode estar no computador de desenvolvimento ou você pode desenvolver com uma instalação remota do SharePoint. Se trabalhar com a instalação remota, precisará instalar o modelo de objeto do cliente redistribuível na instalação de destino. Ele está disponível como um pacote redistribuível no Centro de Download da Microsoft. Pesquise por "SDK de componentes do cliente SharePoint Server 2013" ou "SDK online de componentes do cliente SharePoint".

    • O site de teste do SharePoint deve ser criado a partir da definição de site do Site do Desenvolvedor (que você pode criar na Administração Central).

    • O aplicativo Web remoto se comunica com a Web do suplemento usando o JavaScript e a biblioteca de domínio cruzado ou o OAuth. Se o OAuth for usado, como no exemplo que dá continuidade a este artigo, a instalação do SharePoint deverá ser configurada para usar o OAuth.

    Observação

    Confira orientações sobre como configurar um ambiente de desenvolvimento que atenda às suas necessidades nos dois tipos de Suplementos do SharePoint: hospedado no SharePoint e hospedado no provedor.

Conceitos fundamentais para a criação de um suplemento

Antes de criar seu primeiro suplemento, é preciso ter um conhecimento básico dos suplementos do SharePoint e das diferenças entre suplementos hospedados no SharePoint e suplementos do SharePoint hospedados pelo provedor. Os artigos mostrados na tabela a seguir têm como objetivo fornecer essa compreensão.

Título do artigo Descrição
Suplementos do SharePoint Saiba mais sobre o novo modelo de suplemento no SharePoint que permite criar suplementos, que são pequenas soluções fáceis de usar para os usuários finais.
Aspectos importantes do cenário de desenvolvimento e da arquitetura dos suplementos do SharePoint Saiba mais sobre os aspectos da arquitetura de suplementos do SharePoint e o modelo para Suplementos do SharePoint, incluindo opções de hospedagem de suplemento, opções da interface do usuário (UI), sistema de implantação, sistema de segurança e ciclo de vida.
Escolher padrões para desenvolver e hospedar seu suplemento do SharePoint Saiba mais sobre as diversas maneiras de hospedar suplementos do SharePoint.

Desenvolver o suplemento do SharePoint

Nos procedimentos desta seção, você criará um suplemento do SharePoint que inclui uma Web do suplemento com componentes do SharePoint e um aplicativo Web remoto no seu computador de desenvolvimento.

Configurar a solução do Visual Studio e seus elementos

  1. No Visual Studio, crie um projeto Suplemento do SharePoint no nó do Office SharePoint | Suplementos (em C# ou Visual Basic), na árvore de modelos do Novo Assistente de Projeto. Selecione a opção de hospedagem Hospedado pelo provedor. No exemplo contínuo deste artigo, o C# é usado como a linguagem, e LocalTheater é o nome do projeto.

  2. No assistente, selecione Concluir.

  3. Abra o arquivo AppManifest.xml no designer de manifesto. No elemento Title, consta o nome do projeto como valor padrão. Substitua-o por outro mais propício, pois esse será o nome do suplemento que os usuários visualizarão na interface do usuário.

  4. Especifique um Name para o suplemento. Esse será um nome interno que deverá conter apenas caracteres ASCII e nenhum espaço; por exemplo, LocalTheater.

  5. Abra o arquivo Web.config no projeto do aplicativo Web e adicione o elemento <customErrors mode="Off"/> ao elemento system.web.

  6. Verifique se as referências aos seguintes assemblies constam no projeto do aplicativo Web. Se sua edição do Visual Studio não adicionou as referências automaticamente, adicione-as agora.

    • Microsoft.IdentityModel.dll. Esse assembly está instalado no cache de assembly global com o Windows Identity Foundation (WIF). Como esse é um assembly do .NET Framework 3.5, ele é, por padrão, filtrado para fora do nó Framework da caixa de diálogo Adicionar Referência. Você pode adicionar uma referência a ele navegando diretamente para o diretório C:\Program Files\Reference Assemblies\Microsoft\Windows Identity Foundation\v3.5 do seu computador de desenvolvimento.

    • Microsoft.IdentityModel.Extensions.dll. Você pode adicionar uma referência a ele navegando diretamente para a pasta C:\Program Files\Reference Assemblies\Microsoft\Microsoft Identity Extensions\1.0 do seu computador de desenvolvimento.

    • System.IdentityModel.dll. Esse assembly é parte do .NET Framework 4 e aparece no nó Assemblies | Framework da caixa de diálogo Adicionar Referência.

  7. Se seu aplicativo Web remoto acessa informações no host da Web assim como na Web do suplemento, é preciso adicionar um elemento AppPermissionRequests, com um ou mais elementos filho AppPermissionRequest, no arquivo AppManifest.xml. (O aplicativo Web no exemplo contínuo deste artigo acessa apenas a Web de suplemento. As entidades de suplemento têm automaticamente todas as permissões necessárias para o suplemento web, portanto, o AppManifest.xml no exemplo não tem um elemento AppPermissionRequests .) Para obter mais informações sobre solicitações de permissão de suplemento e como adicioná-las, confira Permissões de suplemento no SharePoint.

Adicionar componentes do SharePoint

Adicione componentes do SharePoint a um suplemento exatamente da mesma forma que adicionaria a uma solução de farm clássica. No entanto, nem todos os tipos de componentes do SharePoint podem ser incluídos em um suplemento do SharePoint. As finalidades às quais esses componentes se destinam são realizadas de outras maneiras nos suplementos do SharePoint.

Confira informações detalhadas sobre os Tipos de componentes do SharePoint que podem ser incluídos em um suplemento do SharePoint e como incluí-los em um projeto.

Para fins do exemplo contínuo, aplique os procedimentos a seguir. Eles fornecem exemplos de como usar o Visual Studio para adicionar colunas personalizadas, tipos de conteúdo, modelos de lista e instâncias de lista a um suplemento do SharePoint.

Criar os tipos de coluna personalizada

  1. No Gerenciador de Soluções, adicione um item de Coluna de Site do SharePoint ao projeto do suplemento do SharePoint com o nome Actor.

  2. No arquivo elements.xml file da nova coluna de sites, edite o elemento Field para que tenha os atributos e valores mostrados no exemplo a seguir, exceto que você não deve alterar o valor do GUID para o atributo ID que foi gerado pelo Visual Studio. Não se esqueça das chaves "{}".

    <Field ID="{generated GUID}" 
        Name="Actor" 
        Title="Actor" 
        DisplayName="Actor/Actress" 
        Group="Theater and Movies" 
        Description="The person cast, perhaps tentatively, in the role" 
        Type="Text" 
    />
  1. Adicione outro item de Coluna de Site ao projeto chamado CastingStatus.

  2. No arquivo elements.xml da nova coluna de site, edite o elemento Field para que tenha os atributos e os valores mostrados no exemplo a seguir, mas não altere o valor do GUID do atributo ID que foi gerado pelo Visual Studio.

  <Field ID="{generated GUID}" 
      Name="CastingStatus" 
      Title="CastingStatus"
      DisplayName="Casting Status" 
      Group="Theater and Movies" 
      Description="The current casting status of the role" 
      Type="Choice">
  </Field>
  1. Como este é um campo de opção, especifique as possíveis opções e a ordem em que elas devem aparecer na lista suspensa quando o usuário estiver escolhendo; escolha também a opção padrão. Adicione a seguinte marcação filha ao elemento Field.
  <CHOICES>
      <CHOICE>Not Started</CHOICE>
      <CHOICE>Audition Scheduled</CHOICE>
      <CHOICE>Auditioned</CHOICE>
      <CHOICE>Role Offered</CHOICE>
      <CHOICE>Committed to Role</CHOICE>
  </CHOICES>
  <MAPPINGS>
      <MAPPING Value="1">Not Started</MAPPING>
      <MAPPING Value="2">Audition Scheduled</MAPPING>
      <MAPPING Value="3">Auditioned</MAPPING>
      <MAPPING Value="4">Role Offered</MAPPING>
      <MAPPING Value="5">Committed to Role</MAPPING>
  </MAPPINGS>
<Default>Not Started</Default>

Criar o tipo de conteúdo personalizado

  1. No Gerenciador de Soluções, adicione um item Content Type do SharePoint ao projeto do suplemento do SharePoint com o nome ActingRole. Quando solicitado pelo assistente para selecionar o tipo de conteúdo base, selecione Item e Concluir.

  2. Se o designer de tipo de conteúdo não abrir automaticamente, selecione o tipo de conteúdo ActingRole no Gerenciador de Soluções para abri-lo.

  3. Abra a guia Tipo de Conteúdo no designer e preencha as caixas de texto da seguinte maneira:

    • Nome do tipo de conteúdo: ActingRole

    • Descrição: representa uma função em uma peça ou filme.

    • Nome do grupo: Theater and Movies

  4. Verifique se nenhuma das caixas de seleção na guia estão selecionadas. A caixa de seleção Herda as colunas do Tipo de Conteúdo pai pode estar marcada por padrão. Não deixe de desmarcá-la.

  5. Abra a guia Colunas no designer.

  6. Use a grade para adicionar duas colunas de site ao tipo de conteúdo. Elas estão listadas na lista suspensa pelos nomes de exibição: Actor/Actress e Casting Status. (Se eles não estiverem listados, talvez você não tenha salvo o projeto desde a adição das colunas de site personalizadas. Selecione Salvar tudo).

  7. Salve o arquivo e feche o designer.

  8. A próxima etapa requer que você trabalhe diretamente no XML bruto para o tipo de conteúdo. Portanto, no Gerenciador de Soluções, escolha o filho do arquivo elements.xml do tipo de conteúdo ActingRole.

  9. Já há elementos FieldRef no arquivo para as duas colunas que você adicionou. Adicione elementos FieldRef para duas colunas internas do SharePoint como pares das duas que já estão lá. A seguir apresentamos a marcação para os elementos. Você deve usar os mesmos GUIDs para o atributo ID, pois eles são os tipos de campo interno que têm IDs fixos. Adicione-os acima dos dois elementos FieldRef para as colunas do site personalizado.

  <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />

Observe que esses campos receberam o nome de exibição personalizado Character, no sentido de um personagem de um filme ou peça de teatro.

Criar o modelo de lista personalizada e uma instância de lista

  1. Adicione um item List do SharePoint ao projeto do suplemento do SharePoint com o nome CharactersInShow. Na página Escolher Configurações de Lista do Assistente de Personalização do SharePoint, deixe o nome de exibição da lista como o padrão CharactersInShow, selecione a opção Criar uma lista personalizável com base em e selecione Padrão (Em branco) na lista suspensa. Selecione Concluir.

  2. Quando concluir o assistente, o modelo de lista CharactersInShow será criado com uma instância de lista filha denominada CharactersInShowInstance. Pode ser que o designer de lista o tenha aberto por padrão. Ele será usado em uma etapa posterior.

  3. Abra o filho do elements.xml do modelo de lista CharactersInShow (não o filho do elements.xml da CharactersInShowInstance).

  4. Adicione espaços ao atributo DisplayName para torná-lo mais apropriado: Characters in Show.

  5. Defina o atributo Description como Personagens de uma peça ou filme.

  6. Deixe todos os outros atributos com as opções padrão, salve e feche o arquivo.

  7. Se o designer de lista não estiver aberto, escolha o nó CharactersInShow no Gerenciador de Soluções.

  8. Abra a guia Colunas no designer e clique no botão Tipos de conteúdo.

  9. Na caixa de diálogo Configurações de tipo de conteúdo adicione o tipo de conteúdo ActingRole.

  10. Selecione o tipo de conteúdo ActingRole na lista de tipos e selecione o botão Definir como Padrão.

  11. Selecione o tipo de conteúdo do Item, clique com o botão direito do mouse na pequena seta que aparece à esquerda do nome do tipo de conteúdo e selecione Excluir.

  12. Repita a etapa anterior com o tipo de conteúdo Pasta, para que ActingRole seja o único tipo de conteúdo listado. Selecione OK para fechar a caixa de diálogo.

  13. Agora, constarão três colunas na lista de colunas. Selecione Título, clique com o botão direito do mouse na pequena seta que aparece à esquerda do nome do tipo de conteúdo e selecione Excluir. Agora devem estar listadas apenas duas colunas, Actor/Actress e Casting Status.

  14. Abra a guia Lista do designer. Essa guia é usada para definir determinados valores para a instância de lista, não para o modelo de lista.

  15. Altere os valores dessa guia para o seguinte:

  • Título: Characters in Hamlet

  • URL da lista: Lists/CharactersInHamlet

  • Descrição: Os personagens de Hamlet e informações de elenco.

Deixe as caixas de seleção com seus status padrão, salve o arquivo e feche o designer.

  1. A instância de lista pode ter o antigo nome no Explorador de Soluções. Nesse caso, abra o menu de atalho para CharactersInShowInstance, selecione Renomear e altere o nome para CharactersInHamlet.

  2. Abra o arquivo schema.xml.

  3. Pode haver dois elementos ContentType no arquivo, um com o valor de atributo Name como ActingRole e outro chamado ListFieldsContentType. Somente aquele denominado ActingRole pertence ao arquivo, portanto exclua os outros elementos ContentType.

    Observação

    Talvez não haja quebras de linha entre os elementos ContentType, o que faz parecer que há apenas um. Role para a direita e verifique cuidadosamente se não há outros.

  4. O elemento Field deve conter dois elementos Field (que estarão em uma única linha se não houver nenhuma quebra de linha entre eles). Um deles deve duplicar exatamente o elemento Field no elements.xml da coluna de site Actor, e o outro deve duplicar exatamente o elemento Field do elements.xml. da coluna de site CastingStatus. Se não houver uma correspondência exata, incluindo de todos os elementos filho (como os elementos CHOICES e MAPPINGS) copie o elemento Field do arquivo elements.xml da coluna de site e cole-o no lugar do elemento Field sem correspondência no arquivo schema.xml.

  5. Ainda no arquivo schema.xml, no elemento View cujo valor BaseViewID é "0", substitua o elemento ViewFields existente pela marcação a seguir. (Use exatamente esse GUID para o FieldRef denominado LinkTitle).

  <ViewFields>
    <FieldRef Name="Title" ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" DisplayName="Character" />
    <FieldRef Name="Actor" ID="{GUID from the site column elements.xml}" />
    <FieldRef Name="CastingStatus" ID="{GUID from the site column elements.xml}" />
  </ViewFields>
  1. Substitua os dois valores do atributo ID ausentes pelos GUIDs nos respectivos arquivos elements.xml da coluna de site. Não se esqueça das chaves "{}".

  2. Ainda no arquivo schema.xml, no elemento View cujo valor BaseViewID é "1", substitua o elemento ViewFields existente pela marcação a seguir. (Use exatamente esse GUID para o FieldRef denominado LinkTitle).

  <ViewFields>
    <FieldRef Name="LinkTitle" ID="{82642ec8-ef9b-478f-acf9-31f7d45fbc31}" DisplayName="Character" />
  </ViewFields>
  1. Copie os dois elementos FieldRef para Actor e CastingStatus que você adicionou à exibição anterior a este elemento ViewFields como irmãos do LinkTitleFieldRef.

  2. Salve e feche o arquivo schema.xml.

  3. Abra o arquivo elements.xml que é filho da instância de lista CharactersInHamlet.

  4. Preencha a lista com alguns dados iniciais, adicionando a marcação a seguir como filho do elemento ListInstance.

    <Data>
      <Rows>
        <Row>
          <Field Name="Title">Hamlet</Field>
          <Field Name="Actor">Tom Higginbotham</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">Claudius</Field>
          <Field Name="Actor"></Field>
          <Field Name="CastingStatus">Not Started</Field>
        </Row>
        <Row>
          <Field Name="Title">Gertrude</Field>
          <Field Name="Actor">Satomi Hayakawa</Field>
          <Field Name="CastingStatus">Auditioned</Field>
        </Row>
        <Row>
          <Field Name="Title">Ophelia</Field>
          <Field Name="Actor">Cassi Hicks</Field>
          <Field Name="CastingStatus">Committed to Role</Field>
        </Row>
        <Row>
          <Field Name="Title">The ghost</Field>
          <Field Name="Actor">Lertchai Treetawatchaiwong</Field>
          <Field Name="CastingStatus">Role Offered</Field>
        </Row>
      </Rows>
    </Data>
  1. No Explorador de Soluções, selecione Recurso1 para abrir o designer de Recursos. No designer, configure o Título para Theater and Movie Data Components e defina a Descrição Como Colunas de site, tipos de colunas e instâncias de lista para dados sobre teatro e cinema. Salve o arquivo e feche o designer.

  2. Se o Recurso1 no Gerenciador de Soluções não for automaticamente renomeado, abra o menu de atalho, selecione Renomear e renomeie-o como TheaterAndMovieDataComponents.

Codificar o projeto do aplicativo Web remoto

Desenvolva o aplicativo Web como faria com qualquer outro aplicativo Web para a sua pilha de plataforma preferida. Para uma pilha Microsoft, você pode usar o serviço Web REST/OData ou um dos modelos de objeto do cliente no SharePoint. Para uma pilha que não seja Microsoft, você pode usar os pontos de extremidade REST/OData no SharePoint para executar as operações CRUD (criar/ler/atualizar/excluir) em dados na Web do suplemento.

Observação

Ao adicionar uma referência a um assembly no projeto do aplicativo Web no Visual Studio, defina a propriedade Copy Local do assembly para True, a menos que você saiba que o assembly já está instalado no servidor Web ou você possa garantir que ele será instalado antes de implantar o suplemento. O .NET Framework é instalado em funções Web do Microsoft Azure e em sites do Azure. Porém, os assemblies de cliente do SharePoint e as várias extensões de código gerenciado da Microsoft e bases não estão instalados. O Office Developer Tools para Visual Studio adiciona de forma automática as referências para alguns assemblies usados comumente nos suplementos do SharePoint e define a propriedade Copy Local.

No exemplo contínuo, você desenvolverá um aplicativo Web ASP.NET. Siga as etapas a seguir.

  1. Abra o arquivo Default.aspx e substitua o elemento body do arquivo pela marcação a seguir. A marcação adiciona um botão Get the Cast que, quando escolhido, faz a leitura da lista Characters in Hamlet que está na Web do suplemento e apresenta esses dados em um controle GridView que é exibido somente depois que o botão é pressionado.
  <body >
    <form id="form1" runat="server">
      <div>
        <h2>Local Theater</h2>
      </div>
      <asp:Literal ID="Literal1" runat="server"><br /><br /></asp:Literal>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Get the Cast"/>
      <asp:Literal ID="Literal2" runat="server"><br /><br /></asp:Literal>
      <asp:GridView ID="GridView1" runat="server" Caption="The Cast" ></asp:GridView>
    </form>
  </body>

  1. Abra o arquivo Default.aspx.cs e adicione a ele as instruções using a seguir.
  using Microsoft.SharePoint.Client;
  using Microsoft.IdentityModel.S2S.Tokens;
  using System.Net;
  using System.IO;
  using System.Xml;
  using System.Data;
  using System.Xml.Linq;
  using System.Xml.XPath;
  using Microsoft.SharePoint.Samples;

A última instrução se refere ao namespace declarado no arquivo TokenHelper.cs.


3. Adicione os campos a seguir à classe **Default**. Contexto '''csharp SharePointContextTokenToken; acesso de cadeia de caracteresToken; Uri sharepointUrl; ```
  1. Substitua o método Page_Load pelo código a seguir que usa a classe TokenHelper para obter tokens do servidor de token seguro compatíveis com OAuth. O token de acesso é, então, armazenado na propriedade CommandArgument do botão para recuperação posterior pelo manipulador de eventos de clique do botão.
    protected void Page_Load(object sender, EventArgs e)
  {
      TokenHelper.TrustAllCertificates();
      string contextTokenString = TokenHelper.GetContextTokenFromRequest(Request);

      if (contextTokenString != null)
      {
          // Get context token
          contextToken = TokenHelper.ReadAndValidateContextToken(contextTokenString, Request.Url.Authority);

          // Get access token
          sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
          accessToken = TokenHelper.GetAccessToken(contextToken, sharepointUrl.Authority).AccessToken;
          
          // Pass the access token to the button event handler.
          Button1.CommandArgument = accessToken;
      }
  }

  1. Adicione o seguinte manipulador de eventos à classe Default. O manipulador começa recuperando o token de acesso que foi armazenado na propriedade CommandArgument do botão.
    protected void Button1_Click(object sender, EventArgs e)
  {
      // Retrieve the access token that the Page_Load method stored
      // in the button's command argument.
      string accessToken = ((Button)sender).CommandArgument;
  }

  1. O manipulador precisa readquirir a URL modificada da Web do suplemento em postbacks; portanto, adicione o código a seguir.
      if (IsPostBack)
    {
        sharepointUrl = new Uri(Request.QueryString["SPAppWebUrl"]);
    }

  1. Adicione a seguinte linha que usa um dos pontos de extremidade do SharePoint REST/OData para obter os dados da lista. Neste exemplo, o código lê a lista Characters in Hamlet que está implantada na Web do suplemento. As APIs para esse serviço facilitam, em uma única linha de código, selecionar uma lista e especificar três campos da lista para retornar.

Observe que, na URL OData, deve-se usar os nomes internos dos campos (colunas) e não os nomes de exibição, sendo assim, o código usa Title, Actor e CastingStatus em vez de Character, Actor/Actress e Casting Status. Para saber mais sobre o serviço Web REST/OData, veja como Usar as operações de consulta OData em solicitações REST do SharePoint.

    // REST/OData URL section
    string oDataUrl = "/_api/Web/lists/getbytitle('Characters In Hamlet')/items?$select=Title,Actor,CastingStatus";

  1. Adicione o código a seguir que usa as classes HttpWebRequest e HttpWebResponse do namespace System.Net para construir a solicitação HTTP e os objetos de resposta.
  // HTTP Request and Response construction section
  HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + oDataUrl);
  request.Method = "GET";
  request.Accept = "application/atom+xml";
  request.ContentType = "application/atom+xml;type=entry";
  request.Headers.Add("Authorization", "Bearer " + accessToken);
  HttpWebResponse response = (HttpWebResponse)request.GetResponse();

  1. Adicione o seguinte código para analisar o XML de resposta formatado para ATOM. Ele usa as classes do System.Xml. Namespace linq para analisar os dados retornados e construir uma Lista<T> dos itens da lista do SharePoint. (Você também pode usar as classes do namespace do System.Xml).

Observe que, no XML que o SharePoint retorna, os elementos filho dos elemento entry retêm metadados sobre o item lista. Os dados reais da linha de um item de lista do SharePoint estão aninhados duas camadas para baixo no elemento properties. Por esse motivo, o método de extensão Elements<T> é usado duas vezes para filtrar os níveis mais altos.

  // Response markup parsing section
  XDocument oDataXML = XDocument.Load(response.GetResponseStream(), LoadOptions.None);
  XNamespace atom = "http://www.w3.org/2005/Atom";
  XNamespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
  XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 

  List<XElement> entries = oDataXML.Descendants(atom + "entry")
                          .Elements(atom + "content")
                          .Elements(m + "properties")
                          .ToList();

  1. Adicione a consulta LINQ a seguir para construir uma coleção T> IEnumerable< de um tipo anônimo que tenha apenas as propriedades necessárias e nenhuma outra. Observe que, embora o código deva fazer referência ao campo de título do item pelo seu nome interno Title, o nome da propriedade no tipo anônimo, ao qual o valor é atribuído, pode ser chamado de Character. Um efeito disso é que quando a coleção estiver vinculada a um controle de grade, o nome mais apropriado Character aparece na página.
  var entryFieldValues = from entry in entries
  select new { Character=entry.Element(d + "Title").Value, 
               Actor=entry.Element(d + "Actor").Value, 
               CastingStatus=entry.Element(d + "CastingStatus").Value };

  1. Conclua o manipulador com o seguinte código para associar os dados a um controle GridView na página. Os cabeçalhos de coluna na grade padrão para os nomes das propriedades do tipo anônimo: Character, Actor e CastingStatus. O controle GridView possui propriedades que permitem controlar o nome e a formatação de cabeçalhos de coluna, portanto, é possível fazer com que Actor/Actress e Casting Status corresponda aos cabeçalhos de coluna no SharePoint. Para manter a simplicidade, essas técnicas não serão descritas aqui. (Você também pode usar um controle DataGrid).
    GridView1.DataSource = entryFieldValues;
    GridView1.DataBind();

  1. Salve todos os arquivos.

Testar e depurar o suplemento do SharePoint

  1. Para testar o suplemento do SharePoint e seu aplicativo Web remoto, selecione a tecla F5 no Visual Studio. O aplicativo Web é implantado no IIS Express em localhost. Os suplementos do SharePoint estão instalados no site do SharePoint de destino. (No exemplo contínuo, os suplementos remotos não tentam interagir com o host da Web, e a entidade de segurança principal do suplemento tem automaticamente permissões para a Web do suplemento, portanto não será solicitado a você que conceda permissões). A página Conteúdo do Site do site de destino do SharePoint será aberta e você verá o novo suplemento listado nela.

  2. Ao selecionar o suplemento do SharePoint, o aplicativo Web remoto abrirá na página que você especificou no elemento StartPage no arquivo AppManifest.xml. Use o aplicativo Web conforme necessário para verificar se ele está funcionando. No exemplo que dá continuidade a este tópico, apenas selecione o botão. Isso cria uma grade e a preenche com a lista Characters in Hamlet da Web do suplemento.

Publicar o suplemento do SharePoint

Para publicar o suplemento do SharePoint, carregue o pacote do suplemento para um catálogo de suplementos corporativos ou para a loja de suplementos do Office. Para saber mais, veja como Publicar na Loja do Office ou no catálogo de suplementos da organização e como publicar suplementos do SharePoint.

Solução de problemas

Se o suplemento não estiver funcionando, verifique se há nenhum erro na marcação CAML que esteja bloqueando a implantação dos componentes do SharePoint. Aplique um procedimento semelhante ao seguinte, que se baseia no exemplo contínuo, para verificar a implantação.

Testar o provisionamento da Web do suplemento

  1. Abra a página de Configurações do Site do host da Web. Na seção Administração do Conjunto de Sites, selecione o link Hierarquia de sites.

  2. Na página Hierarquia de Sites, você verá o suplemento listado pela URL dele. Não o inicie. Em vez disso, copie a URL e use-a nas etapas restantes.

  3. Navegue até URL_do_aplicativo_web/_layouts/15/ManageFeatures.aspx e, na página Recursos do Site que se abrirá, verifique se os Theater and Movie Data Components está na lista em ordem alfabética de recursos no seu Suplemento do SharePoint e se seu o status está Ativo.

  4. Navegue até URL_do_aplicativo_web/_layouts/15/mngfield.aspx e, na página Colunas de Site que se abrirá, verifique se o grupo Theater and Movies está na lista de colunas de site e se ele contém suas novas colunas de site personalizadas, Actor/Actress e Casting Status.

  5. Navegue até URL_do_aplicativo_web/_layouts/15/mngctype.aspx e, na página Tipos de Conteúdo de Site que se abrirá, verifique se o grupo Theater and Movies está na lista de tipos de conteúdo de site e se ele contém seu novo tipo de conteúdo ActingRole.

  6. Selecione o link para o tipo de conteúdo ActingRole. Na página Tipo de Conteúdo de Site que se abrirá, verifique se o tipo de conteúdo possui os dois novos tipos de coluna de site, Actor/Actress e Casting Status, e se o campo de título do item recebeu o nome de exibição personalizado: Character.

  7. Navegue até URL_do_aplicativo_web/_layouts/15/mcontent.aspx e, na página Bibliotecas e Listas de Sites que se abrirá, verifique se há um link Personalizar "Characters in Hamlet".

  8. Selecione o link Personalizar "Characters in Hamlet" e verifique, na página de configurações da lista, se o único tipo de conteúdo da lista é o tipo personalizado ActingRole e se as duas novas colunas de site, Actor/Actress e Casting Status, estão listadas na seção Colunas. (A coluna do título pode ser exibida com o nome interno Título em vez do nome de exibição Character que você forneceu).

Observação

Se não houver nenhuma seção Tipos de conteúdo na página, você deverá habilitar o gerenciamento de tipos de conteúdo. Clique no link Configurações Avançadas e, na página Configurações Avançadas, habilite o gerenciamento de tipos de conteúdo e, em seguida, selecione OK. Você voltará à página anterior em que, agora, haverá uma lista da seção Tipos de Conteúdo.

  1. Na parte superior da página estará o Endereço Web da lista. Copie esse endereço e cole-o a barra de endereços do navegador para navegar até a lista. Verifique se a lista tem os itens do exemplo que você criou. (A coluna do título pode ser exibida com o nome interno Título em vez do nome de exibição Character que você forneceu).

Confira também