sharepoint

Trong chương này, chúng ta sẽ đề cập đến một trong những tác vụ phổ biến nhất của SharePoint, tức là tương tác với các nguồn dữ liệu khác nhau như danh sách hoặc thư viện tài liệu. Một điều tuyệt vời về SharePoint là bạn có sẵn một số tùy chọn để tương tác với dữ liệu. Một số ví dụ là Mô hình đối tượng máy chủ, Mô hình đối tượng phía máy khách, dịch vụ REST, v.v. Trước khi bạn có thể làm bất cứ điều gì với SharePoint theo chương trình, bạn cần thiết lập kết nối và ngữ cảnh với site SharePoint của mình. Tuy nhiên, để làm được điều này, chúng ta cần SharePoint trên Premises, có thể được cài đặt trên Window Server.

Bạn cần thêm tham chiếu trong dự án của mình vào Microsoft.SharePoint.dll hoặc Microsoft.SharePoint.Client.dll . Với các tham chiếu thích hợp được thêm vào dự án của bạn, sau đó bạn có thể bắt đầu thiết lập ngữ cảnh và mã trong ngữ cảnh đó.
Chúng ta hãy xem một ví dụ đơn giản.
Bước 1 – Mở Visual Studio và tạo một dự án mới từ tùy chọn menu Tệp → Mới → Dự án .
Bước 2 – Chọn Windows từ Mẫu → Visual C # trong ngăn bên trái và chọn Ứng dụng bảng điều khiển ở ngăn giữa. Nhập tên dự án của bạn và nhấp vào OK.
Bước 3 – Sau khi dự án được tạo, nhấp chuột phải vào dự án trong Giải pháp Explorer và chọn Thêm → Tham khảo .

Bước 4 – Chọn Assemblies → Phần mở rộng trong ngăn bên trái và kiểm tra Microsoft.SharePoint trong ngăn giữa và nhấp vào OK.

Bây giờ nhấp chuột phải vào dự án một lần nữa trong Solution Explorer và chọn Thuộc tính.

Bước 5 – Nhấp vào Tab Build ở khung bên trái và bỏ chọn tùy chọn Prefer 32-bit .

Bước 6 – Bây giờ quay lại tệp Program.cs và thay thế nó bằng đoạn mã sau.

Bước 6 - Bây giờ quay lại tệp Program.cs và thay thế nó bằng đoạn mã sau.
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();
         }
      }
   }
}

Lưu ý – Trong đoạn mã trên, trước tiên hãy tạo một đối tượng SPSite mới. Đây là một đối tượng dùng một lần, vì vậy nó được tạo trong một câu lệnh using. Phương thức khởi tạo SPSite lấy URL đến tuyển tập trang, sẽ khác trong trường hợp của bạn.

Var web = site.RootWeb sẽ lấy thư mục gốc của tuyển tập trang.

Chúng ta có thể lấy danh sách bằng cách sử dụng web.Lists và in tiêu đề của các mục trong danh sách.

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau:

SharePoint

   appdata

   Composed Looks

   Documents

   List Template Gallery

   Master Page Gallery

   Site Assets

   Site Pages

   Solution Gallery

   Style Library

   Theme Gallery

   User Information List

   Web Part Gallery

SharePoint – Mô hình đối tượng máy chủ

Trong chương này, chúng ta sẽ xem xét Mô hình Đối tượng Máy chủ SharePoint. Bạn sử dụng Mô hình Đối tượng Máy chủ SharePoint khi bạn đang viết mã sẽ chạy bên trong ngữ cảnh của SharePoint. Một số ví dụ phổ biến sẽ là mã phía sau trong một trang hoặc một phần web, trình xử lý sự kiện đằng sau một tính năng hoặc danh sách, công việc hẹn giờ, v.v.

Các tính năng của mô hình đối tượng máy chủ

Sau đây là các tính năng chính của Mô hình đối tượng máy chủ

  • Bạn có thể sử dụng Mô hình đối tượng máy chủ nếu bạn đang lập trình ứng dụng ASP.NET bên trong cùng một nhóm ứng dụng được SharePoint sử dụng.
  • Mô hình đối tượng máy chủ có thể được sử dụng nếu bạn đang phát triển ứng dụng khách như bảng điều khiển hoặc biểu mẫu Windows hoặc ứng dụng WPF sẽ chạy trên máy chủ SharePoint.
  • Bạn không thể sử dụng Mô hình Đối tượng Máy chủ để kết nối từ xa với Máy chủ SharePoint.
  • Khi bạn muốn sử dụng Mô hình Đối tượng Máy chủ, bạn tham khảo hội đồng Microsoft.SharePoint . Có những tổ hợp khác tạo nên Mô hình Đối tượng Máy chủ, nhưng Microsoft.SharePoint là tổ hợp chính.
  • Các loại cốt lõi mà bạn sẽ sử dụng phổ biến nhất ánh xạ tới các thành phần mà bạn sử dụng với tư cách là người dùng cuối, vì vậy những thứ như tuyển tập trang, trang web, danh sách, thư viện và các mục danh sách được đại diện bởi các loại SPSite, SPWeb, SPList, SPDocumentLibrary và SPListItem.
  • Loại và Mô hình đối tượng máy chủ đại diện cho tuyển tập trang là SPSite và loại đại diện cho trang SharePoint trong Mô hình đối tượng máy chủ là SPWeb. Do đó, khi bạn chuyển từ điều khoản người dùng cuối sang điều khoản nhà phát triển, bạn sẽ chỉ phải thực hiện việc lập bản đồ tinh thần đó.

Bây giờ khi bạn lần đầu tiên bắt đầu sử dụng SharePoint, nó có thể gây nhầm lẫn vì trang web quá tải và nó có nghĩa là những điều ngược lại trong từ vựng của người dùng cuối và nhà phát triển, chưa kể đến từ vựng web.

Chúng ta hãy xem một ví dụ đơn giản về Mô hình Đối tượng Máy chủ.

Bước 1 – Mở Visual Studio và tạo một dự án mới từ tùy chọn menu Tệp → Mới → Dự án .

Bước 2 – Chọn Windows từ Mẫu → Visual C # trong ngăn bên trái và chọn Ứng dụng bảng điều khiển ở ngăn giữa. Nhập tên dự án của bạn và nhấp vào OK.

Bước 3 – Sau khi dự án được tạo, nhấp chuột phải vào dự án trong Giải pháp Explorer và chọn Thêm → Tham khảo .

Bước 4 – Chọn Assemblies → Phần mở rộng trong ngăn bên trái và kiểm tra Microsoft.SharePoint ở ngăn giữa và nhấp vào nút Ok. Bây giờ nhấp chuột phải vào dự án một lần nữa trong Solution Explorer và chọn Thuộc tính

Bước 5 – Nhấp vào Tab Build ở khung bên trái và bỏ chọn tùy chọn Prefer 32-bit 

Bước 6 – Bây giờ quay lại tệp Program.cs và thay thế nó bằng đoạn mã sau.

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();
         }
      }
   }
}

Lưu ý – Trong đoạn mã trên, trước tiên hãy tạo một đối tượng SPSite mới. Đây là một đối tượng dùng một lần, vì vậy nó được tạo trong một câu lệnh using. Phương thức khởi tạo SPSite lấy URL đến tuyển tập trang, sẽ khác trong trường hợp của bạn.

Var web = site.RootWeb sẽ lấy thư mục gốc của tuyển tập trang.

Chúng ta có thể lấy danh sách bằng cách sử dụng web.Lists và in tiêu đề của các mục trong danh sách.

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau:

SharePoint
   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

Bạn có thể thấy rằng các tiêu đề này là Thư viện giải pháp, Thư viện kiểu, Mẫu biểu mẫu. Đây là những danh sách được SharePoint sử dụng nội bộ. Do đó, thay vì hiển thị tất cả các danh sách, có thể bạn chỉ muốn hiển thị các danh sách mà người dùng thường thấy.

Do đó, thay vì lấy toàn bộ bộ sưu tập danh sách, chúng tôi muốn lấy tất cả các danh sách không bị ẩn. Chúng tôi có thể làm điều đó bằng cách sử dụng một truy vấn liên kết như được cung cấp bên dưới.

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/")) {
            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();
         }
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau:

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

Bạn có thể thấy rằng điều này sẽ trả lại cho chúng tôi tất cả các danh sách không bị ẩn. Hãy để chúng tôi xem xét một ví dụ đơn giản khác, trong đó chúng tôi cũng sẽ hiển thị một số thông tin về các mục danh sách

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/")) {
            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();
         }
      }
   }
}

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau:

SharePoint
   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

Liệt kê dữ liệu

Khi bạn lần đầu tiên tạo một danh sách, nó luôn có một cột tiêu đề. Theo mặc định, cột Tiêu đề này cấp quyền truy cập vào ngữ cảnh Mục danh sách hoặc trình đơn khối điều khiển chỉnh sửa.

Vì mọi danh sách đều bắt đầu bằng cột- Tiêu đề, kiểu SPListItem hiển thị đó là một thuộc tính. Đối với các cột không phổ biến cho mọi danh sách, bạn có thể truy cập chúng thông qua trình chỉ mục trên loại SpListItem .

Bạn có thể chuyển một vài thông tin tới trình chỉ mục, nhưng thông tin phổ biến nhất là Cột . Người dùng cuối trong cài đặt danh sách có thể thay đổi tên này. Bạn không muốn sử dụng tên này vì một lần nữa, nó có thể thay đổi.

Thứ hai là InternalName , được đặt tại thời điểm danh sách này được tạo và nó không bao giờ thay đổi. Đây là tên bạn muốn sử dụng khi bạn đang truy cập giá trị cột. Chúng ta hãy xem ví dụ đơn giản, trong đó chúng ta sẽ truy xuất danh sách Tác giả như được hiển thị bên dưới

Trong ví dụ này, chúng tôi sẽ nhận được danh sách Tác giả và sau đó tăng mức lương / tỷ lệ lên một số giá trị. Do đó, đối với cột Lương / Tỷ lệ, chúng tôi sẽ sử dụng Tên nội bộ .

Bước 1 – Đi tới Server Explorer; bấm chuột phải vào Kết nối SharePoint và chọn Thêm kết nối … Chỉ định URL và bấm OK.

Bước 2 – Mở rộng Hướng dẫn SharePoint → Thư viện danh sách → Danh sách → Tác giả → Trường → Trường lương / tỷ lệ . Nhấp chuột phải vào Lương / Tỷ lệ và chọn Thuộc tính. Bạn sẽ thấy InternalName trong cửa sổ Thuộc tính.

Bước 3 – Dưới đây là một ví dụ đơn giản về việc truy xuất các Tác giả dựa trên Mức lương / Mức lương và tăng Mức lương / Mức lương của họ.

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/")) {
            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"]);
         }
      }
   }
}

Trong đoạn mã trên, bạn có thể thấy rằng chúng tôi có hai phương pháp:

  • Một là truy xuất danh sách được gọi là ShowItems và
  • Phương pháp khác là tăng Tỷ lệ được gọi là RaiseRates () .

Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả sau:

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

Truy vấn CAML

Trong các ví dụ trên, chúng tôi luôn lặp lại qua các mục bằng vòng lặp foreach nhiều lần lặp qua tất cả các mục và chúng tôi luôn đưa trở lại tất cả các cột hoặc ít nhất tất cả các cột đều có thể truy cập được.

Nó thực sự tương tự như thực hiện chọn * từ tên bảng trong truy vấn SQL.

Chúng tôi có thể giải quyết vấn đề này bằng cách sử dụng những gì được gọi là truy vấn CAML . Khi thực hiện một truy vấn CAML, bạn có hai tùy chọn:

  • Nếu bạn chỉ muốn truy vấn một danh sách, bạn có thể sử dụng đối tượng SPQuery.
  • Nếu bạn muốn truy vấn nhiều danh sách trong một tuyển tập trang, thì bạn có thể sử dụng SPSiteDataQuery.

Nói chung, khi bạn đang thực hiện SPSiteDataQuery , bạn đang truy vấn tất cả các danh sách của một loại cụ thể.

Ví dụ: tôi muốn truy vấn tất cả danh sách liên hệ, v.v. SPSiteDataQuery cho phép bạn xác định phạm vi, vì vậy bạn có thể chỉ ra rằng bạn muốn truy vấn toàn bộ tuyển tập trang, một trang riêng lẻ hoặc trang và tất cả các trang con của nó.

Cú pháp cho các truy vấn CAML về cơ bản được mô tả ở định dạng XML và cần một chút thời gian để làm quen với việc xây dựng các loại truy vấn này.

Chúng ta hãy xem một ví dụ đơn giản về Truy vấn CAML. Tại đây, chúng tôi sẽ tạo một truy vấn CAML để truy vấn dữ liệu trong danh sách Tác giả của chúng tôi.

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/")) {
            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"]);
         }
      }
   }
}

Chúng tôi đã sử dụng truy vấn CAML để lấy một số mục. Trong phương thức QueryItems , bạn có thể thấy rằng chúng tôi chỉ truy xuất những mục không phải là Nhân viên.

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


SharePoint – Mô hình đối tượng máy khách (xem thêm)

Để lại một bình luận