0

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;

        }
4

2 に答える 2

0

問題は、コンテンツタイプを作成するときに、アイテムではなくドキュメントに基づいていたため、その部分をこれに変更して機能したことです。

  SPContentType itemCtype = currentWeb.AvailableContentTypes[SPBuiltInContentTypeId.Item];
                SPContentType sourceContentType = new SPContentType(itemCtype, currentWeb.ContentTypes, SponsoringCommon.Constants.CONTENTTYPES_SOURCES_NAME);
                sourceContentType = currentWeb.ContentTypes.Add(sourceContentType);
于 2012-07-25T11:20:50.123 に答える
0
sourceList.ContentTypesEnabled = true; 
sourceContentType.Update(true); 

//Update the sourceList here this before you add the CT 
sourceList.ContentTypes.Add(sourceContentType);               
于 2012-07-24T15:13:22.537 に答える