Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, kişi tablosundaki kayıtları okumak, yazmak, güncelleştirmek ve silmek için sunucu mantığını kullanacak bir web sayfası ve özel web şablonu ayarlayacaksınız.
1. Adım: Sunucu mantığı oluşturma
Power Pages'de oturum açın.
Site + Düzenle'yi seç.
Çalışma alanını ayarla'ya gidin, ardından Sunucu mantığı (önizleme) öğesini seçin.
+Yeni sunucu mantığı'nu seçin.
Sunucu mantığı için ad girin. Bu ad API'de sunucu mantığı API'si oluşturulurken kaynak tanımlayıcısı olarak kullanılır.
Örnek: dataverse-crud-operations
Uygun web rolünü atamak için +Rol ekle'yi seçin.
Adın yanındaki 3 noktaya (...) tıklayın ve Kodu Düzenle'yi seçin.
Özel mantığı yazmak için Visual Studio Code'ı Aç'ı seçin. Önceden tanımlanmış yöntemleri ve betikleri dosyada bulabilirsiniz.
Kişi kayıtlarını okumak, düzenlemek, oluşturmak, silmek için sunucu mantığı yöntemini tanımlayın.
Okuma: Get yönteminin içine aşağıdaki betiği ekleyin
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); }Oluştur: Posta fonksiyonunda aşağıdaki betiği ekleyin
const data = Server.Context.Body; const entitySetName = Server.Context.QueryParameters["entitySetName"]; return Server.Connector.Dataverse.CreateRecord(entitySetName, data);Güncelleme: Put metoduna aşağıdaki betiği ekleyin
const id = Server.Context.QueryParameters["id"]; const data = Server.Context.Body; return Server.Connector.Dataverse.UpdateRecord("accounts", id, data);Sil: del metodunun içine ekle
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);Dosyayı kaydedin.
Yapıştırılabilir tam sunucu mantıksal kodu aşağıda verilmiştir
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 }); } }
2. Adım: Web Sayfası Oluşturma
Power Pages tasarım stüdyoyu başlatın.
Sayfalar çalışma alanında + Sayfa'yı seçin.
Sayfa ekle iletişim kutusunda, Ad kutusuna Sunucu mantığı yazın ve Boş düzenden başla'yı seçin.
Add (Ekle) seçeneğini belirleyin.
Sağ üst köşedeki Kodu Düzenle seçeneğini belirleyin.
Visual Studio Code’u Aç seçin.
Aşağıdaki örnek kod parçacığını kopyalayın ve sayfa bölümünün etiketleri arasına
<div></div>yapıştırın.<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>
3. Adım: İzinleri yapılandırma
Web rolü oluşturma
Şu anda sunucu mantığı üzerinden eriştiğiniz tabloya yönelik izinlere sahip bir web rolünüz yoksa veya verilere farklı bir erişim bağlamı gerektiriyorsanız, aşağıdaki adımlarda yeni bir web rolü oluşturma ve tablo izinleri atama adımları gösterilmektedir.
- Portal Yönetimi uygulamasını başlatın.
- Sol bölmedeki Güvenlik bölümünde Web Rolleri'ni seçin.
- Yeni'yi seçin.
- Ad kutusuna Sunucu mantığı Kullanıcısı (veya bu işlevselliğe erişen kullanıcının rolünü en iyi yansıtan herhangi bir ad) girin.
- Web sitesi listesinde web sitesi kaydınızı seçin.
- Kaydetseçeneğini seçin.
Tablo izinleri oluşturma
- Power Pages tasarım stüdyoyu başlatın.
- Güvenlik çalışma alanını seçin.
- Koru bölümünde Tablo izinleri'ni seçin.
- Yeni izin'i seçin.
- Ad kutusuna, İlgili Kişi Tablosu İzni'ni girin.
- Tablo Adı listesinde Kişi (kişi) öğesini seçin.
- Erişim Türü listesinde Genel'i seçin.
- Okuma, Yazma, Oluşturma ve Silme ayrıcalıklarını seçin.
- + Rol ekle'yi seçin ve daha önce seçtiğiniz veya oluşturduğunuz web rolünü seçin.
- Kaydet ve Kapat'ı seçin.
Web rolüne kişi ekleme
- Portal Yönetimi uygulamasını başlatın.
- Sol bölmedeki Güvenlik bölümünde Kişiler'i seçin.
- Bu örnekte sunucu mantığı için kullanmak istediğiniz kişiyi seçin.
Uyarı
Bu iletişim, bu örnekte sunucu mantığını test etmek için kullanılan kullanıcı hesabıdır. Portalınızda doğru kişiyi seçtiğinizden emin olun.
- İlgili>Web Rolleri'ni seçin.
- Var Olan Web Rolünü Ekle'yi seçin.
- Daha önce oluşturulan Sunucu mantığı kullanıcı rolünü seçin.
- Add (Ekle) seçeneğini belirleyin.
- Kaydet ve Kapat'ı seçin.
4. Adım: Sunucu mantığını kullanarak okuma, görüntüleme, düzenleme, oluşturma ve silme
Web API'sinin işlevselliğini test etmek için:
- Önizleme'yi ve ardından Masaüstü'nü seçin.
- Daha önce oluşturduğunuz Sunucu mantığı kullanıcı rolü atanmış kullanıcı hesabıyla sitenizde oturum açın.
- Daha önce oluşturulan Sunucu mantığı web sayfasına gidin.
İlgili bilgiler
Sunucu mantığına genel bakış
Sunucu mantığı oluşturma
Sunucu nesneleri