Recently we have a requirement to automatically generate a unique
number string for one field called “Part Number” for many SharePoint Document libraries.
This unique number string would need to follow some business logic like below.
There are several ways we could implement this. One of the
old school method is to implement the field as custom
field with business logic to generate unique number string. However, we had
several custom fields on SharePoint that caused SharePoint upgrade complexity. In
this blog, we will use a new client side implementation JSLink
that will not have any server side component. In this way, the solution will be
potable and the upgrade will be extremely simple.
The first step is to write a JSLink
script named PartNum.js to replace the out of box “Part Number” text field behavior.
You would need to find out the field internal name using the way published here.
The internal field name for “Part Number” is “Part_x0020_Number“ in our case. The
script will look like below. You would need to update the guid() function with
real business logic.
(function () {
var overrideCtx =
{};
overrideCtx.Templates = {};
overrideCtx.Templates.Fields = {
'Part_x0020_Number': { 'NewForm': renderTitle, 'EditForm': renderTitle }
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
})();
function renderTitle(ctx) {
var formCtx =
SPClientTemplates.Utility.GetFormContextForCurrentField(ctx);
RegisterCallBacks(formCtx);
var fieldVal =
ctx.CurrentFieldValue ? ctx.CurrentFieldValue.toString() : null;
if(fieldVal) {
var html = '<div>';
html += '<input id="uniquePartNum" type="text" value=' + fieldVal + '>';
html += '</input>';
html += '</div>';
return html;
}
else{
var newGUID = guid();
var html = '<div>';
html += '<input id="uniquePartNum" type="text" value=' + newGUID + '>';
html += '</input>';
html += '</div>';
return html;
}
var html = '<div>';
html += '<input id="uniquePartNum" type="text" value=' + fieldVal + '>';
html += '</input>';
html += '</div>';
return html;
}
else{
var newGUID = guid();
var html = '<div>';
html += '<input id="uniquePartNum" type="text" value=' + newGUID + '>';
html += '</input>';
html += '</div>';
return html;
}
}
//registers call back functions from SharePoint
function RegisterCallBacks(formCtx) {
//This is
what happens when the user clicks save\submit
formCtx.registerGetValueCallback(formCtx.fieldName,
function () {
//get
the choosen value from the select element
var
e = document.getElementById("uniquePartNum");
return e.value;
});
}
// Generate GUID
function guid() {
function s4() {
return
Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() +
'-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4()
+ s4() + s4();
}
The second step is to open SharePoint
Designer and go to your SiteAssets library, drop PartNum.js there.
The third step is to configure
the document item edit form to use this script. Go to your document library
and from your library settings ribbon choose ‘Form Web Parts > Default Edit
Form’. Edit the webpart. Then add the script to the JS Link field.
Now if you save the changes, you will see the “Part Number” field will be automatically populated
with GUID. You could modify the script to generate the string based on your
business requirement.
Since Microsoft have changed the development direction for SharePoint 2013 and 2016, you should always think about SharePoint add-in approach instead of server side solution. There are more samples from Microsoft you could refer here.
No comments:
Post a Comment