sharepoint
जावास्क्रिप्ट क्लाइंट ऑब्जेक्ट मॉडल (JSOM) के साथ काम करना
खोज…
टिप्पणियों
पृष्ठभूमि
जावास्क्रिप्ट ऑब्जेक्ट मॉडल को SharePoint 2010 में पेश किया गया था। यह क्लाइंट के कई ऑब्जेक्ट्स को उजागर करता है जो पहले केवल सर्वर-साइड कोड के माध्यम से या समर्पित वेब सेवाओं के माध्यम से सुलभ थे।
SharePoint पृष्ठों में जावास्क्रिप्ट एम्बेड करना
SharePoint 2013 में आप अपने जावास्क्रिप्ट को स्क्रिप्ट एडिटर वेब पार्ट में डाल सकते हैं।
SharePoint 2010 में आप HTML फ़ाइल से लिंक करने के लिए किसी कंटेंट एडिटर वेब पार्ट की "कंटेंट लिंक" प्रॉपर्टी का उपयोग कर सकते हैं जिसमें आपकी एम्बेडेड स्क्रिप्ट होती है।
वस्तु संदर्भ
SP
नाम स्थान में पाए गए सभी ऑब्जेक्ट्स के निर्माता, विधियाँ और गुण SharePoint 2013 क्लाइंट ऑब्जेक्ट मॉडल संदर्भ में यहाँ दर्ज़ किए गए हैं ।
SharePoint 2010 JavaScript क्लाइंट ऑब्जेक्ट मॉडल संदर्भ यहाँ उपलब्ध है ।
JSOM के अतुल्यकालिक प्रोग्रामिंग पैटर्न
जावास्क्रिप्ट क्लाइंट ऑब्जेक्ट मॉडल का उपयोग करते समय, कोड आमतौर पर निम्न पैटर्न लेता है:
- एक
ClientContext
ऑब्जेक्ट प्राप्त करें। - SharePoint ऑब्जेक्ट मॉडल में सूची, फ़ोल्डर, दृश्य जैसी संस्थाओं का प्रतिनिधित्व करने वाली वस्तुओं को पुनः प्राप्त करने के लिए
ClientContext
ऑब्जेक्ट का उपयोग करें। - वस्तुओं के खिलाफ किए जाने वाले निर्देशों को पंक्तिबद्ध करें। ये निर्देश अभी तक सर्वर पर प्रेषित नहीं किए गए हैं।
-
ClientContext
को यह बताने के लिएload
फ़ंक्शन का उपयोग करें कि आप सर्वर से क्या जानकारी प्राप्त करना चाहते हैं। -
ClientContext
ऑब्जेक्ट कोexecuteQueryAsync
निर्देश भेजने के लिएClientContext
ऑब्जेक्ट को सर्वर पर भेजें, दो कॉलबैक फ़ंक्शन को सफलता या विफलता पर चलाने के लिए। - कॉलबैक फ़ंक्शन में, सर्वर से लौटे परिणामों के साथ काम करें।
वैकल्पिक
JSOM के क्लाइंट-साइड विकल्प में SharePoint की वेब सेवाएँ, REST एंडपॉइंट और .NET क्लाइंट ऑब्जेक्ट मॉडल शामिल हैं ।
पुस्तकालय नाम का उपयोग करके पुस्तकालय सामग्री प्रकार प्राप्त करना
function getContentTypes(site_url,name_of_the_library){
var ctx = new SP.ClientContext(site_url);
var web = ctx.get_web();
list = web.get_lists().getByTitle(name_of_the_library);
// You can include any property of the SP.ContentType object (sp.js), for this example we are just getting the name
ctx.load(list,'ContentTypes.Include(Name)');
ctx.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}
function onQuerySucceeded(sender, args) {
// var list is the one that we used in function "getContentTypes"
var contentTypesEnumerator = (list.get_contentTypes()).getEnumerator();
while (contentTypesEnumerator.moveNext()) {
var contentType = contentTypesEnumerator.get_current();
alert(contentType.get_name());
}
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
किसी सूची में कोई आइटम हटाएं
SP.SOD.executeOrDelayUntilScriptLoaded( function(){ deleteItem(1); }, "sp.js");
function deleteItem(id){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var item = list.getItemById(id);
item.deleteObject();
clientContext.executeQueryAsync(function(){
alert("Item #"+id+" deleted successfully!");
},function(sender,args){alert(args.get_message());});
}
आइटम या फ़ोल्डर बनाना
सूची आइटम बनाना
SP.SOD.executeOrDelayUntilScriptLoaded(createItem,"sp.js");
function createItem(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var newItem = list.addItem();
newItem.set_item("Title","Example Title");
newItem.update();
clientContext.load(newItem); // only needed to retrieve info from newly created item
clientContext.executeQueryAsync(function(){
var itemId = newItem.get_item("ID");
alert("Item #"+itemId+" Created Successfully!");
},function(sender,args){
alert(args.get_message());
});
}
ऊपर दिए गए उदाहरण से पता चलता है कि सूची आइटम निम्नलिखित प्रदर्शन करके बनाया गया है:
- आइटम ऑब्जेक्ट प्राप्त करने के लिए किसी सूची ऑब्जेक्ट की
addItem
विधि को कॉल करें - प्रत्येक फ़ील्ड मान वांछित के रूप में सेट करने के लिए परिणामी सूची आइटम ऑब्जेक्ट पर
set_item
विधि को कॉल करें - सूची आइटम ऑब्जेक्ट पर
update
विधि को इंगित करें कि परिवर्तन किए जाने हैं - पंक्तिबद्ध निर्देशों को निष्पादित करने के लिए क्लाइंट संदर्भ ऑब्जेक्ट के
executeQueryAsync
विधि को कॉल करें
ध्यान दें कि आपको आइटम बनाने के लिए क्लाइंट संदर्भ के load
विधि में नई आइटम ऑब्जेक्ट को पास करने की आवश्यकता नहीं है। यह कदम केवल तभी आवश्यक है जब आप सर्वर से किसी भी आइटम के फ़ील्ड मान को पुनः प्राप्त करना चाहते हैं।
फोल्डर बनाना
फ़ोल्डर बनाना किसी सूची में आइटम जोड़ने के समान है। अंतर यह है कि पहले एक ListItemCreationInformation
ऑब्जेक्ट बनाना होगा और अपनी underlyingObjectType
SP.FileSystemObjectType.folder
गुण SP.FileSystemObjectType.folder
सेट करना SP.FileSystemObjectType.folder
, और नए फ़ोल्डर के वांछित नाम पर इसकी leafName
प्रॉपर्टी।
ऑब्जेक्ट तब फ़ोल्डर बनाने के लिए लाइब्रेरी पर addItem
विधि में एक पैरामीटर के रूप में पारित किया जाता है।
// ...
var itemCreateInfo = new SP.ListItemCreationInformation();
itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
itemCreateInfo.set_leafName(folderName);
var newItem = list.addItem(itemCreateInfo);
// ...
परिवर्तन करने के लिए, ClientContext
ऑब्जेक्ट के executeQueryAsync
विधि को लागू करें जिसके माध्यम से पुस्तकालय तक पहुँचा गया था।
नीचे पूर्ण उदाहरण वर्तमान टाइमस्टैम्प के आधार पर नाम के साथ एक फ़ोल्डर बनाता है, फिर उस फ़ोल्डर को एक मोडल डायलॉग में खोलता है।
SP.SOD.executeOrDelayUntilScriptLoaded(createFolder,"sp.js");
function createFolder(){
var now = new Date();
var timeStamp = now.getYear() + "-" + (now.getMonth()+1) + "-" + now.getDate()
+ "T" + now.getHours()+"_"+now.getMinutes()+" "+now.getSeconds()+"_"+now.getMilliseconds();
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("Library Title");
var itemCreateInfo = new SP.ListItemCreationInformation();
itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
itemCreateInfo.set_leafName(timeStamp);
var newItem = list.addItem(itemCreateInfo);
newItem.update();
clientContext.load(newItem);
var rootFolder = list.get_rootFolder(); // Note: use a list's root folder to determine its server relative URL
clientContext.load(rootFolder);
clientContext.executeQueryAsync(function(){
var itemId = newItem.get_item("ID");
var name = newItem.get_item("FileLeafRef");
SP.UI.ModalDialog.showModalDialog(
{
title: "Folder \""+name+"\" (#"+itemId+") Created Successfully!",
url: rootFolder.get_serverRelativeUrl() + "/" + name
}
);
},function(sender,args){alert(args.get_message());});
}
वर्तमान उपयोगकर्ता जानकारी प्राप्त करें
SP.SOD.executeOrDelayUntilScriptLoaded(showUserInfo,"sp.js");
function showUserInfo(){
var clientContext = new SP.ClientContext();
var user = clientContext.get_web().get_currentUser();
clientContext.load(user);
clientContext.executeQueryAsync(function(){
var details = "ID: "+user.get_id()+"\n"+
"Title: "+user.get_title()+"\n"+
"Login: "+user.get_loginName()+"\n"+
"Email: "+user.get_email();
alert(details);
},function(sender,args){alert(args.get_message());})
}
आईडी द्वारा एक सूची आइटम प्राप्त करें
SP.SOD.executeOrDelayUntilScriptLoaded(myFunction,"sp.js");
function myFunction(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var item = list.getItemById(1); // get item with ID == 1
clientContext.load(item);
clientContext.executeQueryAsync(
function(){ // onSuccess
var title = item.get_item("Title");
alert(title);
},
function(sender,args){ // onError
alert(args.get_message());
}
);
}
CAML क्वेरी द्वारा सूची आइटम प्राप्त करें
मूल उदाहरण
आइटम पुनर्प्राप्त करने के लिए CAML क्वेरी निर्दिष्ट करने के लिए SP.CamlQuery ऑब्जेक्ट की set_viewXml
विधि का उपयोग करें।
SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"core.js");
function showListItems(){
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(
"<View><Query>" +
"<Where>" +
"<Eq><FieldRef Name=\"Title\"/><Value Type=\"Text\">Value</Value></Eq>" +
"</Where>" +
"<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>"+
//"<RowLimit>5000</RowLimit>" +
"</View>");
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(function(){
var itemArray = [];
var itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
var item = itemEnumerator.get_current();
var id = item.get_item("ID");
var title = item.get_item("Title");
itemArray.push(id + ": " + title);
}
alert("ID: Title\n"+itemArray.join("\n"));
},function(sender,args){alert(args.get_message());});
}
CAML क्वेरी के परिणामों को पेजिंग करना
आप प्रत्येक क्वेरी के साथ परिणामों के केवल सबसेट को पुनः प्राप्त करने के लिए CAML क्वेरी में RowLimit
तत्व का लाभ उठा सकते हैं।
का प्रयोग करें get_listItemCollectionPosition
वर्तमान स्थिति को पुनः प्राप्त करने के लिए सूची आइटम संग्रह की विधि है, तो एक SP.CamlQuery वस्तु के दशक में पैरामीटर के रूप में उस मान का उपयोग set_listItemCollectionPosition
विधि परिणामों के अगले बैच पुनः प्राप्त करने के।
SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"sp.js");
function showListItems(){
var itemArray = [];
var clientContext = new SP.ClientContext();
var list = clientContext.get_web().get_lists().getByTitle("List Title");
var viewXml =
"<View><Query>" +
"<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>"+
"<RowLimit>1</RowLimit>" +
"</View>";
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml(viewXml);
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(loadResults,showError);
function loadResults(){
var resultsFound = false;
var itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
var item = itemEnumerator.get_current();
var id = item.get_item("ID");
var title = item.get_item("Title");
itemArray.push(id + ": " + title);
}
var pos = items.get_listItemCollectionPosition();// <- get position
if(pos !== null){ // <-- position is null when no more results are returned
if(confirm("Results so far: \nID: Title\n"+itemArray.join("\n"))){
camlQuery = new SP.CamlQuery();
camlQuery.set_listItemCollectionPosition(pos);// <- set position for next batch
camlQuery.set_viewXml(viewXml);
items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(loadResults,showError);
}
}else{
alert("Total Results: \nID: Title\n"+itemArray.join("\n")); // <- display when no more results
}
}
function showError(sender,args){
alert(args.get_message());
}
}