Compartilhar via


Como usar a API Web do portal

Neste guia, você configurará uma página da Web e um modelo personalizado da Web que usará a API Web para ler, gravar, atualizar e excluir registros da tabela de contatos.

Observação

Você pode alterar os nomes das colunas ou usar uma tabela diferente enquanto segue as etapas neste exemplo.

Etapa 1. Criar configurações do site

Antes de usar a API Web de portais, você deve habilitar as configurações de site necessárias com o aplicativo Gerenciamento do Portal. As configurações do site dependem da tabela que deseja usar ao interagir com a API Web.

  1. Abra o aplicativo Gerenciamento do Portal.

  2. No painel esquerdo do aplicativo Gerenciamento do Portal, selecione Configurações do Site.

    Abra configurações de site no aplicativo de Gerenciamento de Portal.

  3. Selecione Nova.

  4. Na caixa Nome, digite Webapi/contact/enabled.

  5. Na lista Site, selecione o registro do site.

  6. Na caixa Valor, digite true.

    Habilite a tabela de contatos para a configuração do site de API Web.

  7. Selecione Salvar e Fechar.

  8. Selecione Nova.

  9. Na caixa Nome, digite Webapi/contact/fields.

  10. Na lista Site, selecione o registro do site.

  11. Na caixa Valor, digite
    firstname,lastname,fullname,emailaddress1,telephone1

    Habilite a configuração de site de campos da tabela de contatos de API Web.

  12. Selecione Salvar e Fechar.

  13. Selecione Nova.

  14. Na caixa Nome, digite Webapi/error/innererror.

    Habilite a configuração do site de erro interno da API Web.

  15. Na lista Site, selecione o registro do site.

  16. Na caixa Valor, digite true.

  17. Selecione Salvar e Fechar.

  18. Verifique as configurações do site para a API Web.

Etapa 2. Configurar permissões

Será preciso configurar permissões para que os usuários possam usar o recurso API Web. Neste exemplo, você precisará configurar ou criar uma nova função Web que usará a API Web, adicionará as permissões de tabela para a tabela Contato, associará a permissão de tabela à função Web e, finalmente, atribuirá a função Web a usuários para permitir que usem a API Web.

Observação

A API da Web segue permissões de tabela provenientes do contexto da função Web do usuário autenticado ou da função Web anônima. Considere se seus usuários já têm uma função Web que tenha acesso às tabelas específicas em seu site necessárias para a API Web. Você não precisa criar funções Web adicionais apenas para usar a API Web.

Criar uma função Web

Se você atualmente não tem uma função Web com permissões para a tabela que está acessando por meio da API da Web ou precisa de um contexto diferente para acessar os dados, as etapas a seguir mostram como criar uma nova função Web e atribuir permissões à tabela.

  1. Abra o aplicativo Gerenciamento do Portal.

  2. No painel esquerdo, na seção Segurança, selecione Funções Web.

  3. Selecione Novo.

  4. Na caixa Nome, digite Usuário da API Web (ou qualquer nome que melhor reflita a função do usuário que acessa esta funcionalidade).

  5. Na lista Site, selecione o registro do site.

    Adicionar função Web do Usuário da API Web.

  6. Selecione Salvar.

Criar permissões de tabela

  1. Inicie o estúdio de design do Power Pages.

  2. Selecione o espaço de trabalho Segurança.

  3. Na seção Proteger, selecione Permissões de tabela.

  4. Selecione Nova permissão.

  5. Na caixa Nome, insira Permissão da Tabela de Contatos.

  6. Na lista Nome da Tabela, selecione Contato (contato).

  7. Na lista Tipo de Acesso, selecione Global.

  8. Selecione os privilégios Ler, Gravar, Criar e Excluir.

  9. Selecione + Adicionar funções e selecione a função da web que você selecionou ou criou anteriormente.

  10. Selecione Salvar e Fechar.

    Permissões da tabela de contato.

Adicione contatos à função Web

  1. Abra o aplicativo Gerenciamento do Portal.

  2. No painel esquerdo, na seção Segurança, selecione Contatos.

  3. Selecione uma conta que você queira usar neste exemplo para a API Web.

    Observação

    Esse contato é a conta de usuário usada neste exemplo para testar a API Web. Selecione o contato correto em seu portal.

  4. Selecione Relacionado>Funções da Web.

    Selecionar funções Web relacionadas.

  5. Selecione Adicionar uma Função da Web Existente.

  6. Selecione a função Usuário da API Web, criada anteriormente.

  7. Selecione Adicionar.

    Exibição associada à função Web.

  8. Selecione Salvar e Fechar.

Etapa 3. Criar uma página da Web

Agora que você habilitou a API Web e configurou as permissões do usuário, crie uma página da Web com código de exemplo para visualizar, editar, criar e excluir registros.

  1. Inicie o estúdio de design do Power Pages.

  2. No espaço de trabalho Páginas, selecione + Página.

  3. Na caixa de diálogo Adicionar uma página,

  4. Na caixa Nome, insira API Web e selecione Iniciar em branco.

  5. Selecione Adicionar.

  6. Selecione a opção Editar Código no canto superior direito.

  7. Selecione Abrir Visual Studio Code.

  8. Copie o trecho de código de amostra a seguir e cole-o entre as tags <div></div> da seção da página.

        <!-- Sample code for Web API demonstration -->
    <style>
        #processingMsg {
            width: 150px;
            text-align: center;
            padding: 6px 10px;
            z-index: 9999;
            top: 0;
            left: 40%;
            position: fixed;
            -webkit-border-radius: 0 0 2px 2px;
            border-radius: 0 0 2px 2px;
            -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
            display: none;
        }
    
        table td[data-attribute] .glyphicon-pencil {
            margin-left: 5px;
            opacity: 0;
        }
    
        table td[data-attribute]:hover .glyphicon-pencil {
            opacity: 0.7;
        }
    </style>
    
    <script>
      $(function() {
        //Web API ajax wrapper
        (function(webapi, $) {
          function safeAjax(ajaxOptions) {
            var deferredAjax = $.Deferred();
            shell.getTokenDeferred().done(function(token) {
              // Add headers for ajax
              if (!ajaxOptions.headers) {
                $.extend(ajaxOptions, {
                  headers: {
                    "__RequestVerificationToken": token
                  }
                });
              } else {
                ajaxOptions.headers["__RequestVerificationToken"] = token;
              }
              $.ajax(ajaxOptions)
                .done(function(data, textStatus, jqXHR) {
                  validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
                }).fail(deferredAjax.reject); //ajax
            }).fail(function() {
              deferredAjax.rejectWith(this, arguments); // On token failure pass the token ajax and args
            });
            return deferredAjax.promise();
          }
          webapi.safeAjax = safeAjax;
        })(window.webapi = window.webapi || {}, jQuery)
        // Notification component
        var notificationMsg = (function() {
          var $processingMsgEl = $('#processingMsg'),
            _msg = 'Processing...',
            _stack = 0,
            _endTimeout;
          return {
            show: function(msg) {
              $processingMsgEl.text(msg || _msg);
              if (_stack === 0) {
                clearTimeout(_endTimeout);
                $processingMsgEl.show();
              }
              _stack++;
            },
            hide: function() {
              _stack--;
              if (_stack <= 0) {
                _stack = 0;
                clearTimeout(_endTimeout);
                _endTimeout = setTimeout(function() {
                  $processingMsgEl.hide();
                }, 500);
              }
            }
          }
        })();
        // Inline editable table component
        var webAPIExampleTable = (function() {
          var trTpl = '<% _.forEach(data, function(data){ %>' +
            '<tr data-id="<%=data.id%>" data-name="<%=data.fullname%>">' +
            '<% _.forEach(columns, function(col){ %>' +
            '<td data-attribute="<%=col.name%>" data-label="<%=col.label%>" data-value="<%=data[col.name]%>">' +
            '<%-data[col.name]%><i class="glyphicon glyphicon-pencil"></i>' +
            '</td>' +
            '<% }) %>' +
            '<td>' +
            '<button class="btn btn-default delete" type="submit"><i class="glyphicon glyphicon-trash" aria-hidden="true"></i></button>' +
            '</td>' +
            '</tr>' +
            '<% }) %>';
          var tableTpl = '<table class="table table-hover">' +
            '<thead>' +
            '<tr>' +
            '<% _.forEach(columns, function(col){ %>' +
            '<th><%=col.label%></th>' +
            '<% }) %>' +
            '<th>' +
            '<button class="btn btn-default add" type="submit">' +
            '<i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add Sample Record' +
            '</button>' +
            '</th>' +
            '</tr>' +
            '</thead>' +
            '<tbody>' + trTpl + '</tbody>' +
            '</table>';
          function getDataObject(rowEl) {
            var $rowEl = $(rowEl),
              attrObj = {
                id: $rowEl.attr('data-id'),
                name: $rowEl.attr('data-name')
              };
            $rowEl.find('td').each(function(i, el) {
              var $el = $(el),
                key = $el.attr('data-attribute');
              if (key) {
                attrObj[key] = $el.attr('data-value');
              }
            })
            return attrObj;
          }
          function bindRowEvents(tr, config) {
            var $row = $(tr),
              $deleteButton = $row.find('button.delete'),
              dataObj = getDataObject($row);
            $.each(config.columns, function(i, col) {
              var $el = $row.find('td[data-attribute="' + col.name + '"]');
              $el.on('click', $.proxy(col.handler, $el, col, dataObj));
            });
            //User can delete record using this button
            $deleteButton.on('click', $.proxy(config.deleteHandler, $row, dataObj));
          }
          function bindTableEvents($table, config) {
            $table.find('tbody tr').each(function(i, tr) {
              bindRowEvents(tr, config);
            });
            $table.find('thead button.add').on('click', $.proxy(config.addHandler, $table));
          }
          return function(config) {
            var me = this,
              columns = config.columns,
              addHandler = config.addHandler,
              deleteHandler = config.deleteHandler,
              $table;
            me.render = function(el) {
              $table = $(el).html(_.template(tableTpl)({
                columns: columns,
                data: me.data
              })).find('table');
              bindTableEvents($table, {
                columns: columns,
                addHandler: addHandler,
                deleteHandler: deleteHandler
              });
            }
            me.addRecord = function(record) {
              $table.find('tbody tr:first').before(_.template(trTpl)({
                columns: columns,
                data: [record]
              }));
              bindRowEvents($table.find('tbody tr:first'), config);
            }
            me.updateRecord = function(attributeName, newValue, record) {
              $table.find('tr[data-id="' + record.id + '"] td[data-attribute="' + attributeName + '"]').text(newValue);
            }
            me.removeRecord = function(record) {
              $table.find('tr[data-id="' + record.id + '"]').fadeTo("slow", 0.7, function() {
                $(this).remove();
              });
            }
          };
        })();
        //Applicaton ajax wrapper 
        function appAjax(processingMsg, ajaxOptions) {
          notificationMsg.show(processingMsg);
          return webapi.safeAjax(ajaxOptions)
            .fail(function(response) {
              if (response.responseJSON) {
                alert("Error: " + response.responseJSON.error.message)
              } else {
                alert("Error: Web API is not available... ")
              }
            }).always(notificationMsg.hide);
        }
        function loadRecords() {
          return appAjax('Loading...', {
            type: "GET",
            url: "/_api/contacts?$select=fullname,firstname,lastname,emailaddress1,telephone1",
            contentType: "application/json"
          });
        }
        function addSampleRecord() {
          //Sample data to create a record - change as appropriate
          var recordObj = {
            firstname: "Willie",
            lastname: "Huff" + _.random(100, 999),
            emailaddress1: "Willie.Huff@contoso.com",
            telephone1: "555-123-4567"
          };
          appAjax('Adding...', {
            type: "POST",
            url: "/_api/contacts",
            contentType: "application/json",
            data: JSON.stringify(recordObj),
            success: function(res, status, xhr) {
              recordObj.id = xhr.getResponseHeader("entityid");
              recordObj.fullname = recordObj.firstname + " " + recordObj.lastname;
              table.addRecord(recordObj);
            }
          });
          return false;
        }
        function deleteRecord(recordObj) {
          var response = confirm("Are you sure, you want to delete \"" + recordObj.name + "\" ?");
          if (response == true) {
            appAjax('Deleting...', {
              type: "DELETE",
              url: "/_api/contacts(" + recordObj.id + ")",
              contentType: "application/json",
              success: function(res) {
                table.removeRecord(recordObj);
              }
            });
          }
          return false;
        }
        function updateRecordAttribute(col, recordObj) {
          var attributeName = col.name,
            value = recordObj[attributeName],
            newValue = prompt("Please enter \"" + col.label + "\"", value);
          if (newValue != null && newValue !== value) {
            appAjax('Updating...', {
              type: "PUT",
              url: "/_api/contacts(" + recordObj.id + ")/" + attributeName,
              contentType: "application/json",
              data: JSON.stringify({
                "value": newValue
              }),
              success: function(res) {
                table.updateRecord(attributeName, newValue, recordObj);
              }
            });
          }
          return false;
        }
        var table = new webAPIExampleTable({
          columns: [{
            name: 'firstname',
            label: 'First Name',
            handler: updateRecordAttribute
          }, {
            name: 'lastname',
            label: 'Last Name',
            handler: updateRecordAttribute
          }, {
            name: 'emailaddress1',
            label: 'Email',
            handler: updateRecordAttribute
          }, {
            name: 'telephone1',
            label: 'Telephone',
            handler: updateRecordAttribute
          }],
          data: [],
          addHandler: addSampleRecord,
          deleteHandler: deleteRecord
        });
        loadRecords().done(function(data) {
          table.data = _.map(data.value, function(record){
            record.id = record.contactid;
            return record;
          });
          table.render($('#dataTable'));
        });
      });
    </script>
    <div id="processingMsg" class="alert alert-warning" role="alert"></div>
    <div id="dataTable"></div>
    

    Cole o código.

  9. Selecione CTRL-S para salvar o código.

  10. No estúdio de design, selecione Sincronizar para atualizar o site com as edições de código.

Etapa 4. Use a API da Web para ler, exibir, editar, criar e excluir

Para testar a funcionalidade da API Web:

  1. Selecione Versão preliminar e, depois, escolha Desktop.

  2. Entre em seu site com a conta de usuário que foi atribuída à função API Web que você criou anteriormente.

  3. Vá para a página da Web WebApi criada anteriormente.

    Amostra da página da Web webapi.

  4. Selecione Adicionar Registro de Exemplo para adicionar o registro de exemplo do script.

  5. Selecione um campo. Neste exemplo, selecionamos Email para alterar o email de um contato.

    Editar o email

  6. Selecione o ícone Excluir para excluir um registro.

Agora que você criou uma página da Web com uma amostra para ler, editar, criar e excluir registros, pode personalizar os formulários e o layout.

Próxima etapa

Compor solicitações HTTP e tratar erros

Confira também