UNPKG

spservices

Version:

Work with SharePoint's Web Services using jQuery

1,134 lines (1,068 loc) 219 kB
/* * SPServices - Work with SharePoint's Web Services using jQuery * Version 2014.02 * @requires jQuery v1.8 or greater - jQuery 1.10.x+ recommended * * Copyright (c) 2009-2014 Sympraxis Consulting LLC * Examples and docs at: * http://spservices.codeplex.com * Licensed under the MIT license: * http://www.opensource.org/licenses/mit-license.php */ /* * @description Work with SharePoint's Web Services using jQuery * @type jQuery * @name SPServices * @category Plugins/SPServices * @author Sympraxis Consulting LLC/marc.anderson@sympraxisconsulting.com */ /* jshint undef: true */ /* global L_Menu_BaseUrl, _spUserId, _spPageContextInfo, GipAddSelectedItems, GipRemoveSelectedItems, GipGetGroupData */ (function ($) { "use strict"; // Version info var VERSION = "2014.02"; // TODO: Update version // String constants // General var SLASH = "/"; var spDelim = ";#"; var TXTColumnNotFound = "Column not found on page"; var SCHEMASharePoint = "http://schemas.microsoft.com/sharepoint"; var multiLookupPrefix = "MultiLookupPicker"; var multiLookupPrefix2013 = "MultiLookup"; // Dropdown Types var dropdownType = { simple: "S", complex: "C", multiSelect: "M" }; // Known list field types - See: http://msdn.microsoft.com/en-us/library/office/microsoft.sharepoint.spfieldtype(v=office.15).aspx var spListFieldTypes = [ "Integer", "Text", "Note", "DateTime", "Counter", "Choice", "Lookup", "Boolean", "Number", "Currency", "URL", // "Computed", // NEW // "Threading", // NEW // "Guid", // NEW "MultiChoice", // "GridChoice", // NEW "Calculated", "File", "Attachments", "User", // "Recurrence", // NEW // "CrossProjectLink", // NEW "ModStat", "ContentTypeId", // "PageSeparator", // NEW // "ThreadIndex", // NEW "WorkflowStatus", // NEW // "AllDayEvent", // NEW // "WorkflowEventType", // NEW // "Geolocation", // NEW // "OutcomeChoice", // NEW // Also seen "UserMulti", // Multiselect users "LookupMulti", // Multi-select lookup "datetime", // Calculated date/time result "float", // Calculated float "Calc" // General calculated ]; // Caching var promisesCache = {}; // Web Service names var ALERTS = "Alerts"; var AUTHENTICATION = "Authentication"; var COPY = "Copy"; var FORMS = "Forms"; var LISTS = "Lists"; var MEETINGS = "Meetings"; var OFFICIALFILE = "OfficialFile"; var PEOPLE = "People"; var PERMISSIONS = "Permissions"; var PUBLISHEDLINKSSERVICE = "PublishedLinksService"; var SEARCH = "Search"; var SHAREPOINTDIAGNOSTICS = "SharePointDiagnostics"; var SITEDATA = "SiteData"; var SITES = "Sites"; var SOCIALDATASERVICE = "SocialDataService"; var SPELLCHECK = "SpellCheck"; var TAXONOMYSERVICE = "TaxonomyClientService"; var USERGROUP = "usergroup"; var USERPROFILESERVICE = "UserProfileService"; var VERSIONS = "Versions"; var VIEWS = "Views"; var WEBPARTPAGES = "WebPartPages"; var WEBS = "Webs"; var WORKFLOW = "Workflow"; // Global variables var currentContext = new SPServicesContext(); // Variable to hold the current context as we figure it out var i = 0; // Generic loop counter var encodeOptionList = ["listName", "description"]; // Used to encode options which may contain special characters // Array to store Web Service information // WSops.OpName = [WebService, needs_SOAPAction]; // OpName The name of the Web Service operation -> These names are unique // WebService The name of the WebService this operation belongs to // needs_SOAPAction Boolean indicating whether the operatio needs to have the SOAPAction passed in the setRequestHeaderfunction. // true if the operation does a write, else false var WSops = []; WSops.GetAlerts = [ALERTS, false]; WSops.DeleteAlerts = [ALERTS, true]; WSops.Mode = [AUTHENTICATION, false]; WSops.Login = [AUTHENTICATION, false]; WSops.CopyIntoItems = [COPY, true]; WSops.CopyIntoItemsLocal = [COPY, true]; WSops.GetItem = [COPY, false]; WSops.GetForm = [FORMS, false]; WSops.GetFormCollection = [FORMS, false]; WSops.AddAttachment = [LISTS, true]; WSops.AddDiscussionBoardItem = [LISTS, true]; WSops.AddList = [LISTS, true]; WSops.AddListFromFeature = [LISTS, true]; WSops.ApplyContentTypeToList = [LISTS, true]; WSops.CheckInFile = [LISTS, true]; WSops.CheckOutFile = [LISTS, true]; WSops.CreateContentType = [LISTS, true]; WSops.DeleteAttachment = [LISTS, true]; WSops.DeleteContentType = [LISTS, true]; WSops.DeleteContentTypeXmlDocument = [LISTS, true]; WSops.DeleteList = [LISTS, true]; WSops.GetAttachmentCollection = [LISTS, false]; WSops.GetList = [LISTS, false]; WSops.GetListAndView = [LISTS, false]; WSops.GetListCollection = [LISTS, false]; WSops.GetListContentType = [LISTS, false]; WSops.GetListContentTypes = [LISTS, false]; WSops.GetListItemChanges = [LISTS, false]; WSops.GetListItemChangesSinceToken = [LISTS, false]; WSops.GetListItems = [LISTS, false]; WSops.GetVersionCollection = [LISTS, false]; WSops.UndoCheckOut = [LISTS, true]; WSops.UpdateContentType = [LISTS, true]; WSops.UpdateContentTypesXmlDocument = [LISTS, true]; WSops.UpdateContentTypeXmlDocument = [LISTS, true]; WSops.UpdateList = [LISTS, true]; WSops.UpdateListItems = [LISTS, true]; WSops.AddMeeting = [MEETINGS, true]; WSops.CreateWorkspace = [MEETINGS, true]; WSops.RemoveMeeting = [MEETINGS, true]; WSops.SetWorkSpaceTitle = [MEETINGS, true]; WSops.GetRecordRouting = [OFFICIALFILE, false]; WSops.GetRecordRoutingCollection = [OFFICIALFILE, false]; WSops.GetServerInfo = [OFFICIALFILE, false]; WSops.SubmitFile = [OFFICIALFILE, true]; WSops.ResolvePrincipals = [PEOPLE, true]; WSops.SearchPrincipals = [PEOPLE, false]; WSops.AddPermission = [PERMISSIONS, true]; WSops.AddPermissionCollection = [PERMISSIONS, true]; WSops.GetPermissionCollection = [PERMISSIONS, true]; WSops.RemovePermission = [PERMISSIONS, true]; WSops.RemovePermissionCollection = [PERMISSIONS, true]; WSops.UpdatePermission = [PERMISSIONS, true]; WSops.GetLinks = [PUBLISHEDLINKSSERVICE, true]; WSops.GetPortalSearchInfo = [SEARCH, false]; WSops.GetQuerySuggestions = [SEARCH, false]; WSops.GetSearchMetadata = [SEARCH, false]; WSops.Query = [SEARCH, false]; WSops.QueryEx = [SEARCH, false]; WSops.Registration = [SEARCH, false]; WSops.Status = [SEARCH, false]; WSops.SendClientScriptErrorReport = [SHAREPOINTDIAGNOSTICS, true]; WSops.GetAttachments = [SITEDATA, false]; WSops.EnumerateFolder = [SITEDATA, false]; WSops.SiteDataGetList = [SITEDATA, false]; WSops.SiteDataGetListCollection = [SITEDATA, false]; WSops.SiteDataGetSite = [SITEDATA, false]; WSops.SiteDataGetSiteUrl = [SITEDATA, false]; WSops.SiteDataGetWeb = [SITEDATA, false]; WSops.CreateWeb = [SITES, true]; WSops.DeleteWeb = [SITES, true]; WSops.GetSite = [SITES, false]; WSops.GetSiteTemplates = [SITES, false]; WSops.AddComment = [SOCIALDATASERVICE, true]; WSops.AddTag = [SOCIALDATASERVICE, true]; WSops.AddTagByKeyword = [SOCIALDATASERVICE, true]; WSops.CountCommentsOfUser = [SOCIALDATASERVICE, false]; WSops.CountCommentsOfUserOnUrl = [SOCIALDATASERVICE, false]; WSops.CountCommentsOnUrl = [SOCIALDATASERVICE, false]; WSops.CountRatingsOnUrl = [SOCIALDATASERVICE, false]; WSops.CountTagsOfUser = [SOCIALDATASERVICE, false]; WSops.DeleteComment = [SOCIALDATASERVICE, true]; WSops.DeleteRating = [SOCIALDATASERVICE, true]; WSops.DeleteTag = [SOCIALDATASERVICE, true]; WSops.DeleteTagByKeyword = [SOCIALDATASERVICE, true]; WSops.DeleteTags = [SOCIALDATASERVICE, true]; WSops.GetAllTagTerms = [SOCIALDATASERVICE, false]; WSops.GetAllTagTermsForUrlFolder = [SOCIALDATASERVICE, false]; WSops.GetAllTagUrls = [SOCIALDATASERVICE, false]; WSops.GetAllTagUrlsByKeyword = [SOCIALDATASERVICE, false]; WSops.GetCommentsOfUser = [SOCIALDATASERVICE, false]; WSops.GetCommentsOfUserOnUrl = [SOCIALDATASERVICE, false]; WSops.GetCommentsOnUrl = [SOCIALDATASERVICE, false]; WSops.GetRatingAverageOnUrl = [SOCIALDATASERVICE, false]; WSops.GetRatingOfUserOnUrl = [SOCIALDATASERVICE, false]; WSops.GetRatingOnUrl = [SOCIALDATASERVICE, false]; WSops.GetRatingsOfUser = [SOCIALDATASERVICE, false]; WSops.GetRatingsOnUrl = [SOCIALDATASERVICE, false]; WSops.GetSocialDataForFullReplication = [SOCIALDATASERVICE, false]; WSops.GetTags = [SOCIALDATASERVICE, true]; WSops.GetTagsOfUser = [SOCIALDATASERVICE, true]; WSops.GetTagTerms = [SOCIALDATASERVICE, true]; WSops.GetTagTermsOfUser = [SOCIALDATASERVICE, true]; WSops.GetTagTermsOnUrl = [SOCIALDATASERVICE, true]; WSops.GetTagUrlsOfUser = [SOCIALDATASERVICE, true]; WSops.GetTagUrlsOfUserByKeyword = [SOCIALDATASERVICE, true]; WSops.GetTagUrls = [SOCIALDATASERVICE, true]; WSops.GetTagUrlsByKeyword = [SOCIALDATASERVICE, true]; WSops.SetRating = [SOCIALDATASERVICE, true]; WSops.UpdateComment = [SOCIALDATASERVICE, true]; WSops.SpellCheck = [SPELLCHECK, false]; // Taxonomy Service Calls // Updated 2011.01.27 by Thomas McMillan WSops.AddTerms = [TAXONOMYSERVICE, true]; WSops.GetChildTermsInTerm = [TAXONOMYSERVICE, false]; WSops.GetChildTermsInTermSet = [TAXONOMYSERVICE, false]; WSops.GetKeywordTermsByGuids = [TAXONOMYSERVICE, false]; WSops.GetTermsByLabel = [TAXONOMYSERVICE, false]; WSops.GetTermSets = [TAXONOMYSERVICE, false]; WSops.AddGroup = [USERGROUP, true]; WSops.AddGroupToRole = [USERGROUP, true]; WSops.AddRole = [USERGROUP, true]; WSops.AddRoleDef = [USERGROUP, true]; WSops.AddUserCollectionToGroup = [USERGROUP, true]; WSops.AddUserCollectionToRole = [USERGROUP, true]; WSops.AddUserToGroup = [USERGROUP, true]; WSops.AddUserToRole = [USERGROUP, true]; WSops.GetAllUserCollectionFromWeb = [USERGROUP, false]; WSops.GetGroupCollection = [USERGROUP, false]; WSops.GetGroupCollectionFromRole = [USERGROUP, false]; WSops.GetGroupCollectionFromSite = [USERGROUP, false]; WSops.GetGroupCollectionFromUser = [USERGROUP, false]; WSops.GetGroupCollectionFromWeb = [USERGROUP, false]; WSops.GetGroupInfo = [USERGROUP, false]; WSops.GetRoleCollection = [USERGROUP, false]; WSops.GetRoleCollectionFromGroup = [USERGROUP, false]; WSops.GetRoleCollectionFromUser = [USERGROUP, false]; WSops.GetRoleCollectionFromWeb = [USERGROUP, false]; WSops.GetRoleInfo = [USERGROUP, false]; WSops.GetRolesAndPermissionsForCurrentUser = [USERGROUP, false]; WSops.GetRolesAndPermissionsForSite = [USERGROUP, false]; WSops.GetUserCollection = [USERGROUP, false]; WSops.GetUserCollectionFromGroup = [USERGROUP, false]; WSops.GetUserCollectionFromRole = [USERGROUP, false]; WSops.GetUserCollectionFromSite = [USERGROUP, false]; WSops.GetUserCollectionFromWeb = [USERGROUP, false]; WSops.GetUserInfo = [USERGROUP, false]; WSops.GetUserLoginFromEmail = [USERGROUP, false]; WSops.RemoveGroup = [USERGROUP, true]; WSops.RemoveGroupFromRole = [USERGROUP, true]; WSops.RemoveRole = [USERGROUP, true]; WSops.RemoveUserCollectionFromGroup = [USERGROUP, true]; WSops.RemoveUserCollectionFromRole = [USERGROUP, true]; WSops.RemoveUserCollectionFromSite = [USERGROUP, true]; WSops.RemoveUserFromGroup = [USERGROUP, true]; WSops.RemoveUserFromRole = [USERGROUP, true]; WSops.RemoveUserFromSite = [USERGROUP, true]; WSops.RemoveUserFromWeb = [USERGROUP, true]; WSops.UpdateGroupInfo = [USERGROUP, true]; WSops.UpdateRoleDefInfo = [USERGROUP, true]; WSops.UpdateRoleInfo = [USERGROUP, true]; WSops.UpdateUserInfo = [USERGROUP, true]; WSops.AddColleague = [USERPROFILESERVICE, true]; WSops.AddLink = [USERPROFILESERVICE, true]; WSops.AddMembership = [USERPROFILESERVICE, true]; WSops.AddPinnedLink = [USERPROFILESERVICE, true]; WSops.CreateMemberGroup = [USERPROFILESERVICE, true]; WSops.CreateUserProfileByAccountName = [USERPROFILESERVICE, true]; WSops.GetCommonColleagues = [USERPROFILESERVICE, false]; WSops.GetCommonManager = [USERPROFILESERVICE, false]; WSops.GetCommonMemberships = [USERPROFILESERVICE, false]; WSops.GetInCommon = [USERPROFILESERVICE, false]; WSops.GetPropertyChoiceList = [USERPROFILESERVICE, false]; WSops.GetUserColleagues = [USERPROFILESERVICE, false]; WSops.GetUserLinks = [USERPROFILESERVICE, false]; WSops.GetUserMemberships = [USERPROFILESERVICE, false]; WSops.GetUserPinnedLinks = [USERPROFILESERVICE, false]; WSops.GetUserProfileByGuid = [USERPROFILESERVICE, false]; WSops.GetUserProfileByIndex = [USERPROFILESERVICE, false]; WSops.GetUserProfileByName = [USERPROFILESERVICE, false]; WSops.GetUserProfileCount = [USERPROFILESERVICE, false]; WSops.GetUserProfileSchema = [USERPROFILESERVICE, false]; WSops.GetUserPropertyByAccountName = [USERPROFILESERVICE, false]; WSops.ModifyUserPropertyByAccountName = [USERPROFILESERVICE, true]; WSops.RemoveAllColleagues = [USERPROFILESERVICE, true]; WSops.RemoveAllLinks = [USERPROFILESERVICE, true]; WSops.RemoveAllMemberships = [USERPROFILESERVICE, true]; WSops.RemoveAllPinnedLinks = [USERPROFILESERVICE, true]; WSops.RemoveColleague = [USERPROFILESERVICE, true]; WSops.RemoveLink = [USERPROFILESERVICE, true]; WSops.RemoveMembership = [USERPROFILESERVICE, true]; WSops.RemovePinnedLink = [USERPROFILESERVICE, true]; WSops.UpdateColleaguePrivacy = [USERPROFILESERVICE, true]; WSops.UpdateLink = [USERPROFILESERVICE, true]; WSops.UpdateMembershipPrivacy = [USERPROFILESERVICE, true]; WSops.UpdatePinnedLink = [USERPROFILESERVICE, true]; WSops.DeleteAllVersions = [VERSIONS, true]; WSops.DeleteVersion = [VERSIONS, true]; WSops.GetVersions = [VERSIONS, false]; WSops.RestoreVersion = [VERSIONS, true]; WSops.AddView = [VIEWS, true]; WSops.DeleteView = [VIEWS, true]; WSops.GetView = [VIEWS, false]; WSops.GetViewHtml = [VIEWS, false]; WSops.GetViewCollection = [VIEWS, false]; WSops.UpdateView = [VIEWS, true]; WSops.UpdateViewHtml = [VIEWS, true]; WSops.AddWebPart = [WEBPARTPAGES, true]; WSops.AddWebPartToZone = [WEBPARTPAGES, true]; WSops.DeleteWebPart = [WEBPARTPAGES, true]; WSops.GetWebPart2 = [WEBPARTPAGES, false]; WSops.GetWebPartPage = [WEBPARTPAGES, false]; WSops.GetWebPartProperties = [WEBPARTPAGES, false]; WSops.GetWebPartProperties2 = [WEBPARTPAGES, false]; WSops.SaveWebPart2 = [WEBPARTPAGES, true]; WSops.CreateContentType = [WEBS, true]; WSops.GetColumns = [WEBS, false]; WSops.GetContentType = [WEBS, false]; WSops.GetContentTypes = [WEBS, false]; WSops.GetCustomizedPageStatus = [WEBS, false]; WSops.GetListTemplates = [WEBS, false]; WSops.GetObjectIdFromUrl = [WEBS, false]; // 2010 WSops.GetWeb = [WEBS, false]; WSops.GetWebCollection = [WEBS, false]; WSops.GetAllSubWebCollection = [WEBS, false]; WSops.UpdateColumns = [WEBS, true]; WSops.UpdateContentType = [WEBS, true]; WSops.WebUrlFromPageUrl = [WEBS, false]; WSops.AlterToDo = [WORKFLOW, true]; WSops.ClaimReleaseTask = [WORKFLOW, true]; WSops.GetTemplatesForItem = [WORKFLOW, false]; WSops.GetToDosForItem = [WORKFLOW, false]; WSops.GetWorkflowDataForItem = [WORKFLOW, false]; WSops.GetWorkflowTaskData = [WORKFLOW, false]; WSops.StartWorkflow = [WORKFLOW, true]; // Set up SOAP envelope var SOAPEnvelope = {}; SOAPEnvelope.header = "<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body>"; SOAPEnvelope.footer = "</soap:Body></soap:Envelope>"; SOAPEnvelope.payload = ""; var SOAPAction; // Main function, which calls SharePoint's Web Services directly. $.fn.SPServices = function (options) { // If there are no options passed in, use the defaults. Extend replaces each default with the passed option. var opt = $.extend({}, $.fn.SPServices.defaults, options); // Encode options which may contain special character, esp. ampersand for (var i = 0; i < encodeOptionList.length; i++) { if (typeof opt[encodeOptionList[i]] === "string") { opt[encodeOptionList[i]] = encodeXml(opt[encodeOptionList[i]]); } } // Put together operation header and SOAPAction for the SOAP call based on which Web Service we're calling SOAPEnvelope.opheader = "<" + opt.operation + " "; switch (WSops[opt.operation][0]) { case ALERTS: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/2002/1/alerts/' >"; SOAPAction = SCHEMASharePoint + "/soap/2002/1/alerts/"; break; case MEETINGS: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/meetings/' >"; SOAPAction = SCHEMASharePoint + "/soap/meetings/"; break; case OFFICIALFILE: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/recordsrepository/' >"; SOAPAction = SCHEMASharePoint + "/soap/recordsrepository/"; break; case PERMISSIONS: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/directory/' >"; SOAPAction = SCHEMASharePoint + "/soap/directory/"; break; case PUBLISHEDLINKSSERVICE: SOAPEnvelope.opheader += "xmlns='http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService/' >"; SOAPAction = "http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService/"; break; case SEARCH: SOAPEnvelope.opheader += "xmlns='urn:Microsoft.Search' >"; SOAPAction = "urn:Microsoft.Search/"; break; case SHAREPOINTDIAGNOSTICS: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/diagnostics/' >"; SOAPAction = "http://schemas.microsoft.com/sharepoint/diagnostics/"; break; case SOCIALDATASERVICE: SOAPEnvelope.opheader += "xmlns='http://microsoft.com/webservices/SharePointPortalServer/SocialDataService' >"; SOAPAction = "http://microsoft.com/webservices/SharePointPortalServer/SocialDataService/"; break; case SPELLCHECK: SOAPEnvelope.opheader += "xmlns='http://schemas.microsoft.com/sharepoint/publishing/spelling/' >"; SOAPAction = "http://schemas.microsoft.com/sharepoint/publishing/spelling/SpellCheck"; break; case TAXONOMYSERVICE: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/taxonomy/soap/' >"; SOAPAction = SCHEMASharePoint + "/taxonomy/soap/"; break; case USERGROUP: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/directory/' >"; SOAPAction = SCHEMASharePoint + "/soap/directory/"; break; case USERPROFILESERVICE: SOAPEnvelope.opheader += "xmlns='http://microsoft.com/webservices/SharePointPortalServer/UserProfileService' >"; SOAPAction = "http://microsoft.com/webservices/SharePointPortalServer/UserProfileService/"; break; case WEBPARTPAGES: SOAPEnvelope.opheader += "xmlns='http://microsoft.com/sharepoint/webpartpages' >"; SOAPAction = "http://microsoft.com/sharepoint/webpartpages/"; break; case WORKFLOW: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/workflow/' >"; SOAPAction = SCHEMASharePoint + "/soap/workflow/"; break; default: SOAPEnvelope.opheader += "xmlns='" + SCHEMASharePoint + "/soap/'>"; SOAPAction = SCHEMASharePoint + "/soap/"; break; } // Add the operation to the SOAPAction and opfooter SOAPAction += opt.operation; SOAPEnvelope.opfooter = "</" + opt.operation + ">"; // Build the URL for the Ajax call based on which operation we're calling // If the webURL has been provided, then use it, else use the current site var ajaxURL = "_vti_bin/" + WSops[opt.operation][0] + ".asmx"; var thisSite = $().SPServices.SPGetCurrentSite(); var webURL = opt.webURL !== undefined ? opt.webURL : opt.webUrl; if (webURL.charAt(webURL.length - 1) === SLASH) { ajaxURL = webURL + ajaxURL; } else if (webURL.length > 0) { ajaxURL = webURL + SLASH + ajaxURL; } else { ajaxURL = thisSite + ((thisSite.charAt(thisSite.length - 1) === SLASH) ? ajaxURL : (SLASH + ajaxURL)); } SOAPEnvelope.payload = ""; // Each operation requires a different set of values. This switch statement sets them up in the SOAPEnvelope.payload. switch (opt.operation) { // ALERT OPERATIONS case "GetAlerts": break; case "DeleteAlerts": SOAPEnvelope.payload += "<IDs>"; for (i = 0; i < opt.IDs.length; i++) { SOAPEnvelope.payload += wrapNode("string", opt.IDs[i]); } SOAPEnvelope.payload += "</IDs>"; break; // AUTHENTICATION OPERATIONS case "Mode": break; case "Login": addToPayload(opt, ["username", "password"]); break; // COPY OPERATIONS case "CopyIntoItems": addToPayload(opt, ["SourceUrl"]); SOAPEnvelope.payload += "<DestinationUrls>"; for (i = 0; i < opt.DestinationUrls.length; i++) { SOAPEnvelope.payload += wrapNode("string", opt.DestinationUrls[i]); } SOAPEnvelope.payload += "</DestinationUrls>"; addToPayload(opt, ["Fields", "Stream", "Results"]); break; case "CopyIntoItemsLocal": addToPayload(opt, ["SourceUrl"]); SOAPEnvelope.payload += "<DestinationUrls>"; for (i = 0; i < opt.DestinationUrls.length; i++) { SOAPEnvelope.payload += wrapNode("string", opt.DestinationUrls[i]); } SOAPEnvelope.payload += "</DestinationUrls>"; break; case "GetItem": addToPayload(opt, ["Url", "Fields", "Stream"]); break; // FORM OPERATIONS case "GetForm": addToPayload(opt, ["listName", "formUrl"]); break; case "GetFormCollection": addToPayload(opt, ["listName"]); break; // LIST OPERATIONS case "AddAttachment": addToPayload(opt, ["listName", "listItemID", "fileName", "attachment"]); break; case "AddDiscussionBoardItem": addToPayload(opt, ["listName", "message"]); break; case "AddList": addToPayload(opt, ["listName", "description", "templateID"]); break; case "AddListFromFeature": addToPayload(opt, ["listName", "description", "featureID", "templateID"]); break; case "ApplyContentTypeToList": addToPayload(opt, ["webUrl", "contentTypeId", "listName"]); break; case "CheckInFile": addToPayload(opt, ["pageUrl", "comment", "CheckinType"]); break; case "CheckOutFile": addToPayload(opt, ["pageUrl", "checkoutToLocal", "lastmodified"]); break; case "CreateContentType": addToPayload(opt, ["listName", "displayName", "parentType", "fields", "contentTypeProperties", "addToView"]); break; case "DeleteAttachment": addToPayload(opt, ["listName", "listItemID", "url"]); break; case "DeleteContentType": addToPayload(opt, ["listName", "contentTypeId"]); break; case "DeleteContentTypeXmlDocument": addToPayload(opt, ["listName", "contentTypeId", "documentUri"]); break; case "DeleteList": addToPayload(opt, ["listName"]); break; case "GetAttachmentCollection": addToPayload(opt, ["listName", ["listItemID", "ID"]]); break; case "GetList": addToPayload(opt, ["listName"]); break; case "GetListAndView": addToPayload(opt, ["listName", "viewName"]); break; case "GetListCollection": break; case "GetListContentType": addToPayload(opt, ["listName", "contentTypeId"]); break; case "GetListContentTypes": addToPayload(opt, ["listName"]); break; case "GetListItems": addToPayload(opt, ["listName", "viewName", ["query", "CAMLQuery"], ["viewFields", "CAMLViewFields"], ["rowLimit", "CAMLRowLimit"], ["queryOptions", "CAMLQueryOptions"] ]); break; case "GetListItemChanges": addToPayload(opt, ["listName", "viewFields", "since", "contains"]); break; case "GetListItemChangesSinceToken": addToPayload(opt, ["listName", "viewName", ["query", "CAMLQuery"], ["viewFields", "CAMLViewFields"], ["rowLimit", "CAMLRowLimit"], ["queryOptions", "CAMLQueryOptions"], { name: "changeToken", sendNull: false }, { name: "contains", sendNull: false } ]); break; case "GetVersionCollection": addToPayload(opt, ["strlistID", "strlistItemID", "strFieldName"]); break; case "UndoCheckOut": addToPayload(opt, ["pageUrl"]); break; case "UpdateContentType": addToPayload(opt, ["listName", "contentTypeId", "contentTypeProperties", "newFields", "updateFields", "deleteFields", "addToView"]); break; case "UpdateContentTypesXmlDocument": addToPayload(opt, ["listName", "newDocument"]); break; case "UpdateContentTypeXmlDocument": addToPayload(opt, ["listName", "contentTypeId", "newDocument"]); break; case "UpdateList": addToPayload(opt, ["listName", "listProperties", "newFields", "updateFields", "deleteFields", "listVersion"]); break; case "UpdateListItems": addToPayload(opt, ["listName"]); if (typeof opt.updates !== "undefined" && opt.updates.length > 0) { addToPayload(opt, ["updates"]); } else { SOAPEnvelope.payload += "<updates><Batch OnError='Continue'><Method ID='1' Cmd='" + opt.batchCmd + "'>"; for (i = 0; i < opt.valuepairs.length; i++) { SOAPEnvelope.payload += "<Field Name='" + opt.valuepairs[i][0] + "'>" + escapeColumnValue(opt.valuepairs[i][1]) + "</Field>"; } if (opt.batchCmd !== "New") { SOAPEnvelope.payload += "<Field Name='ID'>" + opt.ID + "</Field>"; } SOAPEnvelope.payload += "</Method></Batch></updates>"; } break; // MEETINGS OPERATIONS case "AddMeeting": addToPayload(opt, ["organizerEmail", "uid", "sequence", "utcDateStamp", "title", "location", "utcDateStart", "utcDateEnd", "nonGregorian"]); break; case "CreateWorkspace": addToPayload(opt, ["title", "templateName", "lcid", "timeZoneInformation"]); break; case "RemoveMeeting": addToPayload(opt, ["recurrenceId", "uid", "sequence", "utcDateStamp", "cancelMeeting"]); break; case "SetWorkspaceTitle": addToPayload(opt, ["title"]); break; // OFFICIALFILE OPERATIONS case "GetRecordRouting": addToPayload(opt, ["recordRouting"]); break; case "GetRecordRoutingCollection": break; case "GetServerInfo": break; case "SubmitFile": addToPayload(opt, ["fileToSubmit"], ["properties"], ["recordRouting"], ["sourceUrl"], ["userName"]); break; // PEOPLE OPERATIONS case "ResolvePrincipals": addToPayload(opt, ["principalKeys", "principalType", "addToUserInfoList"]); break; case "SearchPrincipals": addToPayload(opt, ["searchText", "maxResults", "principalType"]); break; // PERMISSION OPERATIONS case "AddPermission": addToPayload(opt, ["objectName", "objectType", "permissionIdentifier", "permissionType", "permissionMask"]); break; case "AddPermissionCollection": addToPayload(opt, ["objectName", "objectType", "permissionsInfoXml"]); break; case "GetPermissionCollection": addToPayload(opt, ["objectName", "objectType"]); break; case "RemovePermission": addToPayload(opt, ["objectName", "objectType", "permissionIdentifier", "permissionType"]); break; case "RemovePermissionCollection": addToPayload(opt, ["objectName", "objectType", "memberIdsXml"]); break; case "UpdatePermission": addToPayload(opt, ["objectName", "objectType", "permissionIdentifier", "permissionType", "permissionMask"]); break; // PUBLISHEDLINKSSERVICE OPERATIONS case "GetLinks": break; // SEARCH OPERATIONS case "GetPortalSearchInfo": SOAPEnvelope.opheader = "<" + opt.operation + " xmlns='http://microsoft.com/webservices/OfficeServer/QueryService'>"; SOAPAction = "http://microsoft.com/webservices/OfficeServer/QueryService/" + opt.operation; break; case "GetQuerySuggestions": SOAPEnvelope.opheader = "<" + opt.operation + " xmlns='http://microsoft.com/webservices/OfficeServer/QueryService'>"; SOAPAction = "http://microsoft.com/webservices/OfficeServer/QueryService/" + opt.operation; SOAPEnvelope.payload += wrapNode("queryXml", encodeXml(opt.queryXml)); break; case "GetSearchMetadata": SOAPEnvelope.opheader = "<" + opt.operation + " xmlns='http://microsoft.com/webservices/OfficeServer/QueryService'>"; SOAPAction = "http://microsoft.com/webservices/OfficeServer/QueryService/" + opt.operation; break; case "Query": SOAPEnvelope.payload += wrapNode("queryXml", encodeXml(opt.queryXml)); break; case "QueryEx": SOAPEnvelope.opheader = "<" + opt.operation + " xmlns='http://microsoft.com/webservices/OfficeServer/QueryService'>"; SOAPAction = "http://microsoft.com/webservices/OfficeServer/QueryService/" + opt.operation; SOAPEnvelope.payload += wrapNode("queryXml", encodeXml(opt.queryXml)); break; case "Registration": SOAPEnvelope.payload += wrapNode("registrationXml", encodeXml(opt.registrationXml)); break; case "Status": break; // SHAREPOINTDIAGNOSTICS OPERATIONS case "SendClientScriptErrorReport": addToPayload(opt, ["message", "file", "line", "client", "stack", "team", "originalFile"]); break; // SITEDATA OPERATIONS case "EnumerateFolder": addToPayload(opt, ["strFolderUrl"]); break; case "GetAttachments": addToPayload(opt, ["strListName", "strItemId"]); break; case "SiteDataGetList": addToPayload(opt, ["strListName"]); // Because this operation has a name which duplicates the Lists WS, need to handle SOAPEnvelope = siteDataFixSOAPEnvelope(SOAPEnvelope, opt.operation); break; case "SiteDataGetListCollection": // Because this operation has a name which duplicates the Lists WS, need to handle SOAPEnvelope = siteDataFixSOAPEnvelope(SOAPEnvelope, opt.operation); break; case "SiteDataGetSite": // Because this operation has a name which duplicates the Lists WS, need to handle SOAPEnvelope = siteDataFixSOAPEnvelope(SOAPEnvelope, opt.operation); break; case "SiteDataGetSiteUrl": addToPayload(opt, ["Url"]); // Because this operation has a name which duplicates the Lists WS, need to handle SOAPEnvelope = siteDataFixSOAPEnvelope(SOAPEnvelope, opt.operation); break; case "SiteDataGetWeb": // Because this operation has a name which duplicates the Lists WS, need to handle SOAPEnvelope = siteDataFixSOAPEnvelope(SOAPEnvelope, opt.operation); break; // SITES OPERATIONS case "CreateWeb": addToPayload(opt, ["url", "title", "description", "templateName", "language", "languageSpecified", "locale", "localeSpecified", "collationLocale", "collationLocaleSpecified", "uniquePermissions", "uniquePermissionsSpecified", "anonymous", "anonymousSpecified", "presence", "presenceSpecified" ]); break; case "DeleteWeb": addToPayload(opt, ["url"]); break; case "GetSite": addToPayload(opt, ["SiteUrl"]); break; case "GetSiteTemplates": addToPayload(opt, ["LCID", "TemplateList"]); break; // SOCIALDATASERVICE OPERATIONS case "AddComment": addToPayload(opt, ["url", "comment", "isHighPriority", "title"]); break; case "AddTag": addToPayload(opt, ["url", "termID", "title", "isPrivate"]); break; case "AddTagByKeyword": addToPayload(opt, ["url", "keyword", "title", "isPrivate"]); break; case "CountCommentsOfUser": addToPayload(opt, ["userAccountName"]); break; case "CountCommentsOfUserOnUrl": addToPayload(opt, ["userAccountName", "url"]); break; case "CountCommentsOnUrl": addToPayload(opt, ["url"]); break; case "CountRatingsOnUrl": addToPayload(opt, ["url"]); break; case "CountTagsOfUser": addToPayload(opt, ["userAccountName"]); break; case "DeleteComment": addToPayload(opt, ["url", "lastModifiedTime"]); break; case "DeleteRating": addToPayload(opt, ["url"]); break; case "DeleteTag": addToPayload(opt, ["url", "termID"]); break; case "DeleteTagByKeyword": addToPayload(opt, ["url", "keyword"]); break; case "DeleteTags": addToPayload(opt, ["url"]); break; case "GetAllTagTerms": addToPayload(opt, ["maximumItemsToReturn"]); break; case "GetAllTagTermsForUrlFolder": addToPayload(opt, ["urlFolder", "maximumItemsToReturn"]); break; case "GetAllTagUrls": addToPayload(opt, ["termID"]); break; case "GetAllTagUrlsByKeyword": addToPayload(opt, ["keyword"]); break; case "GetCommentsOfUser": addToPayload(opt, ["userAccountName", "maximumItemsToReturn", "startIndex"]); break; case "GetCommentsOfUserOnUrl": addToPayload(opt, ["userAccountName", "url"]); break; case "GetCommentsOnUrl": addToPayload(opt, ["url", "maximumItemsToReturn", "startIndex"]); if (typeof opt.excludeItemsTime !== "undefined" && opt.excludeItemsTime.length > 0) { SOAPEnvelope.payload += wrapNode("excludeItemsTime", opt.excludeItemsTime); } break; case "GetRatingAverageOnUrl": addToPayload(opt, ["url"]); break; case "GetRatingOfUserOnUrl": addToPayload(opt, ["userAccountName", "url"]); break; case "GetRatingOnUrl": addToPayload(opt, ["url"]); break; case "GetRatingsOfUser": addToPayload(opt, ["userAccountName"]); break; case "GetRatingsOnUrl": addToPayload(opt, ["url"]); break; case "GetSocialDataForFullReplication": addToPayload(opt, ["userAccountName"]); break; case "GetTags": addToPayload(opt, ["url"]); break; case "GetTagsOfUser": addToPayload(opt, ["userAccountName", "maximumItemsToReturn", "startIndex"]); break; case "GetTagTerms": addToPayload(opt, ["maximumItemsToReturn"]); break; case "GetTagTermsOfUser": addToPayload(opt, ["userAccountName", "maximumItemsToReturn"]); break; case "GetTagTermsOnUrl": addToPayload(opt, ["url", "maximumItemsToReturn"]); break; case "GetTagUrls": addToPayload(opt, ["termID"]); break; case "GetTagUrlsByKeyword": addToPayload(opt, ["keyword"]); break; case "GetTagUrlsOfUser": addToPayload(opt, ["termID", "userAccountName"]); break; case "GetTagUrlsOfUserByKeyword": addToPayload(opt, ["keyword", "userAccountName"]); break; case "SetRating": addToPayload(opt, ["url", "rating", "title", "analysisDataEntry"]); break; case "UpdateComment": addToPayload(opt, ["url", "lastModifiedTime", "comment", "isHighPriority"]); break; // SPELLCHECK OPERATIONS case "SpellCheck": addToPayload(opt, ["chunksToSpell", "declaredLanguage", "useLad"]); break; // TAXONOMY OPERATIONS case "AddTerms": addToPayload(opt, ["sharedServiceId", "termSetId", "lcid", "newTerms"]); break; case "GetChildTermsInTerm": addToPayload(opt, ["sspId", "lcid", "termId", "termSetId"]); break; case "GetChildTermsInTermSet": addToPayload(opt, ["sspId", "lcid", "termSetId"]); break; case "GetKeywordTermsByGuids": addToPayload(opt, ["termIds", "lcid"]); break; case "GetTermsByLabel": addToPayload(opt, ["label", "lcid", "matchOption", "resultCollectionSize", "termIds", "addIfNotFound"]); break; case "GetTermSets": addToPayload(opt, ["sharedServiceIds", "termSetIds", "lcid", "clientTimeStamps", "clientVersions"]); break; // USERS AND GROUPS OPERATIONS case "AddGroup": addToPayload(opt, ["groupName", "ownerIdentifier", "ownerType", "defaultUserLoginName", "description"]); break; case "AddGroupToRole": addToPayload(opt, ["groupName", "roleName"]); break; case "AddRole": addToPayload(opt, ["roleName", "description", "permissionMask"]); break; case "AddRoleDef": addToPayload(opt, ["roleName", "description", "permissionMask"]); break; case "AddUserCollectionToGroup": addToPayload(opt, ["groupName", "usersInfoXml"]); break; case "AddUserCollectionToRole": addToPayload(opt, ["roleName", "usersInfoXml"]); break; case "AddUserToGroup": addToPayload(opt, ["groupName", "userName", "userLoginName", "userEmail", "userNotes"]); break; case "AddUserToRole": addToPayload(opt, ["roleName", "userName", "userLoginName", "userEmail", "userNotes"]); break; case "GetAllUserCollectionFromWeb": break; case "GetGroupCollection": addToPayload(opt, ["groupNamesXml"]); break; case "GetGroupCollectionFromRole": addToPayload(opt, ["roleName"]); break; case "GetGroupCollectionFromSite": break; case "GetGroupCollectionFromUser": addToPayload(opt, ["userLoginName"]); break; case "GetGroupCollectionFromWeb": break; case "GetGroupInfo": addToPayload(opt, ["groupName"]); break; case "GetRoleCollection": addToPayload(opt, ["roleNamesXml"]); break; case "GetRoleCollectionFromGroup": addToPayload(opt, ["groupName"]); break; case "GetRoleCollectionFromUser": addToPayload(opt, ["userLoginName"]); break; case "GetRoleCollectionFromWeb": break; case "GetRoleInfo": addToPayload(opt, ["roleName"]); break; case "GetRolesAndPermissionsForCurrentUser": break; case "GetRolesAndPermissionsForSite": break; case "GetUserCollection": addToPayload(opt, ["userLoginNamesXml"]); break; case "GetUserCollectionFromGroup": addToPayload(opt, ["groupName"]); break; case "GetUserCollectionFromRole": addToPayload(opt, ["roleName"]); break; case "GetUserCollectionFromSite": break; case "GetUserCollectionFromWeb": break; case "GetUserInfo": addToPayload(opt, ["userLoginName"]); break; case "GetUserLoginFromEmail": addToPayload(opt, ["emailXml"]); break; case "RemoveGroup": addToPayload(opt, ["groupName"]); break; case "RemoveGroupFromRole": addToPayload(opt, ["roleName", "groupName"]); break; case "RemoveRole": addToPayload(opt, ["roleName"]); break; case "RemoveUserCollectionFromGroup": addToPayload(opt, ["groupName", "userLoginNamesXml"]); break; case "RemoveUserCollectionFromRole": addToPayload(opt, ["roleName", "userLoginNamesXml"]); break; case "RemoveUserCollectionFromSite": addToPayload(opt, ["userLoginNamesXml"]); break; case "RemoveUserFromGroup": addToPayload(opt, ["groupName", "userLoginName"]); break; case "RemoveUserFromRole": addToPayload(opt, ["roleName", "userLoginName"]); break; case "RemoveUserFromSite": addToPayload(opt, ["userLoginName"]); break; case "RemoveUserFromWeb": addToPayload(opt, ["userLoginName"]); break; case "UpdateGroupInfo": addToPayload(opt, ["oldGroupName", "groupName", "ownerIdentifier", "ownerType", "description"]); break; case "UpdateRoleDefInfo": addToPayload(opt, ["oldRoleName", "roleName", "description", "permissionMask"]); break; case "UpdateRoleInfo": addToPayload(opt, ["oldRoleName", "roleName", "description", "permissionMask"]); break; case "UpdateUserInfo": addToPayload(opt, ["userLoginName", "userName", "userEmail", "userNotes"]); break; // USERPROFILESERVICE OPERATIONS case "AddColleague": addToPayload(opt, ["accountName", "colleagueAccountName", "group", "privacy", "isInWorkGroup"]); break; case "AddLink": addToPayload(opt, ["accountName", "name", "url", "group", "privacy"]); break; case "AddMembership": addToPayload(opt, ["accountName", "membershipInfo", "group", "privacy"]); break; case "AddPinnedLink": addToPayload(opt, ["accountName", "name", "url"]); break; case "CreateMemberGroup": addToPayload(opt, ["membershipInfo"]); break; case "CreateUserProfileByAccountName": addToPayload(opt, ["accountName"]); break; case "GetCommonColleagues": addToPayload(opt, ["accountName"]); break; case "GetCommonManager": addToPayload(opt, ["accountName"]); break; case "GetCommonMemberships": addToPayload(opt, ["accountName"]); break; case "GetInCommon": addToPayload(opt, ["accountName"]); break; case "GetPropertyChoiceList": addToPayload(opt, ["propertyName"]); break; case "GetUserColleagues": addToPayload(opt, ["accountName"]); break; case "GetUserLinks": addToPayload(opt, ["accountName"]); break; case "GetUserMemberships": addToPayload(opt, ["accountName"]); break; case "GetUserPinnedLinks": addToPayload(opt, ["accountName"]); break; case "GetUserProfileByGuid": addToPayload(opt, ["guid"]); break; case "GetUserProfileByIndex": addToPayload(opt, ["index"]); break; case "GetUserProfileByName": // Note that this operation is inconsistent with the others, using AccountName rather than accountName if (typeof opt.accountName !== "undefined" && opt.accountName.length > 0) { addToPayload(opt, [ ["AccountName", "accountName"] ]); } else { addToPayload(opt, ["AccountName"]); } break; case "GetUserProfileCount": break; case "GetUserProfileSchema": break; case "GetUserPropertyByAccountName": addToPayload(opt, ["accountName", "propertyName"]); break; case "ModifyUserPropertyByAccountName": addToPayload(opt, ["accountName", "newData"]); break; case "RemoveAllColleagues": addToPayload(opt, ["accountName"]); break; case "Remove