2013-07-25 41 views
2

创建columnField在SharePoint从代码 添加的内容类型到SharePointXmlConvert和SharePoint内部字段不等于

While getting the field name from the Sharepoint i get the following: 
PD_FILE_PART_x002e_PD_POPEN_DATE_x003b_DOCSADM_x002e_PD_FILE_PART_x002e_SYSTEM_ID 

while setting the same field from the Code using: 

Here **strContentTypeField** passed parameter from another function. 

SPWeb web = null; 
      try 
      { 
       web = DEUtilityInternal.CreateSPWebObject(siteUrl); 
       SPList spList = web.Lists.GetList(new Guid(strListName), false); 
       if (spList.ContentTypes.Count > 0) 
       { 
        for (int i = 0; i < fieldsToBeAdded.Count; i++) 
        { 
         string strContentTypeField = fieldsToBeAdded[i]; 
         if (spList.ContentTypes[contentTypeName].FieldLinks[strContentTypeField] != null) continue; 

         if (!spList.Fields.ContainsField(strContentTypeField)) 
         { 
          if (!spList.Fields.ContainsField(XmlConvert.EncodeName(strContentTypeField))) 
           continue; 
          else 
           strContentTypeField = XmlConvert.EncodeName(strContentTypeField); 
         } 
        } 
       } 
      } 

这里 XmlConvert.EncodeName(strContentTypeField)得到以下输出:

PD_FILE_PART_x002e_PD_POPEN_DATE_x003B_DOCSADM_x002e_PD_FILE_PART_x002e_SYSTEM_ID 

so while comparing the field I cannot return the value true. 

What can I do for getting the value equal?? 

Thanx提前

回答

2

你可以这样实现:)

var encodedFieldName=XmlConvert.EncodeName(strContentTypeField); 
         // SharePoint fields are case sensitive , xmlconvert provides Hex characters in upper case while sharepoint stores in lowercase 
         encodedFieldName = Regex.Replace(encodedFieldName, @"[_][x][A-Fa-f0-9]+[_]", m =>m.ToString().ToLower()); 
         if (!spList.Fields.ContainsField(encodedFieldName)) 
         { 
          encodedFieldName = EncodeToInternalField(encodedFieldName); 
          if (!spList.Fields.ContainsField(encodedFieldName)) 
           continue; 
          strContentTypeField = encodedFieldName; 
         } 

private string EncodeToInternalField(string toEncode) 
    { 

     if (toEncode != null) 
     {    

      StringBuilder encodedString = new StringBuilder(); 
      foreach (char chr in toEncode.ToCharArray()) 
      { 
       string encodedChar = HttpUtility.UrlEncodeUnicode(chr.ToString());     

       if (encodedChar == "+" || encodedChar == " ") 
       { 
        encodedString.Append("_x0020_"); 
       } 
       else if (encodedChar == ".") 
       { 
        encodedString.Append("_x002e_"); 
       } 
       else 
       { 
        encodedString.Append(chr); 
       } 

      } 
      return encodedString.ToString(); 
     } 
     return null; 
    } 
+0

谢谢,Binayacharya :)最后我为我工作 – Adhikari

+0

是@Binayachary ...它也适用于我!我完全按照你所说的去做了......它的工作原理与我想要的一样! – MrClan