Del via


Selvstudium: Bruge Web API

I denne vejledning skal du oprette en webside og brugerdefineret webskabelon, der bruger web-API'en til at læse, skrive, opdatere og slette poster i kontakttabellen.

Bemærk

Du kan ændre kolonnenavnene eller bruge en anden tabel, mens du følger trinnene i dette eksempel.

Trin 1. Oprette indstillinger for websted

Før du kan bruge web-API'en til portaler, skal du aktivere de nødvendige indstillinger for websted med appen Portaladministration. Indstillingerne for webstedet afhænger af den tabel, du vil bruge, når du kommunikerer med web-API'en.

  1. Start Portaladministration-appen.

  2. Vælg Indstillinger for websted i venstre rude i appen Portaladministration.

    Åbn webstedsindstillinger i appen Portaladministration.

  3. Vælg Ny.

  4. I feltet Navn skal du angive Webapi/contact/enabled.

  5. Vælg din webstedspost på listen Websted.

  6. Skriv true i feltet Værdi.

    Aktivér kontakttabellen for indstillingen for WebAPI-websted.

  7. Vælg Gem og luk.

  8. Vælg Ny.

  9. I feltet Navn skal du angive Webapi/contact/fields.

  10. Vælg din webstedspost på listen Websted.

  11. I feltet Værdi skal du skrive
    firstname,lastname,fullname,emailaddress1,telephone1

    Aktivér kontakttabellen for indstillingen for WebAPI-websted.

  12. Vælg Gem og luk.

  13. Vælg Ny.

  14. I feltet Navn skal du angive Webapi/error/innererror.

    Aktivér indstillingen for det interne fejlwebsted i Web API.

  15. Vælg din webstedspost på listen Websted.

  16. Skriv true i feltet Værdi.

  17. Vælg Gem og luk.

  18. Kontrollér indstillingerne for websted for web-API.

Trin 2. konfiguration af tilladelser

Du skal konfigurere tilladelser, så brugere kan bruge web-API-funktionen. I dette eksempel skal du aktivere tabellen Kontaktperson for tabeltilladelser, oprette en webrolle ved hjælp af web-API'en, føje tabeltilladelserne for tabellen Kontaktperson til denne webrolle og derefter føje webrollen til brugere, så de kan bruge web-API'en.

Bemærk

Web-API'en følger tabeltilladelser, der kommer fra webrollekonteksten for den godkendte bruger eller den anonyme webrolle. Overvej, om dine brugere allerede har en webrolle, der har adgang til de specifikke tabeller på dit websted, som web-API'en skal bruge. Du behøver ikke at oprette flere webroller kun for at bruge web-API'en.

Oprette en webrolle

Hvis du i øjeblikket ikke har en webrolle med tilladelser til den tabel, du skal have adgang til via web-API'en, eller kræver en anden kontekst for adgang til dataene, skal du følge nedenstående trin, så du kan oprette en ny webrolle og tildele tabeltilladelser.

  1. Start Portaladministration-appen.

  2. Vælg Sikkerhed i ruden til venstre, og vælg derefter Webroller.

  3. Vælg Ny.

  4. I feltet Navn skal du angive Web API-bruger (eller et hvilket som helst navn, der bedst afspejler rollen for den bruger, der får adgang til denne funktion).

  5. Vælg din webstedspost på listen Websted.

    Tilføj web-API-brugerwebrolle.

  6. Vælg Gem.

Oprette tabeltilladelser

  1. Starte Power Pages design studio.

  2. Vælg arbejdsområdet Sikkerhed.

  3. Vælg Tabeltilladelser i sektionen Beskyt.

  4. Vælg Ny tilladelse.

  5. Skriv Tilladelse til tabellen Kontaktperson i feltet Navn.

  6. Vælg Kontaktperson (kontaktperson) på listen Tabelnavn.

  7. Vælg Global på listen Adgangstype.

  8. Vælg rettighederne Læs, Opret, Skriv og Slet.

  9. Vælg + Tilføj roller, og vælg den webrolle, du har valgt eller oprettet tidligere.

  10. Vælg Gem og luk.

    Kontakt tabeltilladelser.

Føje kontakter til webrollen

  1. Start Portaladministration-appen.

  2. Vælg Sikkerhed i ruden til venstre, og vælg derefter Kontakter.

  3. Vælg en kontakt, du vil bruge i dette eksempel til web-API'en.

    Bemærk

    Denne kontakt er den brugerkonto, der bruges i dette eksempel til test af web-API'en. Sørg for at vælge den rette kontakt på din portal.

  4. Vælg Relaterede>Webroller.

    Vælger relaterede webroller.

  5. Vælg Tilføj eksisterende webrolle.

  6. Vælg rollen Bruger af web-API, der blev oprettet tidligere.

  7. Vælg Tilføj.

    Visning af tilknyttet webrolle.

  8. Vælg Gem og luk.

Trin 3. Oprette en webside

Nu, hvor du har aktiveret web-API'en og konfigureret brugertilladelser, skal du oprette en webside med eksempelkode for at få vist, redigere, oprette og slette poster.

  1. Starte Power Pages design studio.

  2. Vælg + Side i arbejdsområdet Sider.

  3. I dialogboksen Tilføj en side

  4. Vælg Start i tomt layout i feltet Navn, og vælg WebAPI.

  5. Vælg Tilføj.

  6. Vælg indstillingen Rediger kode i øverste højre hjørne.

  7. Vælg Åbn Visual Studio Code.

  8. Kopiér følgende kodestykke, og indsæt det mellem <div></div>-koderne i sideafsnittet.

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

    Indsæt kode.

  9. Vælg CTRL-S for at gemme koden.

  10. Vælg Synkroniser i design studio for at opdatere og få vist ændringerne.

Trin 4. Brug af web-API'en til at læse, få vist, redigere, oprette og slette

Sådan tester du Web-API-funktionen:

  1. Vælg Skrivebord, og vælg derefter Forhåndsversion.

  2. Log på dit websted ved hjælp af den brugerkonto, der er tildelt rollen Web-API-bruger, du har oprettet tidligere.

  3. Gå til websiden WebApi, der er oprettet tidligere.

    Eksempel på webside med Web-API.

  4. Vælg Tilføj eksempelpost for at tilføje eksempelposten fra scriptet.

  5. Vælg et felt. I dette eksempel har vi valgt Mail for at ændre kontaktpersonens mailadresse.

    Rediger e-mail

  6. Vælg Slet for at slette posten.

Nu, hvor du har oprettet en webside med et eksempel på, hvordan du læser, redigerer, opretter og sletter poster, kan du tilpasse formularerne og layoutet.

Næste trin

Sammensætte HTTP-anmodninger, og håndtere fejl

Se også