XmlConvert和SharePoint Internal Field不相等

时间:2013-07-25 08:21:19

标签: c# sharepoint-2010

从Code中创建SharePoint中的columnField     向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??

提前完成

1 个答案:

答案 0 :(得分: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;
    }