Add additional lookup to SharePoint field programmatically

07/11/2019 14:07

Primary field is the existing lookup field in list. It shows value from target field, but if we want to display another field, we can use dependent or additional lookup field. Here is a method to add it. Primary field is lookup field.

 

public static SPFieldLookup CreateDependentLookupField(SPWeb site, Guid fieldId, string fieldName, string staticName, string group, SPFieldLookup primaryField, string showField)
{
try
{
SPFieldLookup fieldLookup;
fieldName = fieldName.Trim();
 
if (site.AvailableFields.ContainsFieldWithStaticName(staticName))
{
fieldLookup = (SPFieldLookup)site.Fields.GetFieldByInternalName(staticName);
}
else
{
string htmlFieldXml = string.Format("<Field ID=\"{0}\" Name=\"{3}\" DisplayName=\"{1}\" StaticName=\"{3}\" Type=\"Lookup\" Sealed=\"FALSE\" Hidden=\"FALSE\" Group=\"{2}\" List=\"{4}\" ShowField=\"{5}\"/>",
fieldId, fieldName, group, staticName, primaryField.LookupList, showField);
site.Fields.AddFieldAsXml(htmlFieldXml);
 
fieldLookup = (SPFieldLookup)site.Fields.GetFieldByInternalName(staticName);
fieldLookup.PrimaryFieldId = primaryField.Id.ToString();
fieldLookup.LookupWebId = primaryField.LookupWebId;
fieldLookup.ReadOnlyField = true;
 
fieldLookup.AllowDeletion = true;
fieldLookup.Update();
}
 
return fieldLookup;
}
catch (Exception anException)
{
//log error
throw;
}
}
public static SPFieldLookup CreateDependentLookupField(SPWeb site, Guid fieldId, string fieldName, string staticName, string group, SPFieldLookup primaryField, string showField)
{
try
{
SPFieldLookup fieldLookup;
fieldName = fieldName.Trim();
 
if (site.AvailableFields.ContainsFieldWithStaticName(staticName))
{
fieldLookup = (SPFieldLookup)site.Fields.GetFieldByInternalName(staticName);
}
else
{
string htmlFieldXml = string.Format("<Field ID=\"{0}\" Name=\"{3}\" DisplayName=\"{1}\" StaticName=\"{3}\" Type=\"Lookup\" Sealed=\"FALSE\" Hidden=\"FALSE\" Group=\"{2}\" List=\"{4}\" ShowField=\"{5}\"/>",
fieldId, fieldName, group, staticName, primaryField.LookupList, showField);
site.Fields.AddFieldAsXml(htmlFieldXml);
 
fieldLookup = (SPFieldLookup)site.Fields.GetFieldByInternalName(staticName);
fieldLookup.PrimaryFieldId = primaryField.Id.ToString();
fieldLookup.LookupWebId = primaryField.LookupWebId;
fieldLookup.ReadOnlyField = true;
 
fieldLookup.AllowDeletion = true;
fieldLookup.Update();
}
 
return fieldLookup;
}
catch (Exception anException)
{
//log error
throw;
}
}