Deli z drugimi prek


Vadnica: uporaba spletnega API-ja portalov

Opomba

Od 12. oktobra 2022 najprej je portal Power Apps Power Pages. Več informacij: Microsoft Power Pages je zdaj splošno dostopen (spletni dnevnik)
Dokumentacijo portalov Power Apps bomo kmalu preselili in združili z dokumentacijo za Power Pages.

V tej vadnici boste nastavili spletno stran in spletno predlogo po meri, ki uporabljalata spletni API za branje, pisanje, posodabljanje in brisanje zapisov iz tabele stikov.

Opomba

Spremenite lahko imena stolpcev ali uporabite drugo tabelo, če upoštevate navodila v tem primeru.

1. korak: Ustvarjanje nastavitev mesta

Preden lahko uporabite spletni API portalov, morate z aplikacijo za upravljanje portala Portal Management omogočiti zahtevane nastavitve spletnega mesta. Nastavitve spletnega mesta so odvisne od tabele, ki jo želite uporabiti pri interakciji s spletnim API-jem.

  1. Pojdi do Power Apps.

  2. V levem podoknu izberite Aplikacije.

  3. Izberite aplikacijo Upravljanje portala .

    Zagon aplikacije za upravljanje portala.

  4. V levem podoknu aplikacije Upravljanje portala izberite Nastavitve mesta.

    Odprite nastavitve mesta v aplikaciji Upravljanje portala

  5. Izberite Novo.

  6. V polje Ime vnesite Webapi/contact/enabled.

  7. Na seznamu Spletno mesto izberite zapis svojega spletnega mesta.

  8. V polje Vrednost vnesite true.

    Omogoči tabelo stikov za nastavitev mesta WebAPI.

  9. Izberite Shrani & Zapri.

  10. Izberite Novo.

  11. V polje Ime vnesite Webapi/contact/fields.

  12. Na seznamu Spletno mesto izberite zapis svojega spletnega mesta.

  13. V polje Vrednost vnesite
    firstname,lastname,fullname,emailaddress1,telephone1

    Omogoči polja tabele stikov za nastavitev mesta spletnega API-ja.

  14. Izberite Shrani & Zapri.

  15. Izberite Novo.

  16. V polje Ime vnesite Webapi/error/innererror.

    Omogoči nastavitev mesta z notranjo napako spletnega API-ja.

  17. Na seznamu Spletno mesto izberite zapis svojega spletnega mesta.

  18. V polje Vrednost vnesite true.

  19. Izberite Shrani & Zapri.

  20. Preverite nastavitve mesta za Web API.

2. korak. Konfiguriranje dovoljenj

Dovoljenja boste morali konfigurirati tako, da bodo uporabniki lahko uporabljali funkcijo spletnega API-ja. V tem primeru boste omogočili tabelo Stiki za dovoljenja za tabele, ustvarili spletno vlogo za uporabo spletnega API-ja, tej spletni vlogi dodali dovoljenja za tabelo Stiki in nato spletno vlogo dodali uporabnikom, da jim omogočite uporabo spletnega API-ja.

  1. V levem podoknu aplikacije Upravljanje portala izberite Dovoljenja tabele.

  2. Izberite Novo.

  3. V polje Ime vnesite Dovoljenje tabele stikov.

  4. Na seznamu Ime tabele izberite Stik (stik).

  5. Na seznamu Spletno mesto izberite zapis svojega spletnega mesta.

  6. Na seznamu Vrsta dostopa izberite Globalno.

  7. Izberite pravice Beri, Piši, Ustvari in Izbriši.

  8. Izberite Shrani & Zapri.

    Dovoljenja za tabelo stikov.

Ustvarjanje spletne vloge

Na svojem spletnem mestu lahko uporabite obstoječo spletno vlogo ali ustvarite novo spletno vlogo.

  1. V levem podoknu izberite Spletne vloge .

  2. Izberite Novo.

  3. V polje Ime vnesite Uporabnik spletnega API-ja (ali katero koli ime, ki najbolje odraža vlogo uporabnika, ki dostopa ta funkcija).

  4. Na seznamu Spletno mesto izberite zapis svojega spletnega mesta.

    Dodajanje spletne vloge uporabniku spletnega API-ja

  5. Izberite Shrani.

Dodajanje dovoljenj za povezano tabelo

  1. Z novo ali obstoječo spletno vlogo izberite Sorodna > dovoljenja tabele.

    Dodajanje dovoljenja za povezano tabelo v spletno vlogo.

  2. Izberite Dodaj dovoljenje za obstoječo tabelo.

  3. Izberite Dovoljenje za tabelo stikov, ustvarjeno prej.

    Izbira dovoljenja za tabelo stikov.

  4. Izberite Dodaj.

  5. Izberite Shrani & Zapri.

    Prikaz dovoljenj za tabele.

  1. V levem podoknu izberite  Stiki.

  2. Izberite stik, ki ga želite uporabiti v tem primeru za spletni API.

    Opomba

    Ta stik je uporabniški račun, uporabljen v tem primeru za testiranje spletnega API-ja. Prepričajte se, da ste v svojem portalu izbrali pravi stik.

  3. Izberite Sorodne > Spletne vloge.

    Izbira povezanih spletnih vlog.

  4. Izberite Dodaj obstoječo spletno vlogo.

  5. Izberite uporabnika spletnega API-ja vlogo, ki je bila ustvarjena prej.

  6. Izberite Dodaj.

    Povezani pogled spletnih vlog.

  7. Izberite Shrani & Zapri.

3. korak. Ustvarjanje spletne strani

Zdaj, ko ste omogočili spletni API in konfigurirali uporabniška dovoljenja, ustvarite spletno stran z vzorčno kodo za ogled, urejanje, ustvarjanje in brisanje zapisov.

  1. V levem podoknu aplikacije Upravljanje portala izberite Spletne strani.

  2. Izberite Novo.

  3. V polje Ime vnesite webapi.

  4. Na seznamu Spletna stran izberite svoj zapis spletnega mesta.

  5. Za Nadrejeno stran izberite Začetna stran.

  6. Za Delni URL vnesite webapi.

  7. Za Predlogo strani izberite Začetna stran.

  8. Za Stanje objave izberite Objavljeno.

  9. Izberite Shrani.

    Spletna stran.

  10. Izberite Sorodno > Spletne vloge.

    Sorodne spletne strani

  11. V razdelku Povezani pogled za spletne strani izberite webapi.

    Povezani pogled za spletne strani.

  12. Pomaknite se navzdol do razdelka Vsebina in nato pojdite na možnost Kopiraj (HTML) (Oblikovalnik HTML).

    Kopiranje vsebine HTML

  13. Izberite zavihek HTML.

    Izberite zavihek HTML

  14. Spodnji izrezek kode prekopirajte in ga prilepite v oblikovalnik HTML.

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

    Prilepite kodo.

  15. Izberite Shrani in zapri.

4. korak. Čiščenje predpomnilnika portalov

Ustvarili ste vzorčno stran webapi za preizkus funkcionalnosti spletnega API-ja. Pred začetkom se prepričajte, da je bil predpomnilnik portalov Power Apps očiščen, tako da se spremembe v aplikaciji za upravljanje portala odražajo na vašem portalu.

POMEMBNO: Čiščenje strežniškega predpomnilnika portala povzroči začasno slabše delovanje portala, dokler se podatki znova nalagajo iz storitve Microsoft Dataverse.

Če želite počistiti predpomnilnik, storite naslednje:

  1. Prijavite se v portal kot član spletne vloge Skrbniki.

  2. Spremenite URL tako, da na koncu dodate /_ services/about . Na primer, če je URL portala  https://contoso.powerappsportals.com, ga spremenite v https://contoso.powerappsportals.com/_services/about.

    Čiščenje predpomnilnika.

    OPOMBA: Če želite počistiti predpomnilnik, morate biti član spletne vloge skrbnika . Če vidite prazen zaslon, preverite dodeljene naloge spletne vloge.

  3. Izberite Počisti predpomnilnik.

Več informacij: Počisti predpomnilnik na strani strežnika za portal

5. korak: Uporaba spletnega API-ja za branje, ogled, urejanje, ustvarjanje in brisanje

Vzorčna spletna stran z URL-jem webapi, ki je bila ustvarjena prej, je zdaj pripravljena za testiranje.

Če želite preveriti funkcionalnost spletnega API-ja:

  1. Prijavite se v svoj portal z uporabniškim računom, ki mu je bila dodeljena vloga Uporabnik spletnega API-ja, ki ste jo predhodno ustvarili.

  2. Pojdite na spletno stran webapi, ki ste jo predhodno ustvarili. Na primer: https://contoso.powerappsportals.com/webapi. WebAPI bo pridobil zapise iz okolja Microsoft Dataverse.

    Vzorčna spletna stran webapi.

  3. Če želite dodati vzorčni zapis iz skripta, izberite Dodaj vzorčni zapis.

  4. Izberite polje. V tem primeru smo izbrali E-poštni naslov, da lahko spremenimo e-poštni naslov stika.

    Uredite e-poštni naslov

  5. Izberite gumb Izbriši , če želite izbrisati zapis.

Zdaj ste ustvarili spletno stran z vzorcem za branje, urejanje, ustvarjanje in brisanje zapisov in lahko prilagodite obrazce in postavitev.

Naslednji korak

Sestavljanje zahtev HTTP in obravnava napak

Glejte tudi

Pregled spletnega API-ja za portale
Postopki pisanja, posodabljanja in brisanja z uporabo spletnih API-jev portalov
Operacije branja portalov z uporabo spletnega API-ja
Konfiguriranje dovoljenj za stolpec

Opomba

Ali nam lahko poveste, kateri je vaš prednostni jezik za dokumentacijo? Izpolnite kratko anketo. (upoštevajte, da je v angleščini)

Z anketo boste porabili približno sedem minut. Ne zbiramo nobenih osebnih podatkov (izjava o zasebnosti).