Esercitazione: utilizzare l'API Web dei portali

In questa guida, imposterai una pagina Web e un modello Web personalizzato che utilizzano l'API Web per leggere, scrivere, aggiornare ed eliminare i record dalla tabella dei contatti.

Nota

È possibile modificare i nomi delle colonne o utilizzare una tabella diversa mentre segui i passaggi in questo esempio.

Passaggio 1: Crea impostazioni sito

Prima di poter utilizzare l'API Web dei portali, è necessario abilitare le impostazioni del sito richieste con l'app Gestione del portale. Le impostazioni del sito dipendono dalla tabella che si desidera utilizzare durante l'interazione con l'API Web.

  1. Apri l'app Gestione del portale.

  2. Nel riquadro sinistro dell'app Gestione del portale seleziona Impostazioni sito.

    Apri Impostazioni sito nell'app Gestione del portale.

  3. Seleziona Nuovo.

  4. Nella casella Nome, immetti Webapi/contact/enabled.

  5. Nell'elenco Sito web, seleziona il record del tuo sito Web.

  6. Nella casella Valore, immetti true.

    Abilita la tabella dei contatti per l'impostazione del sito WebAPI.

  7. Selezionare Salva e chiudi.

  8. Selezionare Nuovo.

  9. Nella casella Nome, immetti Webapi/contact/fields.

  10. Nell'elenco Sito web, seleziona il record del tuo sito Web.

  11. Nella casella Valore, immetti
    firstname,lastname,fullname,emailaddress1,telephone1

    Abilita l'impostazione del sito dei campi della tabella dei contatti dell'API web.

  12. Selezionare Salva e chiudi.

  13. Selezionare Nuovo.

  14. Nella casella Nome, immetti Webapi/error/innererror.

    Abilita l'impostazione del sito di errore interno dell'API Web.

  15. Nell'elenco Sito web, seleziona il record del tuo sito Web.

  16. Nella casella Valore, immetti true.

  17. Selezionare Salva e chiudi.

  18. Verifica le impostazioni del sito per API Web.

Passaggio 2. Configurare le autorizzazioni

Dovrai configurare le autorizzazioni in modo che gli utenti possano utilizzare la funzionalità API Web. In questo esempio, dovrai configurare o creare un nuovo ruolo Web che utilizzerà l'API Web, aggiungerai le autorizzazioni della tabella per la tabella Contatto e associare l'autorizzazione per la tabella al ruolo Web e infine assegnare il ruolo Web agli utenti per consentire loro di utilizzare l'API Web.

Nota

L'API Web segue le autorizzazioni della tabella provenienti dal contesto del ruolo Web dell'utente autenticato o del ruolo Web anonimo. Valuta se i tuoi utenti dispongono già di un ruolo Web che ha accesso alle tabelle specifiche del tuo sito Web necessarie per l'API Web. Non è necessario creare ruoli Web aggiuntivi solo per usare l'API Web.

Creare un ruolo Web

Se al momento non disponi di un ruolo Web con autorizzazioni per la tabella a cui accedi tramite l'API Web o richiedi un contesto diverso per l'accesso ai dati, i seguenti passaggi illustrano come creare un nuovo ruolo Web e assegnare le autorizzazioni alla tabella.

  1. Apri l'app Gestione del portale.

  2. Nel riquadro a sinistra, nella sezione Sicurezza, seleziona Ruoli Web.

  3. Seleziona Nuovo.

  4. Nella casella Nome, immetti Utente API Web (o qualsiasi nome che rifletta al meglio il ruolo dell'utente che accede a questa funzionalità).

  5. Nell'elenco Sito web, seleziona il record del tuo sito Web.

    Aggiungi ruolo Web utente API Web.

  6. Seleziona Salva.

Creazione delle autorizzazioni di tabella

  1. Avvia la finestra di progettazione di Power Pages.

  2. Seleziona l'area di lavoro Configura.

  3. Nella sezione Sicurezza, seleziona Autorizzazioni di tabella.

  4. Seleziona Nuova autorizzazione.

  5. Nella casella Nome, immetti Autorizzazione tabella Contatto.

  6. Nell'elenco Nome tabella, seleziona Contatto (contatto).

  7. Nell'elenco Tipo di accesso, seleziona Globale.

  8. Seleziona i privilegi Lettura, Scrittura, Creazione ed Eliminazione.

  9. Seleziona + Aggiungi ruoli e seleziona il ruolo Web selezionato o creato in precedenza.

  10. Selezionare Salva e chiudi.

    Autorizzazioni tabella Contatto

Aggiungere contatti al ruolo Web

  1. Apri l'app Gestione del portale.

  2. Nel riquadro a sinistra, nella sezione Sicurezza, seleziona Contatti.

  3. Seleziona un contatto da utilizzare in questo esempio per l'API Web.

    Nota

    Questo contatto è l'account utente utilizzato in questo esempio per il test dell'API Web. Assicurati di selezionare il contatto corretto nel tuo portale.

  4. Seleziona Correlato>Ruoli Web.

    Selezione dei ruoli web correlati.

  5. Selezionare Aggiungi ruolo Web esistente.

  6. Seleziona il ruolo Utente API Web creato in precedenza.

  7. Selezionare Aggiungi.

    Visualizzazione associata ruoli Web.

  8. Selezionare Salva e chiudi.

Passaggio 3: Creare una pagina Web

Dopo aver abilitato l'API Web e configurato le autorizzazioni utente, crea una pagina Web con codice di esempio per visualizzare, modificare, creare ed eliminare i record.

  1. Avvia la finestra di progettazione di Power Pages.

  2. Nell'area di lavoro Pagine seleziona + Pagina.

  3. Nella finestra di dialogo Aggiungi una pagina,

  4. Nella casella Nome, seleziona WebAPI e seleziona Inizia da zero.

  5. Seleziona Aggiungi.

  6. Seleziona l'opzione Modifica codice nell'angolo in alto a destra.

  7. Seleziona Apri Visual Studio Code.

  8. Copia il seguente frammento di codice di esempio e incollalo tra i tag <div></div> della sezione della pagina.

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

    Incolla il codice.

  9. Seleziona CTRL-S per salvare il codice.

  10. Nella finestra di progettazione, seleziona Sincronizza per aggiornare il sito con le modifiche al codice.

Passaggio 4: Usare l'API Web per leggere, visualizzare, modificare, creare ed eliminare

Per testare la funzionalità dell'API Web:

  1. Seleziona Anteprima e quindi Desktop.

  2. Accedi al tuo sito con l'account utente a cui è stato assegnato il ruolo Utente API Web che hai creato in precedenza.

  3. Vai alla pagina Web WebApi creata in precedenza.

    Pagina Web webapi di esempio.

  4. Seleziona Aggiungi record di esempio per aggiungere il record di esempio dallo script.

  5. Seleziona un campo. In questo esempio, abbiamo selezionato E-mail per modificare l'indirizzo e-mail di un contatto.

    Modifica indirizzo di posta elettronica

  6. Seleziona l'icona Elimina per eliminare un record.

Ora che hai creato una pagina web con un esempio per leggere, modificare, creare ed eliminare i record, puoi personalizzare i moduli e il layout.

Passaggio successivo

Comporre le richieste HTTP e gestire gli errori

Vedi anche