Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
I denne veiledningen skal du konfigurere en nettside og egendefinert nettmal som bruker serverlogikken til å lese, skrive, oppdatere og slette poster fra kontakttabellen.
Trinn 1: Opprette en serverlogikk
Logg på Power Pages.
Velg område + Rediger.
Gå til konfigurer arbeidsområdet, og velg deretter Serverlogikk (forhåndsvisning).
Velg +Ny serverlogikk.
Skriv inn navnet på serverlogikken. Dette navnet brukes i API som ressursidentifikator under bygging av serverlogikk-API-en.
Eksempel: dataverse-crud-operasjoner
Velg +Legg til roller for å tilordne riktig nettrolle.
Velg tre prikker (...) ved siden av navnet, og velg Rediger kode.
Velg Åpne Visual Studio Code for å redigere den egendefinerte logikken. Du finner forhåndsdefinerte metoder og skript i filen.
Definer serverlogikkmetoden for å lese, redigere, opprette, slette kontaktoppføringene.
Les: Legg til nedenfor skript i get-metoden
const entitySetName = Server.Context.QueryParameters["entitySetName"]; if (!Server.Context.QueryParameters["id"]) { return Server.Connector.Dataverse.RetrieveMultipleRecords(entitySetName); } else { const id = Server.Context.QueryParameters["id"]; // Context reference return Server.Connector.Dataverse.RetrieveRecord(entitySetName, id); }Opprett: Legg til skriptet under i postmetoden
const data = Server.Context.Body; const entitySetName = Server.Context.QueryParameters["entitySetName"]; return Server.Connector.Dataverse.CreateRecord(entitySetName, data);Oppdatering: Legg til nedenforstående skript i put-metoden
const id = Server.Context.QueryParameters["id"]; const data = Server.Context.Body; return Server.Connector.Dataverse.UpdateRecord("accounts", id, data);Slett: Legg til i del-metoden
const id = Server.Context.QueryParameters["id"]; const entitySetName = Server.Context.QueryParameters["entitySetName"]; Server.Logger.Log("Entity Set name:" + entitySetName); return Server.Connector.Dataverse.DeleteRecord(entitySetName, id);Lagre filen.
Her er den fullstendige serverlogikkkoden som kan limes inn
function get() { try { Server.Logger.Log("GET called"); // Logger reference const entitySetName = Server.Context.QueryParameters["entitySetName"]; const additionParameters = Server.Context.QueryParameters['additionalParameters']; if (!Server.Context.QueryParameters["id"]) { const response = Server.Connector.Dataverse.RetrieveMultipleRecords(entitySetName,additionParameters); return response; } else{ const id = Server.Context.QueryParameters["id"]; // Context reference const response = Server.Connector.Dataverse.RetrieveRecord(entitySetName, id,additionParameters); return response; } } catch (err) { Server.Logger.Error("GET failed: " + err.message); return JSON.stringify({ status: "error", method: "GET", message: err.message }); } } function post() { try { Server.Logger.Log("POST called"); const data = Server.Context.Body; const entitySetName = Server.Context.QueryParameters["entitySetName"]; return Server.Connector.Dataverse.CreateRecord(entitySetName, data); } catch (err) { Server.Logger.Error("POST failed: " + err.message); return JSON.stringify({ status: "error", method: "POST", message: err.message }); } } function put() { try { Server.Logger.Log("PUT called"); const id = Server.Context.QueryParameters["id"]; const data = Server.Context.Body; const entitySetName = Server.Context.QueryParameters["entitySetName"]; return Server.Connector.Dataverse.UpdateRecord(entitySetName, id, data); } catch (err) { Server.Logger.Error("PUT failed: " + err.message); return JSON.stringify({ status: "error", method: "PUT", message: err.message }); } } function del() { try { // "delete" keyword should not be used in script file. Server.Logger.Log("DEL called"); const id = Server.Context.QueryParameters["id"]; const entitySetName = Server.Context.QueryParameters["entitySetName"]; return Server.Connector.Dataverse.DeleteRecord(entitySetName, id); } catch (err) { Server.Logger.Error("Deletion failed: " + err.message); return JSON.stringify({ status: "error", method: "DEL", message: err.message }); } }
Trinn 2: Opprette nettside
Velg + Side i Sider-arbeidsområdet.
Skriv inn Serverlogikk i Navn-boksen i dialogboksen Legg til en side, og velg Start fra tomt oppsett.
Velg Legg til.
Velg alternativet Rediger kode øverst til høyre.
Velg Åpne Visual Studio Code.
Kopier følgende kodesnutt og lim den
<div></div>inn mellom kodene i sideinndelingen.<style> #processingMsg { padding: 6px 12px; background: #eee; border-radius: 4px; position: fixed; top: 10px; left: 50%; transform: translateX(-50%); display: none; z-index: 9999; text-align: center; font-weight: bold; } table { border-collapse: collapse; width: 100%; margin-top: 10px; font-family: Arial, sans-serif; } th, td { border: 1px solid #ccc; padding: 6px; text-align: left; } button { cursor: pointer; border: 1px solid #aaa; padding: 4px 8px; border-radius: 4px; background: #fff; font-size: 14px; margin-right: 2px; } button.add { color: green; } button.save { color: green; } button.cancel { color: orange; } button.delete { color: red; } input { width: 95%; box-sizing: border-box; } td.actions { white-space: nowrap; } </style> <div id="processingMsg">Processing...</div> <div id="dataTable"></div> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(function() { // --- safeAjax wrapper --- (function(webapi, $) { function safeAjax(ajaxOptions) { var dfd = $.Deferred(); shell.getTokenDeferred().done(function(token) { ajaxOptions.headers = ajaxOptions.headers || {}; ajaxOptions.headers["__RequestVerificationToken"] = token; $.ajax(ajaxOptions) .done((data, ts, jq) => validateLoginSession(data, ts, jq, dfd.resolve)) .fail(dfd.reject); }).fail(() => dfd.rejectWith(this, arguments)); return dfd.promise(); } webapi.safeAjax = safeAjax; })(window.webapi = window.webapi || {}, jQuery); // --- notification banner --- const notify = (function() { const $m = $('#processingMsg'); let s = 0, t; return { show: (msg = 'Processing...') => { $m.text(msg); if (!s) clearTimeout(t), $m.show(); s++; }, hide: () => { s = Math.max(0, s - 1); if (!s) clearTimeout(t), t = setTimeout(() => $m.hide(), 300); } }; })(); function ajaxCall(msg, opts) { notify.show(msg); return webapi.safeAjax(opts) .fail(r => alert(r.responseJSON?.error?.message || 'Server logic not available')) .always(notify.hide); } // --- Table config --- const cols = [ { name: 'firstname', label: 'First Name' }, { name: 'lastname', label: 'Last Name' }, { name: 'emailaddress1', label: 'Email' }, { name: 'telephone1', label: 'Telephone' } ]; let data = []; function render() { const html = `<table> <thead> <tr> ${cols.map(c => `<th>${c.label}</th>`).join('')} <th>Actions <button class="add">➕</button></th> </tr> </thead> <tbody> ${data.map(r => `<tr data-id="${r.id}" data-name="${r.fullname}"> ${cols.map(c => `<td data-attribute="${c.name}" data-value="${r[c.name] || ''}">${r[c.name] || ''}</td>`).join('')} <td class="actions"> <button class="delete">🗑️</button> </td> </tr>`).join('')} </tbody> </table>`; $('#dataTable').html(html); } function addRecord(r) { data.unshift(r); render(); } function removeRecord(id) { data = data.filter(r => r.id !== id); render(); } function updateRecord(id, attr, val) { const r = data.find(r => r.id === id); if (r) { r[attr] = val; render(); } } // --- Events --- $('#dataTable').on('dblclick', 'tr', function() { const $tr = $(this); if ($tr.hasClass('editing')) return; // prevent double edit $tr.addClass('editing'); $tr.data('original', $tr.find('td[data-attribute]').map(function() { return $(this).text(); }).get()); $tr.find('td[data-attribute]').each(function() { const $td = $(this); const oldVal = $td.text(); $td.html(`<input type="text" value="${oldVal}" data-attr="${$td.data('attribute')}" />`); }); const $actions = $tr.find('td.actions'); $actions.append('<button class="save">✅</button><button class="cancel">❌</button>'); }); $('#dataTable').on('click', '.save', function() { const $tr = $(this).closest('tr'); const id = $tr.data('id'); const updates = {}; $tr.find('input').each(function() { updates[$(this).data('attr')] = $(this).val(); }); ajaxCall('Updating...', { type: 'PUT', url: `/_api/serverlogics/dataverse-crud-operations?entitySetName=contacts&id=${id}`, contentType: 'application/json', data: JSON.stringify(updates), success: () => { Object.assign(data.find(r => r.id === id), updates); render(); } }); }); $('#dataTable').on('click', '.cancel', function() { const $tr = $(this).closest('tr'); const original = $tr.data('original'); $tr.find('td[data-attribute]').each(function(i) { $(this).text(original[i]); }); $tr.removeClass('editing'); $tr.find('button.save, button.cancel').remove(); }); $('#dataTable').on('click', '.delete', function() { const $tr = $(this).closest('tr'); if (confirm('Delete "' + $tr.data('name') + '"?')) { ajaxCall('Deleting...', { type: 'DELETE', url: `/_api/serverlogics/dataverse-crud-operations?entitySetName=contacts&id=${$tr.data('id')}`, contentType: 'application/json', success: () => removeRecord($tr.data('id')) }); } }); $('#dataTable').on('click', '.add', function() { const r = { firstname: 'Alton', lastname: 'Stott' + Math.floor(Math.random() * 900 + 100), emailaddress1: 'Alton.Stott@contoso.com', telephone1: '555-123-4567' }; ajaxCall('Adding...', { type: 'POST', url: '/_api/serverlogics/dataverse-crud-operations?entitySetName=contacts', contentType: 'application/json', data: JSON.stringify(r), success: (res, s, xhr) => { r.id = xhr.getResponseHeader('entityid'); r.fullname = r.firstname + ' ' + r.lastname; addRecord(r); } }); }); ajaxCall('Loading...', { type: 'GET', url: '/_api/serverlogics/dataverse-crud-operations?entitySetName=contacts&additionalParameters=$select=fullname,firstname,lastname,emailaddress1,telephone1', contentType: 'application/json' }).done(res => { try { const p = JSON.parse(res.data); const b = JSON.parse(p.Body); data = (b.value || []).map(r => ({ ...r, id: r.contactid, fullname: r.fullname })); render(); } catch (e) { console.error(e); } }); }); </script>
Trinn 3: Konfigurere tillatelser
Opprette en nettrolle
Hvis du for øyeblikket ikke har en nettrolle med tillatelser til tabellen du har tilgang til gjennom serverlogikken eller krever en annen kontekst for å få tilgang til dataene, viser fremgangsmåten nedenfor deg hvordan du oppretter en ny nettrolle og tilordner tabelltillatelser.
- Start portalbehandlingsappen.
- Velg Nettroller i Sikkerhets-delen i ruten til venstre.
- Velg Ny.
- Skriv inn Serverlogikkbruker (eller et hvilket som helst navn som best gjenspeiler rollen til brukeren som får tilgang til denne funksjonaliteten).
- Velg nettstedsoppføringen i nettstedslisten .
- Velg Lagre.
Opprett tabelltillatelser
- Start power pages-utformingsstudioet.
- Velg sikkerhetsarbeidsområdet .
- Velg Tabelltillatelser under Beskytt-delen.
- Velg Ny tillatelse.
- Skriv inn kontakttabelltillatelse i Navn-boksen.
- Velg Kontakt (kontakt) i tabellnavnlisten.
- Velg Global i Access Type-listen.
- Velg lese-, skrive-, opprett- og sletterettigheter .
- Velg + Legg til roller , og velg nettrollen du valgte eller opprettet tidligere.
- Velg Lagre og lukk.
Legge til kontakter i nettrollen
- Start portalbehandlingsappen.
- Velg Kontakter i Sikkerhets-delen i ruten til venstre.
- Velg en kontakt du vil bruke i dette eksemplet for serverlogikken.
Note
Denne kontakten er brukerkontoen som brukes i dette eksemplet for testing av serverlogikken. Pass på at du velger riktig kontakt i portalen.
- Velg Relatert>Nettroller.
- Velg Legg til eksisterende webrolle.
- Velg serverlogikkens brukerrolle , opprettet tidligere.
- Velg Legg til.
- Velg Lagre og lukk.
Trinn 4: Bruk serverlogikken til å lese, vise, redigere, opprette og slette
Slik tester du web-API-funksjonaliteten:
- Velg Forhåndsvisning, og velg deretter Skrivebord.
- Logg på nettstedet med brukerkontoen som har blitt tilordnet serverlogikkens brukerrolle du opprettet tidligere.
- Gå til serverlogikkens nettside som ble opprettet tidligere.
Relatert informasjon
Oversikt over serverlogikk
Redigeringsserverlogikk
Serverobjekter