SharePoint之JavaScript客户端对象模型

本文总结了一年来使用JavaScript客户端对象模型在SharePoint项目中的实践经验,包括List Item的创建,常见代码示例,旨在为日后开发提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近一年以来,断断续续的做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的应该一看就知道代码的含义。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值