Reading data bằng JSOM trong SharePoint

Trong bài viết này mình đi chi tiết các cách read data bằng JSOM trên SharePoint.

Key objects

Read data cụ thể là data gì. Cụ thể ở đây data là web, list, list item trong SharePoint. Ba thứ này gọi chung là key objects

Typical process

Giờ thứ tự process sẽ như thế nào. Trước tiên, bạn phải có 1 client context như sau:

var currentCtx = new SP.ClientContext();

Sau khi có client context rồi, mình phân chia các process thành các phần như sau:

Instantiate objects

Bạn khởi tạo đối tượng. Ví dụ, bạn muốn read data là web thì get đối tượng web, muốn read list thì get list. Cú pháp chung như sau:

myWeb = currentCtx.get_web(); 
lists = myWeb.get_lists();

Tiếp theo bạn phải load objects.

Load objects

currentContext.load(lists); // Load toàn bộ lists - tức list collection

Ở đây, bạn phân tích rằng mình chỉ muốn get properties nào cần dùng, không cần phải get hết. Càng get nhiều data thì performance sẽ càng chậm. Chúng ta sẽ truyền vào tên properties nào cần get. Tuy nhiên, sẽ có 2 approaches để bạn chọn, một là get properties của single object (web object), hai là của object collection (ví dụ như list collection, list item collection). Bạn xem code sau:

currentCtx.load(myWeb, 'Title', 'ServerRelativeUrl'); // Dùng cho single object
// currentCtx.load('lists', 'Include(Title, Id)'); // Dùng cho object collection

Cuối cùng là commit batch

Commit batch

currentCtx.executeQueryAsync(onSucceed, onFail);

Khi thành công, để get properties thì bạn làm như sau:

function onSucceed(){
    console.log('Server relative url: ' + myWeb.get_item('ServerRelativeUrl'));
}

Lưu ý:

  • Properties bắt buộc phải được request trước khi bạn sử dụng. Nếu không bạn sẽ gặp lỗi console là PropertyOrFieldNotInitializedException. Ở phần load object, bạn có thể get hết properties hoặc chỉ get properties nào cần. Tuy nhiên, một vài properties bạn bắt buộc phải khai báo trực tiếp trong load statement cho dù bạn get hết properties. Nghĩa là gì? Dù bạn không chỉ định get properties nào, tức get hết thì một vài properties vẫn không được get.
  • Mặc định chỉ có scalar properties được get nếu bạn không chỉ định get properties nào trong load statement.

Scalar properties là properties return các kiểu: Bool, DateTime, String, Byte, Number, Char, Guid hoặc array của các kiểu trên.

  • Như vậy, ngoài scalar properties trên, client objects và collection bắt buộc phải được khai báo trực tiếp.
Reading data bằng JSOM trong SharePoint
Reading data bằng JSOM trong SharePoint

 

Leave a Reply

Your email address will not be published. Required fields are marked *