<script src="/_layouts/15/init.js"></script>
<script src="/_layouts/15/sp.runtime.js"></script>
<script src="/_layouts/15/sp.js"></script>
<script src="/_layouts/15/SP.UserProfiles.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery.SPServices/2013.01/jquery.SPServices-2013.01.min.js"></script>
<script type="text/javascript">
//updateUserProfilePreFlight defers until getUserId() is "done"
//then it invokes updateUserProfile
function updateUserProfilePreFlight(){
getUserId().done(function (userId) {
var propertyName = "Fax"
var propertyValue = $("#Fax").val();
updateUserProfile(userId, propertyName, propertyValue);
});
}
//getUserLogin() uses CSOM to retrive current userId.
function getUserId() {
var userLogin = $.Deferred(function () {
var clientContext = new SP.ClientContext.get_current();
var user = clientContext.get_web().get_currentUser();
clientContext.load(user);
clientContext.executeQueryAsync(
function () {
userLogin.resolve(user.get_loginName());
}
,
function () {
userLogin.reject(args.get_message());
}
);
});
return userLogin.promise();
}
//updateUserProfile updates the userprofile property
function updateUserProfile(userId, propertyName, propertyValue) {
var propertyData = "<PropertyData>" +
"<IsPrivacyChanged>false</IsPrivacyChanged>" +
"<IsValueChanged>true</IsValueChanged>" +
"<Name>" + propertyName + "</Name>" +
"<Privacy>NotSet</Privacy>" +
"<Values><ValueData><Value xsi:type=\"xsd:string\">" + propertyValue + "</Value></ValueData></Values>" +
"</PropertyData>";
$().SPServices({
operation: "ModifyUserPropertyByAccountName",
async: false,
webURL: "/",
accountName: userId,
newData: propertyData,
completefunc: function (xData, Status) {
var result = $(xData.responseXML);
}
});
}
</script>
<input id="Fax" type="text" placeholder="Update Fax" />
<input onclick="updateUserProfilePreFlight()" type="button" value="Update" />