jQuery Library for SharePoint Web Services (SPServices) v0.7.2 Released
Today I’m releasing SPServices v0.7.2. If you are using an earlier version of SPServices, I suggest that you upgrade to this version, as you will most likely see some performance improvements, especially if you use multiple value-added functions on the same forms pages.
Thanks to everyone who downloaded the beta over the last month or so and provided feedback. The most important piece of feedback I received was an incompatibility with jQuery 1.8.x, which I was able to fix and get into this release.
Caching
I’ve added a caching option into this version of SPServices and it can save a decent amount of traffic back and forth with the server, depending on how you are using things. It uses jQuery’s .data() functions to cache the XML for each request which has the option cacheXML: true
. This is basically brute force. If cacheXML: true
, then the returned XML is saved as a data object on the body of the page with the request XML as the key. If you make the exact same call again, then the request is fulfilled from that cache. Note that it has to be the “exact same call”. This means that the request XML has to match exactly.
I’ve set the option to true for some of the internal calls to the Web Services operations to speed things up when you use functions multiple times. For instance, quite a few of the value-added functions make a call to GetList to get details about the current list, and there’s no need to make that call more than once during the page life. If you are creating more than one cascade with SPCascadeDropdowns, for example, you’ll see an immediate improvement. However, since I can’t predict how many values you may have coming back from GetListItems calls, I haven’t turned on caching pervasively. I didn’t want to break things in an effort to be more efficient. Some client machines may not have the horsepower to cache large volumes of data, etc. If you know your data and your client machine capabilities well, you can set the option to true in the defaults – $().SPServices.defaults.cacheXML = true;
– which will affect all Web Service operation calls in the current page lifecycle.
You can use the cacheXML: true
option with any Web Service operation in SPServices Core, though as you can imagine some operations will benefit more than others.
SPFindPeople Picker
The SPFindPeoplePicker function helps you find and set People Picker columns. These little buggers are problem enough as it is, and selecting them and manipulating them with jQuery is something that a lot of people want to do. Add to that the fact that the People Picker is rendered differently in IE than in other browsers, and you have a challenge not unlike simple vs. complex dropdowns.
SPFindPeoplePicker allows you to get or set the values for People Pickers. When you call it with the DisplayName of a People Picker, the function returns an object which contains information about the People Picker’s structure nd current value. For instance, calling the function like this:
var salesRep = $().SPFindPeoplePicker({ peoplePickerDisplayName: "Sales Rep", valueToSet: "APPTIXemullerbeck53" });
returns an object which contains the following:
peoplePickerDisplayName
The DisplayName of the People Picker in the form.
row
This is reference to the table row which contains the People Picker. This can be useful if you want to hide or show the row conditionally based on some user action.
contents
The full contents of the div[name='upLevelDiv']
element.
currentValue
The current value set in the People Picker. If you pass a value into the function, it will be set and returned in this string. If there are multiple people specified, they are returned separated by semicolons, as in the People Picker display.
checkNames
This is a reference to the checkNames img tag in the People Picker. It’s used by the function to initiate resolution of a Person or Group value by firing the click event on it. Once you have this reference, you can do the same.
dictionaryEntries
If the browser is Internet Explorer, then this object will contain the full dictionary entry values for each user or group in the People Picker value. If the browser is not IE, then the function calls GetUserInfo to retrieve similar values to mirror the dictionary entry structure.
Other Release Notes
There are other goodies in this release, and you can see the full list of enhancements and improvements on the download page. Note the link to the Issue Tracker items for this release.
For posterity, the release notes are included below. You can check out all the changes (the release pages have a character limit for the release notes) in the Issue Tracker.
New Functionality
Alpha | Issue Tracker Item | Function | Operation | Description |
---|---|---|---|---|
ALPHA1 | 10071 | $().SPServices.SPXmlToJson | NA | Enhanced userToJsonObject for use when ExpandUserField = True |
ALPHA3 | 10074 | $().SPServices.SPFindPeoplePicker | NA | Add SPFindPeoplePicker Function |
ALPHA4 | 10070 | $().SPServices.SPXmlToJson | NA | SPXmlToJson – calculated fields and “blank” xml attributes |
ALPHA5 | 9969 | $().SPServices.SPGetStaticFromDisplay and $().SPServices.SPGetDisplayFromStatic | NA | Getting multiple columns in one SPGetStaticFromDisplay call |
ALPHA3 – Added caching capability to the SPServices core AJAX function to make it available across all SPServices value added functions and Web Services operations.
ALPHA7– Fixes to SPFindPeoplePicker to work with non-IE browsers.
New Operations
Alpha | Web Service | Operation | Options | MSDN Documentation | Issue Tracker Item |
---|---|---|---|---|---|
ALPHA1 | Diagnostics | SendClientScriptErrorReport | message, file, line, client, stack, team, originalFileType | SharePointDiagnostics.SendClientScriptErrorReport Method | 10028 |
ALPHA2 | People | ResolvePrincipals | principalKeys, principalType, addToUserInfoList | People.ResolvePrincipals Method | 10062 |
ALPHA5 | Lists | AddListFromFeature | listName, description, featureID, templateID | Lists.AddListFromFeature Method | 10064 |
ALPHA5 | SpellCheck | SpellCheck | chunksToSpell, declaredLanguage, useLad | SpellChecker.SpellCheck Method | 10063 |
ALPHA5 | Lists | various | NA | see work item | 9884 |
ALPHA2 – Added these Sites Web Service operations: CreateWeb, DeleteWeb, GetSite, GetSiteTemplates
Bug Fixes and Efficiency
Alpha | Issue Tracker Item | Function | Description |
---|---|---|---|
ALPHA1 | 10061 | $().SPServices.SPDisplayRelatedInfo | Not Properly Handling UserMulti Columns |
ALPHA1 | 9926 | $().SPServices.SPCascadeDropDowns | ‘&’ symbol values |
ALPHA1 | 9925 | NA | dropdownCtl bug in Italian Sites |
ALPHA5 | 9931 | $().SPServices.SPGetLastItemId | missing reference |
You’re the King!
Awesome stuff! Is there anyway to combine the PeoplePicker and Autocomplete function? I’m basically trying to use the autocomplete function that would draw data from Sharepoint Users rather than a Sharepoint list.
Gabe:
The SPAutocomplete function is built to only work with Single line of text columns. You could certainly use jQueryUI’s autocomplete function. However, People Pickers are tricky little beasties.
Why wouldn’t you just use the People Picker as is if you want to draw from SharePoint users?
M.
Hi Marc,
I have set cacheXML to true and it works fine until the list is updated. After the cache doesn’t seem to be refreshed.
A workaround could be to force data to be retrieved again with caching set to false once they have been updated but that’s not completely satisfying.
Just an FYI…SPFindPeoplePicker is not a supported method for a “Person/Group” column in SharePoint. Do you have a control we can add to our farm that can be used in place of a Person or Group field where the SPFindPeoplePicker method can be applied? Thanks,
Jeff:
SPFindPeoplePicker isn’t part of SharePoint. It’s part of my SPServices jQuery library, which works with SharePoint.
M.
This worked great BUT I can’t set focus() on the people picker. Can someone help me with the code for that.
var salesRep = $().SPFindPeoplePicker({
peoplePickerDisplayName: “Sales Rep”,
valueToSet: “APPTIXemullerbeck53”
});
i tried adding:
salesRep.row.find(“textarea[id$=’_downlevelTextBox’]”).focus();
or salesRep.row.focus();
neither worked for me.
Rob:
This just worked for me:
M.
Marc,
That worked perfectly. Thank you for your help and your contributions to the development community. :-)
Hi Can I use SPFindPeoplePicker method to get peoplepicker’s value?
and I try like this
function GetPeopleo()
{
var salesRep = $().SPFindPeoplePicker({
peoplePickerDisplayName: “”
});
var currentValue=salesRep.currentValue;
it same does’t work . thanks
jhy5188:
It doesn’t look like you’re passing the DisplayName into the function. It should look like this:
function GetPeopleo()
{
var salesRep = $().SPFindPeoplePicker({
peoplePickerDisplayName: "columnName"
});
var currentValue=salesRep.currentValue;
where columnName is the DisplayName of your column.
M.
Hi Marc,
I am trying to get the people picker field (in my case ‘Forward To’) value using SPFindPeoplePicker, but everytime I am getting an empty value. And it showing empty dictionaryentries. Please find below my code, here before saving the list data I want to confirm the user if “Forward To” field is empty.
function PreSaveAction(){
var forwardTo = $().SPFindPeoplePicker({
peoplePickerDisplayName: “Forward To”,
checkNames: false
});
var forwardValue= forwardTo. currentValue;
If(forwardValue!=””){
return true;
}else{
var userResp=confirm(“Forward To is empty. Do you really want to Save It?”);
return userResp;
}
}
It will be really helpful if you can help me to figure out what I have missed. Thanks in advance.
//ahsan
ahsan:
Can you post this in the SPServices discussions? It’s easier to talk about code there.
M.
thanks.. i am posting this to there.
ahsan
what about oberation: addusertogroup? is it existed in spservices 0.7.2? coz i was trying something like this and not working ?? $().SPServices({
operation: “AddUserToGroup”,
groupName: “Social Committee”,
userLoginName:”domain\user”,
async: false,
completefunc: null
});
}
Please post your SPServices questions on the Codeplex site. First off, though, grab the most recent release.
M.
Hi March,
I am using in SharePoint 2013, the people picker value is not populating. Can you help me please. Below is the code:
$(document).ready(function() {
var salesRep = $().SPFindPeoplePicker({
peoplePickerDisplayName: “Observer(s)”,
valueToSet: “Asiapacific\\sahoobij”
});
});
Bijay:
Odd post to choose for this comment. If you’re still having problems, please post in the Codeplex discussions.
M.
Hi Marc, thanks for the code. However, $().SPFindPeoplePicker({}); doesn’t work for Multi user PP. Please provide some alternatives to get user id from PP having multiple user.
Chintan:
You can post this as an issue/request on the Github site if you’d like. No guarantee it’ll happen anytime soon, though.
M.