I am trying to connect a content type by code, (dont ask why), lol. The feature works fine, the new column is added fine to the views.
For some reason in the NEW or Edit form the new Field Source Name is not present. When I go to List Settings, Advanced, it says Manage Content Types= NO, but I set it to Yes on the code.
I am out of ideas.
private static void RemoveProductListAndCreateProductAndSourceList(SPWeb currentWeb)
{
currentWeb.AllowUnsafeUpdates = true;
#region Adds/Removes the product and source list
if (currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_PRODUCT_NAME) != null)
{
currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_PRODUCT_NAME).Delete();
currentWeb.Lists.Add(SponsoringCommon.Constants.LISTNAMES_PRODUCT_NAME, string.Empty, SPListTemplateType.GenericList);
}
if (currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_SOURCES_NAME) != null)
{
currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_SOURCES_NAME).Delete();
currentWeb.Lists.Add(SponsoringCommon.Constants.LISTNAMES_SOURCES_NAME, string.Empty, SPListTemplateType.GenericList);
}
else
{
currentWeb.Lists.Add(SponsoringCommon.Constants.LISTNAMES_SOURCES_NAME, string.Empty, SPListTemplateType.GenericList);
}
#endregion
#region HIde the title columns
SPList productList = currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_PRODUCT_NAME);
SPField titleField = productList.Fields.GetField("Title");
titleField.ShowInEditForm = false;
titleField.ShowInDisplayForm = false;
titleField.ShowInNewForm = false;
titleField.Update();
SPList sourceList = currentWeb.Lists.TryGetList(SponsoringCommon.Constants.LISTNAMES_SOURCES_NAME);
titleField = sourceList.Fields.GetField("Title");
titleField.ShowInEditForm = false;
titleField.ShowInDisplayForm = false;
titleField.ShowInNewForm = false;
titleField.Update();
#endregion
#region Add Source content type if it doesnt exist.
SPContentType sourceContentType = currentWeb.ContentTypes[SponsoringCommon.Constants.CONTENTTYPES_SOURCES_NAME];
SPContentTypeId sourceContentTypeid = new SPContentTypeId(SponsoringCommon.Constants.CONTENTTYPES_SOURCE_ID);
if (sourceContentType == null)
{
sourceContentType = new SPContentType(sourceContentTypeid,
currentWeb.ContentTypes,
SponsoringCommon.Constants.CONTENTTYPES_SOURCES_NAME);
currentWeb.ContentTypes.Add(sourceContentType);
}
#endregion
#region Removes the link from the content type column called Product Name
SPContentType productCT = currentWeb.ContentTypes[SponsoringCommon.Constants.CONTENTTYPES_PRODUCT_NAME];
productCT.DeleteFieldRefFromContentType(currentWeb.Fields[SponsoringCommon.Constants.FIELDS_PRODUCT_NAMEOLD]);
#endregion
#region New fields properties
SPFieldCurrency amountField = (SPFieldCurrency)currentWeb.Fields.GetFieldByInternalName(SponsoringCommon.Constants.FIELDS_PRICE_NAME);
amountField.ShowInNewForm = true;
amountField.ShowInEditForm = true;
amountField.ShowInDisplayForm = true;
string productFieldName = currentWeb.Fields.Add(SponsoringCommon.Constants.FIELDS_PRODUCT_NAMENEW, SPFieldType.Text, true);
SPField productField = currentWeb.Fields.GetFieldByInternalName(productFieldName);
productField.Group = "$Resources:SPNLSponsoring,Field_NationaleLoterijSponsoringColumns_Group";
string schemaXmlWithResourceTokens = productField.SchemaXmlWithResourceTokens;
int startIndex = schemaXmlWithResourceTokens.IndexOf("\"", schemaXmlWithResourceTokens.IndexOf("DisplayName=\"")) + 1;
int endIndex = schemaXmlWithResourceTokens.IndexOf("\"", startIndex);
int substringLength = endIndex - startIndex;
string value = @"DisplayName=\" + schemaXmlWithResourceTokens.Substring(startIndex, substringLength);
schemaXmlWithResourceTokens = schemaXmlWithResourceTokens.Replace(value, @"DisplayName=\$Resources:SPNLSponsoring,Field_Product_Name");
productField.SchemaXml = schemaXmlWithResourceTokens;
productField.ShowInNewForm = true;
productField.ShowInEditForm = true;
productField.ShowInDisplayForm = true;
SPFieldLink fieldLinkProductName = new SPFieldLink(productField);
SPFieldLink fieldLinkPriceName = new SPFieldLink(amountField);
productCT.FieldLinks.Add(fieldLinkProductName);
productCT.FieldLinks.Reorder(new string[] {productField.InternalName,amountField.InternalName}); //Reorder fields in the content type
productCT.Update(true);
productList.ContentTypesEnabled = true;
productList.ContentTypes.Add(productCT);
SPContentTypeCollection currentOrder = productList.ContentTypes;
List<SPContentType> result = new List<SPContentType>();
foreach (SPContentType ct in currentOrder)
{
if (ct.Name.Contains(SponsoringCommon.Constants.CONTENTTYPES_PRODUCT_NAME))
{
result.Add(ct);
}
}
productList.RootFolder.UniqueContentTypeOrder = result;
productList.RootFolder.Update();
#endregion
string sourceFieldName = currentWeb.Fields.Add(SponsoringCommon.Constants.FIELDS_SOURCE_NAME, SPFieldType.Text, true);
SPField sourceField = currentWeb.Fields.GetFieldByInternalName(sourceFieldName);
sourceField.Group = "$Resources:SPNLSponsoring,Field_NationaleLoterijSponsoringColumns_Group";
schemaXmlWithResourceTokens = sourceField.SchemaXmlWithResourceTokens;
startIndex = schemaXmlWithResourceTokens.IndexOf("\"", schemaXmlWithResourceTokens.IndexOf("DisplayName=\"")) + 1;
endIndex = schemaXmlWithResourceTokens.IndexOf("\"", startIndex);
substringLength = endIndex - startIndex;
value = @"DisplayName=\" + schemaXmlWithResourceTokens.Substring(startIndex, substringLength);
schemaXmlWithResourceTokens = schemaXmlWithResourceTokens.Replace(value, @"DisplayName=\$Resources:SPNLSponsoring,Field_Source_Name");
sourceField.SchemaXml = schemaXmlWithResourceTokens;
sourceField.ShowInEditForm = true;
sourceField.ShowInNewForm = true;
sourceField.ShowInDisplayForm = true;
SPFieldLink fieldLinkSourceName = new SPFieldLink(sourceField);
sourceContentType.FieldLinks.Add(fieldLinkSourceName);
sourceContentType.Update(true);
sourceList.ContentTypesEnabled = true;
sourceContentType.Update(true);
sourceList.ContentTypes.Add(sourceContentType);
SPContentTypeCollection currentOrderSourceList = sourceList.ContentTypes;
List<SPContentType> resultSourceList = new List<SPContentType>();
foreach (SPContentType ct in currentOrderSourceList)
{
if (ct.Name.Contains(SponsoringCommon.Constants.CONTENTTYPES_SOURCES_NAME))
{
resultSourceList.Add(ct);
}
}
sourceList.RootFolder.UniqueContentTypeOrder = resultSourceList;
sourceList.RootFolder.Update();
#region Modify views.
SPView vwAllItemsProductList = productList.GetSafeViewByName(SponsoringCommon.Constants.VIEWS_ALL_ITEMS);
SPViewFieldCollection colvwAllItemsProductList = vwAllItemsProductList.ViewFields;
if (vwAllItemsProductList.ViewFields.Exists("LinkTitle"))
{
vwAllItemsProductList.ViewFields.Delete("LinkTitle");
}
colvwAllItemsProductList.Add(productField);
colvwAllItemsProductList.Add(amountField);
vwAllItemsProductList.Update();
SPView vwAllItemsSourceList = sourceList.GetSafeViewByName(SponsoringCommon.Constants.VIEWS_ALL_ITEMS);
SPViewFieldCollection colvwAllItemsSourceList = vwAllItemsSourceList.ViewFields;
if (vwAllItemsSourceList.ViewFields.Exists("LinkTitle"))
{
vwAllItemsSourceList.ViewFields.Delete("LinkTitle");
}
colvwAllItemsSourceList.Add(sourceField);
vwAllItemsSourceList.Update();
#endregion
currentWeb.AllowUnsafeUpdates = false;
}