I am unable to make the fields readonly in EditForm.aspx on the basis of logged in User. The ctx.CurrentFieldSchema.FieldType throws an error "Cannot read property 'FieldType' of null" Below is the code
(function () {
// Create object that have the context information about the field that we want to change it's output render
var readonlyFiledContext = {};
readonlyFiledContext.Templates = {};
readonlyFiledContext.Templates.Fields = {
// Apply the new rendering for Age field on Edit forms
"Test": {
"EditForm": readonlyFieldTemplate
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(readonlyFiledContext);
})();
var allGroups;
// This function provides the rendering logic
function readonlyFieldTemplate(ctx) {
SP.SOD.executeOrDelayUntilScriptLoaded(function(){
var currentContext = SP.ClientContext.get_current();
var currentWeb = currentContext.get_web();
var currentUser = currentContext.get_web().get_currentUser();
currentContext.load(currentUser);
allGroups = currentUser.get_groups();
currentContext.load(allGroups);
currentContext.executeQueryAsync(function(){
var groupsEnum = allGroups.getEnumerator();
while (groupsEnum.moveNext()) {
var item = groupsEnum.get_current();
groupName = item.get_title();
if (groupName.includes("Site Member")) {
isUserGroupMember=true;
break;
}
}
if(isUserGroupMember){
switch (ctx.CurrentFieldSchema.FieldType) {
case "Text":
case "Number":
case "Integer":
case "Currency":
case "Choice":
case "Computed":
return SPFieldText_Edit(ctx);
case "Boolean":
return SPFieldBoolean_Edit(ctx);
case "DateTime":
return SPFieldDateTime_Edit(ctx);
}
}
else{
switch (ctx.CurrentFieldSchema.FieldType) {
case "Text":
case "Number":
case "Integer":
case "Currency":
case "Choice":
case "Computed":
return SPField_FormDisplay_Default(ctx);
case "Boolean":
return SPField_FormDisplay_DefaultNoEncode(ctx);
case "DateTime":
return SPFieldDateTime_Display(ctx);
}
}
}, OnFailure);
}, 'sp.js');
//Reuse ready sharepoint javascript libraries
}
function OnFailure(sender, args) {
// log an error?
// no need to do anything with the field because it is already hidden
}