Edit SharePoint Field properties, including lookup column list association, with client side code only
 Guest Author: Alexander Bautz
Guest Author: Alexander Bautz
SharePoint JavaScripts
Alexander has updated the code to include “a small fix regarding showing the “Title” field as an available field, changed to DisplayName for the Field label and to add the “Title” column as an editabel column”.
This code enables you to edit the following field properties using jQuery only:
- Hidden: Specifies whether the field is displayed in the list.
- ReadOnly: Specifies whether values in the field can be modified.
- Required: Determines whether the field requires values.
- Show In NewForm: Specifies whether the field is displayed in the form that is used to create list items.
- Show In DispForm: Specifies whether the field is displayed in the form for displaying list items.
- Show In EditForm: Specifies whether the field is displayed in the form that is used to edit list items.
- Show In List Settings: Specifies whether the field is displayed in the page for customizing list settings.
- Show In Version History: Specifies whether the field is displayed in the page for viewing list item versions.
- Show In View Forms: Specifies whether the field is displayed in pages that are used to view list data.
- Lookup column list association: Change the list association for a lookup column – Note: If you do this, all existing elements in this column will be lost.

Disclaimer:
I have removed some list types and some column   types, but be careful using this tool. Test this in a “test list” before you use   it in your “production environment”. If you edit the wrong field, you could   break the list. Use this tool at your own risk!
Create a WebPartPage, insert a CEWP, and paste this code (change the reference to jQuery):
};
	wrapSoapRequest(wsBaseUrl + ‘lists.asmx’, ‘http://schemas.microsoft.com/sharepoint/soap/GetListCollection’, xmlStr, function(data){
		if ($(’ErrorText’, data).length > 0) {
			result.success = false;
		} else {
			result.success = true;
			var arrTypesToSkip = ['110','111','112','113','114','115','116','117','118'];
			$(’List’, data).each(function(){
				if($.inArray($(this).attr(’ServerTemplate’),arrTypesToSkip)==-1){
					result.lists.push($(this));
				}
			});
		}
	});
	return result;
}
function getFieldProperties(){
$("#insertListfieldControlsHere").html(”);
listGuid = $("#insertListCollectionHere").find(’option:selected’).val();
var list = customGetList(listGuid);
listName = list.name;
var textStyleHeader = "style=’border-bottom:1px silver solid;border-right:1px silver solid;text-align:center;padding:0 10 0 3′";
var textStyleBody = "style=’border-bottom:1px silver solid;border-right:1px silver solid;text-align:left’";
var tHeader = ”;
	tHeader += "<tr valign=’top’ align=’left’ style=’background-color:#CCCCCC’>";
	tHeader += "<th style=’border-bottom:1px silver solid;padding:0 10 0 3′>Name</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the list.’ "+textStyleHeader+">Hidden</th>";
	tHeader += "<th title=’Specifies whether values in the field can be modified.’ "+textStyleHeader+">ReadOnly</th>";
	tHeader += "<th title=’Determines whether the field requires values.’ "+textStyleHeader+">Required</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the form that is used to create list items.’ "+textStyleHeader+">Show In NewForm</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the form for displaying list items.’ "+textStyleHeader+">Show In DispForm</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the form that is used to edit list items.’ "+textStyleHeader+">Show In EditForm</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the page for customizing list settings.’ "+textStyleHeader+">Show In List Settings</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in the page for viewing list item versions.’ "+textStyleHeader+">Show In Version History</th>";
	tHeader += "<th title=’Specifies whether the field is displayed in pages that are used to view list data.’ "+textStyleHeader+">Show In View Forms</th>";
	tHeader += "<th title=’Change the list association for a lookup column’ "+textStyleHeader+">Lookup column list association</th>";
	tHeader += "<th title=” "+textStyleHeader+">Save changes</th>";
	tHeader += "</tr>";
$("#insertListfieldControlsHere").append(tHeader);
var tbody = ”;
fieldsObj = {};
	$.each(list.fields,function(i,field){
		var name = field.attr(’Name’);
		fieldsObj[name]=field;
		var dispName = field.attr(’DisplayName’);
		var fieldType = field.attr(’Type’);
		var tdStr = "<td style=’border-bottom:1px silver solid;border-right:1px silver solid;text-align:left;vertical-align:top;padding:2 5 0 3′>"+dispName+"</td>";
		// Hidden
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_hidden’ propName=’Hidden’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_hidden’ propName=’Hidden’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ReadOnly
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_readOnly’ propName=’ReadOnly’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_readOnly’ propName=’ReadOnly’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// Required
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_required’ propName=’Required’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_required’ propName=’Required’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInNewForm
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInNewForm’ propName=’ShowInNewForm’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInNewForm’ propName=’ShowInNewForm’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInDispForm
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInDisplayForm’ propName=’ShowInDisplayForm’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInDisplayForm’ propName=’ShowInDisplayForm’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInEditForm
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInEditForm’ propName=’ShowInEditForm’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInEditForm’ propName=’ShowInEditForm’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInListSettings
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInListSettings’ propName=’ShowInListSettings’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInListSettings’ propName=’ShowInListSettings’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInVersionHistory
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInVersionHistory’ propName=’ShowInVersionHistory’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInVersionHistory’ propName=’ShowInVersionHistory’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// ShowInViewForms
			tdStr += "<td "+textStyleBody+">"+
						"<input type=’radio’ name=’"+name+"_showInViewForms’ propName=’ShowInViewForms’ value=’TRUE’ /><label>Yes</label><br />"+
						"<input type=’radio’ name=’"+name+"_showInViewForms’ propName=’ShowInViewForms’ value=’FALSE’ /><label>No</label><br />"+
						"</td>";
		// Lookup columns change list assosiation
			if($(this).attr(’Type’)==’Lookup’ || $(this).attr(’Type’)==’LookupMulti’ && $(this).attr(’List’)!=undefined){
				tdStr += "<td "+textStyleBody+">"+listSelectLookupReassosiation+"</td>";
			}else{
				tdStr += "<td "+textStyleBody+"> </td>";
			}
		// Save changes button
		tdStr+="<td style=’border-bottom:1px silver solid;text-align:center’><input onclick=’javascript:submitChangedFieldProperties(\"tr_"+name+"\")’ type=’button’ value=’save’></td>";
		// Append to table
		$("#insertListfieldControlsHere").append("<tr id=’tr_"+name+"’ name=’"+name+"’ dispName=’"+dispName+"’ fieldType=’"+fieldType+"’>"+tdStr+"</tr>");
	// Lookup column list re-association
		if($(this).attr(’Type’)==’Lookup’ || $(this).attr(’Type’)==’LookupMulti’ && $(this).attr(’List’)!=undefined){
			var currentListAssociation = $(this).attr(’List’).toLowerCase();
			$("#insertListfieldControlsHere tr[id='tr_"+name+"'] select[propName='List'] option").each(function(i,opt){
				if(opt.value.toLowerCase()==currentListAssociation){
					opt.selected=true;
				}
			});
		}
	//  Check the correct radio button for existing properties
		// Hidden
		var hidden = $(this).attr(’Hidden’);
		if(hidden!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_hidden'][value='"+hidden+"']").attr(’checked’,true);
		}
		// ReadOnly
		var readOnly = $(this).attr(’ReadOnly’);
		if(readOnly!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_readOnly'][value='"+readOnly+"']").attr(’checked’,true);
		}
		// Required
		var required = $(this).attr(’Required’);
		if(required!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_required'][value='"+required+"']").attr(’checked’,true);
		}
		// ShowInNewForm
		var newForm = $(this).attr(’ShowInNewForm’);
		if(newForm!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInNewForm'][value='"+newForm+"']").attr(’checked’,true);
		}
		// ShowInDispForm
		var dispForm = $(this).attr(’ShowInDisplayForm’);
		if(dispForm!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInDisplayForm'][value='"+dispForm+"']").attr(’checked’,true);
		}
		// ShowInEditForm
		var editForm = $(this).attr(’ShowInEditForm’);
		if(editForm!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInEditForm'][value='"+editForm+"']").attr(’checked’,true);
		}
		// ShowInListSettings
		var listSettings = $(this).attr(’ShowInListSettings’);
		if(listSettings!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInListSettings'][value='"+listSettings+"']").attr(’checked’,true);
		}
		// ShowInVersionHistory
		var versionHistory = $(this).attr(’ShowInVersionHistory’);
		if(versionHistory!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInVersionHistory'][value='"+versionHistory+"']").attr(’checked’,true);
		}
		// ShowInViewForms
		var viewForms = $(this).attr(’ShowInViewForms’);
		if(viewForms!=’undefined’){
			$("#insertListfieldControlsHere input[name='"+name+"_showInViewForms'][value='"+viewForms+"']").attr(’checked’,true);
		}
	});
}
function customGetList(listName){
	xmlStr = [];
	xmlStr.push(’<GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/">’);
	xmlStr.push(’<listName>’ + listName + ‘</listName>’);
	xmlStr.push(’</GetList>’);
	xmlStr = xmlStr.join(”);
	var result = {success:false,fields:[]};
	wrapSoapRequest(wsBaseUrl + ‘lists.asmx’, ‘http://schemas.microsoft.com/sharepoint/soap/GetList’, xmlStr, function(data){
		if($(’ErrorText’, data).length > 0) {
			result.success = false;
		}else{
			result.success = true;
			result.name = $(’List’, data).attr(’Name’);
			var arrOfTypesToSkip = ['Computed','Calculated'];
			$(’Field’, data).each(function(){
				// Title field
				if($(this).attr(’StaticName’)==’Title’){
					result.fields.push($(this));
				}else if($(this).attr(’FromBaseType’)!=’TRUE’ && $(this).attr(’Sealed’)!=’TRUE’ && $(this).attr(’DisplayName’)!=undefined && $.inArray($(this).attr(’Type’),arrOfTypesToSkip)==-1){
					result.fields.push($(this));
				}
			});
		}
	});
	return result;
}
function submitChangedFieldProperties(trId){
var trObj = $("#"+trId);
var name = trObj.attr(’name’);
var currFieldObj = fieldsObj[name];
var changed = false;
	trObj.find(’input:radio:checked’).each(function(){
		var propName = $(this).attr(’propName’);
		var checked = $(this).attr(’checked’);
		var val = $(this).val();
		if(currFieldObj.attr(propName)!=val){
			currFieldObj.attr(propName,val);
			changed = true;
		}
	});
	// Lookup column list re-association
	trObj.find(’select option:selected’).each(function(){
		var propName = $(this).parent().attr(’propName’);
		var val = $(this).val();
		if(currFieldObj.attr(propName)!=val && val!=”){
			currFieldObj.attr(propName,val);
			changed = true;
		}
	});
	// Convert xml object to string
	if(window.ActiveXObject){
		var stringFromXML = currFieldObj[0].xml;
	}else{
		var stringFromXML = (new XMLSerializer()).serializeToString(currFieldObj[0]);
	}	
	if(changed){
		var saveOK = onclickUpdateFieldProperties(listName,stringFromXML);
		if(saveOK.success){
			trObj.find(’input:button’).hide().parent().html("<span>Saved OK</span>").parent().css({’background-color’:'#A6D785′});
			trObj.find(’input:button’).attr(’disabled’,true);
		}else if(!saveOK.success){
			trObj.find(’input:button’).hide().parent().html("<span>Error occured</span>").parent().css({’background-color’:'#F08080′});
			trObj.find(’input:button’).attr(’disabled’,true);
		}
	}else{
		alert("You haven’t made any changes!");
	}
}
function onclickUpdateFieldProperties(listName,fieldXML){
	xmlStr = [];
	xmlStr.push(’<UpdateList xmlns="http://schemas.microsoft.com/sharepoint/soap/">’);
	xmlStr.push(’<listName>’ + listName + ‘</listName>’);
	xmlStr.push(’<listProperties><List/></listProperties>’);
	xmlStr.push(’<newFields><Fields></Fields></newFields>’);
	xmlStr.push(’<updateFields>’);
	xmlStr.push(’<Fields>’);
    xmlStr.push(’<Method ID="1">’);
 	xmlStr.push(fieldXML);
    xmlStr.push(’</Method>’);
    xmlStr.push(’</Fields>’);
	xmlStr.push(’</updateFields>’);
	xmlStr.push(’<deleteFields><Fields></Fields></deleteFields>’);
	xmlStr.push(’</UpdateList>’);
	xmlStr = xmlStr.join(”);
	var result = {success:false};
	wrapSoapRequest(wsBaseUrl + ‘lists.asmx’, ‘http://schemas.microsoft.com/sharepoint/soap/UpdateList’, xmlStr, function(data){
		if ($(’ErrorText’, data).length > 0) {
			result.success = false;
		} else {
			result.success = true;
		}
	});
	return result;
}
function wrapSoapRequest(webserviceUrl,requestHeader,soapBody,successFunc){
	var xmlWrap = [];
		xmlWrap.push("<?xml version=’1.0′ encoding=’utf-8′?>");
		xmlWrap.push("<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/’>");
		xmlWrap.push("<soap:Body>");
		xmlWrap.push(soapBody);
		xmlWrap.push("</soap:Body>");
		xmlWrap.push("</soap:Envelope>");
		xmlWrap = xmlWrap.join(”);
	$.ajax({
		async:false,
		type:"POST",
		url:webserviceUrl,
		contentType:"text/xml; charset=utf-8",
		processData:false,
		data:xmlWrap,
		dataType:"xml",
		beforeSend:function(xhr){
			xhr.setRequestHeader(’SOAPAction’,requestHeader);
		},
		success:successFunc
	});
}
</script>
 Guest Author: Alexander Bautz
Guest Author: Alexander Bautz
SharePoint JavaScripts
Alexander Bautz is a SharePoint consultant/developer (mainly JavaScript/jQuery solution) living in Norway. Alexander spends a lot of his spare time blogging on the same topics. His focus area is "end user customizations" with no (or as little as possible) server side code.
- Add character or word count to SharePoint multi line plain text field and restrict input length
- Autocomplete for SharePoint people picker
- Edit SharePoint Field properties, including lookup column list association, with client side code only
- Convert a standard SharePoint lookup column to a full blown cross site lookup using javascript only








Alexander;
Fascinating solution, but on which page(s) do you actually put the CEWP?
-Eric
Sorry, disregard the stupid question… missed the basic intent of providing a web part page from which any list can be configured. Thanks for a very elegant solution!
-Eric
Hi Alexander,
Thanks for this post. This code will be very useful to me, however since I’m a neophyte when it comes to javascript and Jquery so I want to make sure I understand what i need to do here.
When you say to update the reference to Jquery, do you mean that I would need to have Jquery installed on my SharePoint Web Front End Server and then change the path from
to the location of my jquery .js file?
Drew;
jQuery isn’t “installed”, it’s just a reference file full of script. In Alexander’s code he’s calling the script from a library in his SharePoint site collection. Since his relative URL says “/test/English/Javascript/jquery-1.3.2.min.js” the absolute URL would be something like “http://toplevelsite/test/English/Javascript/jquery-1.3.2.min.js”.
You can either put jQuery into a document library that’s globally accessible from somewhere near the top level of your site collection (recommended) or call it from an online source like http://code.jquery.com/jquery-1.4.2.min.js. After that you’d modify the reference in the script to your chosen location, as in “http://toplevelsite/jquerylibrary/jquery-1.4.2.min.js” (using the server relative URL of course).
I’m not expert enough to fully understand HOW Alexander’s script works (that’s the beauty of jQuery for power users like me) but I’ve implemented it and it works like a charm!
-Eric
You might also guide me on the issue of where to install the actual .js file on my server, assuming my previous assumption is correct!
With thanks!
Great post!
Love it! I can only do Client side work, so I can’t install Office Toolbox from codeplex.
Is there any combination of boxes that allow editing on new form, but display only on edit and disp forms? That would rock!
Thanks for all the great posts!
Hi Alex, very nice solution is really fantastic!!
works perfect… but…
I tried to modify a workflow associated to the list and unfortunately see that all the fields I’ve modified (hide from a form) have disapear!!!
if I try to add a new condition or action within the workflow I can’t see any of those fields I have modified, even if I revert the visibility to Yes doesn’t work
is that a known side effect?
maybe I did something wrong
please help!!
thanks
miguel (from Chile)
additional information on my previous message…
all the workflows are working fine, the problem is that I can’t see the fields no more on the workflow editor on Sharepoint Designer…
if anyone have experience this problem, help will be appreciated
thanks
miguel
Hi,
Sorry for the (very) late reply… I had forgot to set up notification on new comments…
This is a cross post from my original article her.
I have tested in a list and cannot replicate this error – did you find any solutions to it?
Alexander
Seems like the upper part is missing. I can’t see anything to change the jquery reference.