SharePoint - Model Objek Server

Dalam bab ini, kita akan melihat Model Objek Server SharePoint. Anda menggunakan Model Objek Server SharePoint saat Anda menulis kode yang akan dijalankan di dalam konteks SharePoint. Beberapa contoh umum adalah kode-di belakang di halaman atau komponen web, penangan kejadian di belakang fitur atau daftar, pekerjaan pengatur waktu, dll.

Fitur Model Objek Server

Berikut adalah fitur utama Model Objek Server

  • Anda dapat menggunakan Server Object Model jika Anda memprogram aplikasi ASP.NET di dalam pool aplikasi yang sama yang digunakan oleh SharePoint.

  • Model Objek Server dapat digunakan jika Anda mengembangkan aplikasi klien seperti konsol atau formulir Windows atau aplikasi WPF yang akan berjalan di server SharePoint.

  • Anda tidak dapat menggunakan Model Objek Server untuk menyambungkan dari jarak jauh ke SharePoint Server.

  • Saat Anda ingin menggunakan Server Object Model, Anda merujuk ke file Microsoft.SharePointmajelis. Ada rakitan lain, yang membentuk Model Objek Server, tetapi Microsoft.SharePoint adalah yang utama.

  • Tipe inti yang akan Anda gunakan paling sering memetakan ke komponen yang Anda gunakan sebagai pengguna akhir, sehingga hal-hal seperti kumpulan situs, situs, daftar, pustaka, dan item daftar diwakili oleh tipe SPSite, SPWeb, SPList, SPDocumentLibrary, dan SPListItem.

  • Tipe dan Model Objek Server yang mewakili kumpulan situs adalah SPSite dan tipe yang mewakili situs SharePoint dalam Model Objek Server adalah SPWeb. Oleh karena itu, ketika Anda beralih dari istilah pengguna akhir ke istilah pengembang, Anda hanya perlu melakukan pemetaan mental itu.

Sekarang saat Anda pertama kali mulai menggunakan SharePoint, itu bisa membingungkan karena situs sangat kelebihan beban dan itu berarti hal-hal yang berlawanan dalam kosakata pengguna akhir dan pengembang, belum lagi kosakata web.

Mari kita lihat contoh sederhana Model Objek Server.

Step 1 - Buka Visual Studio dan buat proyek baru dari File → New → Project opsi menu.

Step 2 - Pilih Windows dari Templates → Visual C#di panel kiri dan pilih Aplikasi Konsol di panel tengah. Masukkan nama proyek Anda dan klik OK.

Step 3 - Setelah proyek dibuat, klik kanan proyek di Solution Explorer dan pilih Add → References.

Step 4 - Pilih Assemblies → Extensions di panel kiri dan periksa Microsoft.SharePoint di panel tengah dan klik tombol Ok.

Sekarang klik kanan lagi proyek tersebut di Solution Explorer dan pilih Properties.

Step 5 - Klik Build Tab di panel kiri dan hapus centang Prefer 32-bit pilihan.

Step 6 - Sekarang kembali ke Program.cs file dan ganti dengan kode berikut.

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SharePointData {
   class Program {
      static void Main(string[] args) {
         using (var site = new SPSite("http://waqasserver/sites/demo")) {
            var web = site.RootWeb;
            Console.WriteLine(web.Title);
            var lists = web.Lists;
            
            foreach (SPList list in lists) {
               Console.WriteLine("\t" + list.Title);
            }
            Console.ReadLine();
         }
      }
   }
}

Note- Pada kode di atas buat dulu objek SPSite baru. Ini adalah objek sekali pakai, jadi dibuat dalam pernyataan use. Konstruktor SPSite memasukkan URL ke kumpulan situs, yang akan berbeda dalam kasus Anda.

Variasi web = site.RootWeb akan mendapatkan root dari kumpulan situs.

Kita bisa mendapatkan daftar menggunakan web. Daftar dan mencetak judul item daftar.

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut -

SharePoint Tutorials
   appdata
   Authors
   Composed Looks
   Contacts
   Course Documents
   Courses
   Documents
   List Template Gallery
   Master Page Gallery
   Site Assets
   Site Pages
   Solution Gallery
   Style Library
   Theme Gallery
   User Information List
   Web Part Gallery

Anda dapat melihat bahwa judul ini adalah Galeri Solusi, Perpustakaan Gaya, Templat Formulir. Ini adalah daftar yang digunakan secara internal oleh SharePoint. Oleh karena itu, alih-alih menampilkan semua daftar, mungkin Anda hanya ingin menampilkan daftar yang biasanya dilihat pengguna.

Karenanya, alih-alih mendapatkan seluruh koleksi daftar, kami ingin mendapatkan semua daftar yang tidak disembunyikan. Kita dapat melakukannya dengan menggunakan kueri tautan seperti yang diberikan di bawah ini.

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ServerObjectModel {
   class Program {
      static void Main(string[] args) {
         using (var site = new SPSite("http://waqasserver/sites/demo")) {
            var web = site.RootWeb;
            Console.WriteLine(web.Title);
            var lists = from SPList list in web.Lists
            where list.Hidden == false
            select list;
            
            foreach (SPList list in lists) {
               Console.WriteLine("\t" + list.Title);
            }
            Console.ReadLine();
         }
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut -

SharePoint Tutorials
   Authors
   Contacts
   Course Documents
   Courses
   Documents
   Site Assets
   Site Pages
   Style Library

Anda dapat melihat bahwa ini akan mengembalikan semua daftar yang tidak disembunyikan.

Mari kita lihat contoh sederhana lainnya di mana kita juga akan menampilkan beberapa informasi tentang item daftar.

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ServerObjectModel {
   class Program {
      static void Main(string[] args) {
         using (var site = new SPSite("http://waqasserver/sites/demo")) {
            var web = site.RootWeb;
            Console.WriteLine(web.Title);
            var lists = from SPList list in web.Lists
            where list.Hidden == false
            select list;
            
            foreach (SPList list in lists) {
               Console.WriteLine("\t" + list.Title);
               var items = list.Items.OfType<SPListItem>().Take(5);
               var isDocLib = list is SPDocumentLibrary;
               
               foreach (SPListItem item in items) {
                  var value = isDocLib ? item.Name : item.Title;
                  Console.WriteLine("\t\t" + value);
               }
            }
            Console.ReadLine();
         }
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut -

SharePoint Tutorials
   Authors
      Muhammad Waqas
      Mark Upston
      Allan Bommer
      Andy Onian
   Contacts
      Waqas
      Upston
      Bommer
   Course Documents
      Sample1.docx
      Sample2.docx
      Sample3.docx
   Courses
      SharePoint Tutorials
      C# Tutorials
      ASP.Net Tutorials
      NHibernate Tutorials
   Documents
   Site Assets
   Site Pages
      Home.aspx
      How To Use This Library.aspx
   Style Library

Daftar Data

Saat Anda pertama kali membuat daftar, itu selalu memiliki kolom judul. Kolom Judul ini memberikan akses, secara default, ke konteks Item Daftar atau menu edit blok kontrol.

Karena, setiap daftar dimulai dengan kolom- Judul, SPListItemjenis mengekspos itu sebagai properti. Untuk kolom yang tidak umum untuk setiap daftar, Anda dapat mengaksesnya melalui pengindeks diSpListItem Tipe.

Anda dapat meneruskan beberapa informasi ke pengindeks, tetapi yang paling umum adalah Column. Pengguna akhir di pengaturan daftar dapat mengubah nama ini. Anda tidak ingin menggunakan nama ini karena sekali lagi, itu bisa berubah.

Yang kedua adalah InternalName, yang ditetapkan pada saat daftar ini dibuat dan tidak pernah berubah. Ini adalah nama yang ingin Anda gunakan saat Anda mengakses nilai kolom.

Mari kita lihat contoh sederhana di mana kita akan mengambil daftar Penulis seperti yang ditunjukkan di bawah ini -

Dalam contoh ini, kita akan mendapatkan daftar Penulis dan kemudian menaikkan Gaji / Tarif dengan beberapa nilai. Oleh karena itu, untuk kolom Gaji / Tarif kita akan menggunakanInternalName.

Step 1- Buka Server Explorer; klik kananSharePoint Connections dan pilih Add Connection ... Tentukan URL dan klik OK.

Step 2 - Kembangkan SharePoint Tutorials → List Libraries → Lists → Authors → Fields → Salary/Ratebidang. Klik kananSalary/Ratedan pilih Properties. Anda akan melihatInternalName di jendela Properties.

Step 3 - Diberikan di bawah ini adalah contoh sederhana untuk mengambil Penulis berdasarkan Gaji / Tarif dan menaikkan Gaji / Tarif mereka.

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ServerObjectModel {
   class Program {
      static void Main(string[] args) {
         using (var site = new SPSite("http://waqasserver/sites/demo")) {
            var web = site.RootWeb;
            var list = web.Lists.TryGetList("Authors");
            if (list == null)
            return;
            var items = list.Items;
            ShowItems(items);
            RaiseRates(items);
            Console.WriteLine("\nAfter Raise\n");
            ShowItems(items);
            Console.ReadKey();
         }
      }
      static void RaiseRates(SPListItemCollection items) {
         foreach (SPListItem item in items) {
            var employee = Convert.ToBoolean(item["Employee"]);
            var rate = Convert.ToDouble(item["Salary_x002f_Rate"]);
            var newRate = employee ? rate + 1 : rate + 0.1;
            item["Salary_x002f_Rate"] = newRate;
            item.Update();
         }
      }
      static void ShowItems(SPListItemCollection items) {
         foreach (SPListItem item in items) {
            Console.WriteLine("Salary or rate for {0} is {1:c}", item.Title,
            item["Salary_x002f_Rate"]);
         }
      }
   }
}

Dalam kode di atas Anda dapat melihat bahwa kami memiliki dua metode -

  • Salah satunya adalah mengambil daftar yang dipanggil ShowItems dan

  • Metode lainnya adalah menaikkan Tarif yang disebut RaiseRates().

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut -

Salary or rate for Muhammad Waqas is $950.00 Salary or rate for Mark Upston is $15.00
Salary or rate for Allan Bommer is $20.00 Salary or rate for Andy Onian is $870.00

After Raise

Salary or rate for Muhammad Waqas is $951.00 Salary or rate for Mark Upston is $15.10
Salary or rate for Allan Bommer is $20.10 Salary or rate for Andy Onian is $871.00

Pertanyaan CAML

Dalam contoh di atas, kami selalu melakukan iterasi melalui item menggunakan foreach loop berkali-kali melalui semua item dan kami selalu mengembalikan semua kolom atau setidaknya semua kolom dapat diakses.

Ini benar-benar analog dengan melakukan pemilihan * dari nama tabel dalam kueri SQL.

Kami dapat mengatasi masalah ini dengan menggunakan apa yang disebut CAML queries. Saat melakukan kueri CAML Anda memiliki dua opsi -

  • Jika Anda hanya ingin membuat kueri satu daftar, Anda dapat menggunakan objek SPQuery.

  • Jika Anda ingin membuat kueri beberapa daftar dalam kumpulan situs, maka Anda bisa menggunakan SPSiteDataQuery.

Umumnya, saat Anda melakukan SPSiteDataQuery, Anda menanyakan semua daftar jenis tertentu.

Misalnya, saya ingin menanyakan semua daftar kontak, dll. SPSiteDataQuery memungkinkan Anda menentukan cakupan, sehingga Anda dapat menunjukkan bahwa Anda ingin menanyakan seluruh kumpulan situs, situs individual, atau situs dan semua turunannya.

Sintaks untuk kueri CAML pada dasarnya dijelaskan dalam format XML dan perlu sedikit waktu untuk membiasakan diri membuat kueri semacam ini.

Mari kita lihat contoh sederhana dari CAML Queries. Di sini, kami akan membuat kueri CAML untuk meminta data dalam daftar Penulis kami.

using Microsoft.SharePoint;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ServerObjectModel {
   class Program {
      static void Main(string[] args) {
         using (var site = new SPSite("http://waqasserver/sites/demo")) {
            var web = site.RootWeb;
            var list = web.Lists.TryGetList("Authors");
            if (list == null)
            return;
            var items = QueryItems(list);
            ShowItems(items);
            
            //RaiseRates(items);
            //Console.WriteLine("\nAfter Raise\n");
            //ShowItems(items);
            Console.ReadKey();
         }
      }
      static SPListItemCollection QueryItems(SPList list) {
         var query = new SPQuery();
         
         query.ViewFields =
            "<FieldRef Name='Title' />" +
            "<FieldRef Name='Employee' />" +
            "<FieldRef Name='Salary_x002f_Rate' />";
         
         query.Query =
            "<OrderBy>" +
            " <FieldRef Name='Salary_x002f_Rate' />" +
            "</OrderBy>" +
            "<Where>" +
            " <Eq>" +
            " <FieldRef Name='Employee' />" +
            " <Value Type='Boolean'>False</Value>" +
            " </Eq>" +
            "</Where>";
         return list.GetItems(query);
      }
      static void RaiseRates(SPListItemCollection items) {
         foreach (SPListItem item in items) {
            var employee = Convert.ToBoolean(item["Employee"]);
            var rate = Convert.ToDouble(item["Salary_x002f_Rate"]);
            var newRate = employee ? rate + 1 : rate + 0.1;
            item["Salary_x002f_Rate"] = newRate;
            item.Update();
         }
      }
      static void ShowItems(SPListItemCollection items) {
         foreach (SPListItem item in items) {
            Console.WriteLine("Salary or rate for {0} is {1:c}",
            item.Title,
            item["Salary_x002f_Rate"]);
         }
      }
   }
}

Kami telah menggunakan kueri CAML untuk mendapatkan beberapa item. DalamQueryItems metode, Anda dapat melihat bahwa kami telah mengambil hanya item yang bukan Karyawan.

Salary or rate for Mark Upston is $15.10 Salary or rate for Allan Bommer is $20.10