最近一年以来,断断续续的做SharePoint的项目,主要是使用JavaScript进行开发。由于对SharePoint不是很熟练,导致每次写代码都得去Stack Overflow上去找代码。现将经常使用的相关代码总结如下,以留自己日后参考。
1.list item的创建:
function createListItem(listTitle, data, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current(),
list = ctx.get_web().get_lists().getByTitle(listTitle),
itemCreateInfo = new SP.ListItemCreationInformation(),
newItem = list.addItem(itemCreateInfo),
p;
for (p in data) {
if (data.hasOwnProperty(p)) {
newItem.set_item(p, data[p]);
}
}
newItem.update();
ctx.load(newItem);
ctx.executeQueryAsync(function () {
callback({
success: true,
errorMessage: "",
listItemId: newItem.get_id()
});
}, function (sender, args) {
newLogJSOMQueryError(sender, args, " createListIteam:" + listTitle);
callback({
success: false,
errorMessage: args.get_message(),
listItemId: -1
});
});
}, "SP.js");
}
2. list item的更新:
function updateListItem(listTitle, data, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current(),
list = ctx.get_web().get_lists().getByTitle(listTitle),
listItem = list.getItemById(data.id),
p;
for (p in data) {
if (data.hasOwnProperty(p) && p !== "id") {
listItem.set_item(p, data[p]);
}
}
listItem.update();
ctx.executeQueryAsync(function () {
callback({
success: true,
errorMessage: "",
listItemId: data.id
});
}, function (sender, args) {
newLogJSOMQueryError(sender, args, "update " + listTitle);
callback({
success: false,
errorMessage: args.get_message(),
listItemId: data.id
});
});
}, "SP.js");
}
3. list item的删除:
function deleteListItems(listTitle, ids, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current(),
list = ctx.get_web().get_lists().getByTitle(listTitle),
listItem, i;
if (!isArray(ids)) {
ids = [ids];
}
for (i = 0; i < ids.length; i++) {
listItem = list.getItemById(ids[i]);
listItem.deleteObject();
}
ctx.executeQueryAsync(function () {
callback({
success: true,
errorMessage: "",
listItemIds: ids
});
}, function (sender, args) {
newLogJSOMQueryError(sender, args, "delete " + listTitle + ",its id:" + ids);
callback({
success: false,
errorMessage: args.get_message(),
listItemIds: ids
});
});
}, "SP.js");
}
4. 根据list item的id查询list item的信息:
function getListItemById(listTitle, id, includeFields, callback) {
var queryOption = {
listTitle: listTitle,
includeFields: includeFields,
camlWhere: "<Where><Eq><FieldRef Name='ID' /><Value Type='Counter'>" + id.toString() + "</Value></Eq></Where>"
};
getListItems(queryOption, function (listItems) {
callback(listItems.length > 0 ? listItems[0] : null);
});
}
5. 根据userid查询user信息:
function getUser(userId, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current(),
web = ctx.get_web(),
user;
if (typeof userId === "number") {
user = userId > 0 ? web.getUserById(userId) : web.get_currentUser();
} else if (typeof userId === "object" && userId !== null && userId instanceof SP.FieldUserValue) {
user = web.getUserById(userId.get_lookupId());
} else {
user = web.get_currentUser();
}
ctx.load(user);
ctx.executeQueryAsync(function () {
user.id = user.get_id();
user.email = user.get_email();
user.isSiteAdmin = user.get_isSiteAdmin();
user.isHiddenInUI = user.get_isHiddenInUI();
user.loginName = user.get_loginName();
user.principalType = user.get_principalType();
user.title = user.get_title();
callback(user);
}, function (sender, args) {
logJSOMQueryError(sender, args);
callback(null);
});
}, "SP.js");
}
6.根据文件名,查询该文件是否存在于文档库:
function isExistByFilename(filename, libraryName) {
var dfd = $.Deferred();
var clientContext = SP.ClientContext.get_current();
var url = clientContext.get_url() + "/" + libraryName + "/" + filename;
var oweb = clientContext.get_web();
var ofile = oweb.getFileByServerRelativeUrl(url);
clientContext.load(ofile);
clientContext.executeQueryAsync(
Function.createDelegate(this, function () {
/* File exists! */
//alert(filename + " File exists in SharePoint");
dfd.reject(filename)
}),
Function.createDelegate(this, function (sender, args) {
/* File doesn't exist. */
dfd.resolve();
})
);
return dfd;
}
7.得到list item的附件:
function getAttachmentFiles(listTitle, listItemId, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current(),
web = ctx.get_web(),
list = web.get_lists().getByTitle(listTitle),
listRootFolder = list.get_rootFolder(),
listRootFolderUrl, attachmentFolderUrl, attachmentFolder, files,
result = [];
ctx.load(listRootFolder, "ServerRelativeUrl");
ctx.executeQueryAsync(function () {
listRootFolderUrl = listRootFolder.get_serverRelativeUrl();
attachmentFolderUrl = listRootFolderUrl + "/Attachments/" + listItemId.toString();
attachmentFolder = web.getFolderByServerRelativeUrl(attachmentFolderUrl);
files = attachmentFolder.get_files();
ctx.load(files);
ctx.executeQueryAsync(function () {
files = mapJsomCollectionToArray(files);
mapArray(files, function (file) {
result.push({
name: file.get_name(),
serverRelativeUrl: file.get_serverRelativeUrl()
});
});
callback(result);
}, function (sender, args) {
logJSOMQueryError(sender, args);
callback([]);
});
}, function (sender, args) {
logJSOMQueryError(sender, args);
callback([]);
});
}, "SP.js");
}
8.根据email地址判断user是否合法:
function isUserValid(emailAddress, callback) {
ExecuteOrDelayUntilScriptLoaded(function () {
var ctx = SP.ClientContext.get_current();
var theUser = ctx.get_web().ensureUser(emailAddress);
ctx.load(theUser);
ctx.executeQueryAsync(function () {
console.log(theUser.get_title());
callback({ "isValid": true });
}, function (sender, args) {
logJSOMQueryError(sender, args);
callback({ "isValid": false });
});
}, "SP.js");
}
9.获得SharePoint站点的角色:
function getRole(web, typeNameOrName) {
switch (typeNameOrName) {
case "administrator":
return web.get_roleDefinitions().getByType(SP.RoleType.administrator);
case "webDesigner":
return web.get_roleDefinitions().getByType(SP.RoleType.webDesigner);
case "contributor":
return web.get_roleDefinitions().getByType(SP.RoleType.contributor);
case "reader":
return web.get_roleDefinitions().getByType(SP.RoleType.reader);
case "guest":
return web.get_roleDefinitions().getByType(SP.RoleType.guest);
case "none":
return web.get_roleDefinitions().getByType(SP.RoleType.none);
default:
return web.get_roleDefinitions().getByName(typeNameOrName);
}
}
10.显示dialog:
i).
function showModalDialog(dialogOptions) {
ExecuteOrDelayUntilScriptLoaded(function () {
SP.UI.ModalDialog.showModalDialog(dialogOptions);
}, "SP.js");
}
Ii)
//
// This function will ensure only one dialog shown at same time.
//
var showWorkingOnItDialog = (function () {
var dialogTokens = [],
spDialog = null;
return function (callback) {
var token = newGuid(),
result = {
close: closeDialog
};
dialogTokens.push(token);
if (dialogTokens.length === 1) {
ExecuteOrDelayUntilScriptLoaded(function () {
spDialog = SP.UI.ModalDialog.showWaitScreenWithNoClose(SP.Res.dialogLoading15);
if (typeof callback === "function") {
callback(result);
}
}, "SP.js");
} else {
if (typeof callback === "function") {
callback(result);
}
}
function closeDialog() {
var tokenIndex = KBUtils.inArray(dialogTokens, token);
if (tokenIndex !== -1) {
dialogTokens.splice(tokenIndex, 1);
}
if (dialogTokens.length === 0 && spDialog !== null) {
spDialog.close();
spDialog = null;
}
}
return result;
};
}());
function newGuid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
function inArray(array, matcherOrItem) {
var i;
for (i = 0; i < array.length; i++) {
if (typeof matcherOrItem === "function") {
if (matcherOrItem(array[i], i) === true) {
return i;
}
} else {
if (array[i] === matcherOrItem) {
return i;
}
}
}
return -1;
}
11.关闭dialog:
function closeLastDialog(dialogResult, returnValue) {
ExecuteOrDelayUntilScriptLoaded(function () {
SP.UI.ModalDialog.commonModalDialogClose(dialogResult, returnValue);
}, "SP.js");
12.如何操作workflow:
1.新建一个文件定义workflow模块:
define(function (require) {
"use strict";
var $ = require("jquery"),
KBUtils = require("KBUtils"),
SPDataReader = require("util/SPDataReader"),
SPServicesMin = require("lib/jquery.SPServices.min"),
AppConfig = require("AppConfig");
function LoadScripts() {
SP.SOD.executeFunc("sp.js", "SP.ClientContext", function () {
SP.SOD.registerSod('sp.workflowservices.js', SP.Utilities.Utility.getLayoutsPageUrl('sp.workflowservices.js'));
//SP.SOD.executeFunc('sp.workflowservices.js', "SP.WorkflowServices.WorkflowServicesManager", StartArchiveWorkflow);
})
};
function startWorkflow(params) {
// we need to make sure that SP.ClientContext is loaded
if (SP.ClientContext == undefined) {
setTimeout(function () { startWorkflow(params) }, 100);
return
}
params.after = params.after || (function () { });
if (!params.workflowName) { alert("Please provide the workflow name!"); return; }
function onQuerySucceeded() {
var enumerator = workflows.getEnumerator();
while (enumerator.moveNext()) {
var workflow = enumerator.get_current();
if (workflow.get_name() == params.workflowName) {
var url = 'https://' + window.location.hostname + item.get_item("FileRef");
var templateId = '{' + workflow.get_id().toString() + '}';
var workflowParameters = "<root />";
if (params.parameters) {
var p;
if (params.parameters.length == undefined) p = [params.parameters];
p = params.parameters.slice(0);
workflowParameters = "<Data>";
for (var i = 0; i < p.length; i++)
workflowParameters += "<" + p[i].Name + ">" + p[i].Value + "</" + p[i].Name + ">";
workflowParameters += "</Data>";
}
// trigger the workflow
jQuery().SPServices({
operation: "StartWorkflow",
async: true,
item: url,
templateId: templateId,
workflowParameters: workflowParameters,
completefunc: params.after
});
break;
}
}
}
function onQueryFailed() { throw "Error with Start workflow" }
//var guid = new SP.Guid(__GlobalConfig.listID['Requested']);
var context = SP.ClientContext.get_current();
var lists = context.get_web().get_lists();
var list = lists.getByTitle(params.listName);
var item = list.getItemById(params.itemID);
var file = item.get_file();
context.load(list);
context.load(item);
var workflows = list.get_workflowAssociations();
context.load(workflows);
context.executeQueryAsync(onQuerySucceeded, onQueryFailed);
};
LoadScripts();
return {
startWorkflow: startWorkflow
};
});
2.使用workflow:
Workflow = require(定义的workflow模块),
Workflow.startWorkflow({
listName: AppConfig.SPLists.ProposalContentLibrary,
itemID: itemID,
workflowName: "migrate from general information",
parameters: [{ Name: "GeneralInfoID", Value: viewModel.generalInformationBindModel().id }],
after: function () {
index++;
if (index == len) {
//onSuccess();
workingDialog.close();
alert("updated successfully!");
document.location.href = 'SubmitContent.aspx';
}
}
});
这一些都是平常用的比较多的,尽管写的不详细,但我想开发过SharePoint的应该一看就知道代码的含义。