2012-07-24 26 views
0

我想通過代碼連接一個內容類型,(不要問爲什麼),大聲笑。該功能可以正常工作,新列可以很好地添加到視圖中。通過代碼創建內容類型。新窗體是空的

由於某種原因,在NEW或編輯窗體中新的字段源名稱不存在。當我轉到列表設置,高級時,它表示管理內容類型=否,但我在代碼上將其設置爲是。

我沒有想法。

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; 

     } 
+0

你爲什麼要這樣做?!?!?....只有開玩笑:D ......這可能沒有什麼幫助,但你應該不要調用sourceList.Update ()也適用於sourceList.ContentTypesEnabled = true; 生效? – Truezplaya 2012-07-24 14:41:42

+0

我試過了,但不是問題所在。 :( – 2012-07-24 14:56:27

+0

我編輯的問題,幷包括完整的代碼 – 2012-07-24 14:57:44

回答

0

的問題是,當我創建的內容類型,它是基於文檔,而不是項目,所以我改變了一部分,這和它的工作。

SPContentType itemCtype = currentWeb.AvailableContentTypes[SPBuiltInContentTypeId.Item]; 
       SPContentType sourceContentType = new SPContentType(itemCtype, currentWeb.ContentTypes, SponsoringCommon.Constants.CONTENTTYPES_SOURCES_NAME); 
       sourceContentType = currentWeb.ContentTypes.Add(sourceContentType); 
0
sourceList.ContentTypesEnabled = true; 
sourceContentType.Update(true); 

//Update the sourceList here this before you add the CT 
sourceList.ContentTypes.Add(sourceContentType);    
+0

解決方案沒有工作 – 2012-07-25 08:10:06

相關問題