Sdílet prostřednictvím


Návod: Použití webového rozhraní API portálu

V tomto průvodci vytvoříte webovou stránku a vlastní webovou šablonu, která bude používat webové rozhraní API ke čtení, zápisu, aktualizaci a odstraňování záznamů z tabulky kontaktů.

Poznámka:

Podle kroků v tomto příkladu můžete změnit názvy sloupců nebo použít jinou tabulku.

Krok 1. Vytvořit nastavení webu

Než budete moci použít webové rozhraní API portálů, musíte povolit požadovaná nastavení webu pomocí aplikace Správa portálu. Nastavení webu závisí na tabulce, kterou chcete použít při interakci s webovým rozhraním API.

  1. Spusťte aplikaci Správa portálu.

  2. V levém podokně aplikace Správa portálu vyberte Nastavení webu.

    Otevření nastavení webu v aplikaci Správa portálu.

  3. Vyberte Nové.

  4. Do pole Název zadejte Webapi/contact/enabled.

  5. V seznamu Web vyberte záznam svého webu.

  6. Do pole Hodnota zadejte true.

    Povolení tabulky kontaktů pro webové rozhraní API v nastavení webu.

  7. Zvolte Uložit a zavřít.

  8. Vyberte Nové.

  9. Do pole Název zadejte Webapi/contact/fields.

  10. V seznamu Web vyberte záznam svého webu.

  11. Do pole Hodnota zadejte
    firstname,lastname,fullname,emailaddress1,telephone1

    Povolení polí tabulky kontaktů webového rozhraní API v nastavení webu.

  12. Zvolte Uložit a zavřít.

  13. Vyberte Nové.

  14. Do pole Název zadejte Webapi/error/innererror.

    Povolení vnitřní chyby webového rozhraní API v nastavení webu.

  15. V seznamu Web vyberte záznam svého webu.

  16. Do pole Hodnota zadejte true.

  17. Zvolte Uložit a zavřít.

  18. Ověřte nastavení webu pro webové rozhraní API.

Krok 2. Konfigurace oprávnění

Budete muset nakonfigurovat oprávnění, aby uživatelé mohli používat funkci webového rozhraní API. V tomto příkladu budete muset nastavit nebo vytvořit novou webovou roli, která použije webové rozhraní API, dále přidáte oprávnění k tabulce Kontakt a přidružíte jej k této webové roli, a nakonec tuto webovou roli přiřadíte uživatelům, abyste jim umožnili používat webové rozhraní API.

Poznámka:

Webové rozhraní API se řídí oprávněními k tabulce pocházejícími z kontextu webové role ověřeného uživatele nebo anonymní webové role. Zvažte, zda vaši uživatelé již mají webovou roli, která má přístup ke konkrétním tabulkám na vašem webu, které potřebuje webové rozhraní API. Chcete-li používat webové rozhraní API, nemusíte vytvářet další webové role.

Vytvoření webové role

Pokud aktuálně nemáte webovou roli s oprávněními k tabulce, ke které přistupujete prostřednictvím webového rozhraní API, nebo požadujete jiný kontext přístupu k datům, pomocí následujících kroků zjistíte, jak vytvořit novou webovou roli a přiřadit oprávnění k tabulce.

  1. Spusťte aplikaci Správa portálu.

  2. V levém podokně v části Zabezpečení vyberte Webové role.

  3. Vyberte Nový.

  4. V poli Jméno zadejte Uživatel webového rozhraní API (nebo jakékoli jméno, které nejlépe odráží roli uživatele přistupujícího k této funkci).

  5. V seznamu Web vyberte záznam svého webu.

    Přidání webové role uživatele webového rozhraní API.

  6. Zvolte Uložit.

Vytvoření oprávnění pro tabulku

  1. Spusťte návrhové studio Power Pages.

  2. Vyberte pracovní prostor Nastavení.

  3. V sekci Zabezpečení vyberte Oprávnění k tabulce.

  4. Vyberte Nové oprávnění.

  5. V poli Název zadejte Oprávnění k tabulce Kontakt.

  6. V seznamu Název tabulky vyberte Kontakt (kontakt).

  7. V seznamu Typ přístupu vyberte položku Globální.

  8. Vyberte oprávnění Čtení, Zápis, Vytvoření a Odstranění.

  9. Vyberte + Přidat role a vyberte webovou roli, kterou jste vybrali nebo vytvořili dříve.

  10. Zvolte Uložit a zavřít.

    Oprávnění k tabulce Kontakt.

Přidání kontaktů do webové role

  1. Spusťte aplikaci Správa portálu.

  2. V levém podokně v části Zabezpečení vyberte Kontakty.

  3. Vyberte kontakt, který chcete v tomto příkladu pro webové rozhraní API použít.

    Poznámka:

    Tento kontakt je uživatelský účet použitý v tomto příkladu pro testování webového rozhraní API. Nezapomeňte na svém portálu vybrat správný kontakt.

  4. Vyberte Související>Webové role.

    Výběr souvisejících webových rolí.

  5. Vyberte Přidat existující webovou roli.

  6. Vyberte roli Uživatel webového rozhraní API vytvořenou dříve.

  7. Vyberte Přidat.

    Přidružené zobrazení webové role.

  8. Zvolte Uložit a zavřít.

Krok 3. Vytvořte webovou stránku

Nyní, když jste povolili webové rozhraní API a nakonfigurovali uživatelská oprávnění, vytvořte webovou stránku s ukázkovým kódem pro prohlížení, úpravy, vytváření a mazání záznamů.

  1. Spusťte návrhové studio Power Pages.

  2. V pracovním prostoru Stránky vyberte + Stránka.

  3. V dialogovém okně Přidat stránku:

  4. V poli Název zadejte Webové rozhraní API a potom vyberte rozložení Začít od začátku.

  5. Vyberte Přidat.

  6. V pravém horním rohu vyberte možnost Upravit kód.

  7. Vyberte Otevřít Visual Studio Code.

  8. Zkopírujte následující ukázkový fragment kódu a vložte jej mezi značky <div></div> v sekci stránky.

        <!-- 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>
    

    Vložení kódu.

  9. Kód uložíte kombinací kláves CTRL-S.

  10. V návrhovém studiu volbou Synchronizovat přidáte úpravy kódu na web.

Krok 4. Čtení, zobrazování, úpravy, vytváření a odstraňování obsahu pomocí webového rozhraní API

Testování funkčnosti webového rozhraní API:

  1. Vyberte Náhled a pak vyberte Desktop.

  2. Přihlaste se ke svému webu pomocí uživatelského účtu, kterému byla přiřazena role Uživatel webového rozhraní API, kterou jste vytvořili dříve.

  3. Přejděte na webovou stránku WebAPI vytvořenou dříve.

    Ukázková webová stránka webapi.

  4. Volbou Přidat ukázkový záznam přidejte ukázkový záznam ze skriptu.

  5. Vyberte pole. V tomto příkladu jsme vybrali E-mail, abychom změnili e-mailovou adresu kontaktu.

    Upravit e-mail

  6. Výběrem ikony Odstranit odstraníte záznam.

Nyní, když jste vytvořili webovou stránku s ukázkou pro čtení, úpravy, vytváření a odstraňování záznamů, můžete přizpůsobit formuláře a rozložení.

Další krok

Sestavování požadavků HTTP a ošetření chyb

Viz také