Sharepoint 2010 中与 ListData.svc 一起使用的列表名称规则
Rules for the list name used with ListData.svc in sharepoint 2010
我想通过 rest API 获取 Sharepoint 2010 列表的内容。但是我的列表的名称确实是有线的(它们包含各种特殊字符,例如:“,”,“?”,“-”,“/”,“(”等)我无法更改它们。
示例:1) 索赔提醒,GT
2) z - Det - andt
3) z - 钢笔 - afregng fra 3860
4) z - Grup/liv moget? (克里德)
我尝试了以下休息 api url :
http://domain/_vti_bin/listdata.svc/"+encodeURIComponent(listName)+"/
当 listName 很简单时,即。没有特殊字符和空格,我得到了输出。但是当它包含上述特殊字符时,就会报错。
但只解决了撇号而不是其他特殊字符。
请帮忙。
您可以使用下面的JavaScript函数来转换列表名称。
function convertListName(listName){
var newListName="";
var array=listName.split(/[.\-_, '?()$%^!@~+`|={}<>\[\]/]/g);
for(var i=0;i<array.length;i++){
newListName+=array[i].charAt(0).toUpperCase() + array[i].slice(1)
}
if(!isNaN(newListName.charAt(0))){
newListName="c_"+newListName;
}
return newListName;
}
如果你使用C#代码,我们可以使用Microsoft.SharePoint.Linq.Util.GetFriendlyName方法。
internal static string GetFriendlyName(string name)
{
string[] array = Regex.Split(name, "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Cf}]", RegexOptions.Compiled);
for (int i = 0; i < array.Length; i++)
{
if (!string.IsNullOrEmpty(array[i]) && char.IsLower(array[i], 0))
{
array[i] = char.ToUpper(array[i][0], CultureInfo.InvariantCulture) + ((array[i].Length > 0) ? array[i].Substring(1) : string.Empty);
}
}
name = string.Join(string.Empty, array);
if (string.IsNullOrEmpty(name))
{
throw new InvalidOperationException(Resources.GetString("CannotConvertNameToValidIdentifier", new object[]
{
name
}));
}
if (Regex.IsMatch(name[0].ToString(), "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]", RegexOptions.Compiled))
{
name = "c_" + name;
}
if (name.Length > 128)
{
name = name.Substring(0, 128);
}
return name;
}
我想通过 rest API 获取 Sharepoint 2010 列表的内容。但是我的列表的名称确实是有线的(它们包含各种特殊字符,例如:“,”,“?”,“-”,“/”,“(”等)我无法更改它们。
示例:1) 索赔提醒,GT 2) z - Det - andt 3) z - 钢笔 - afregng fra 3860 4) z - Grup/liv moget? (克里德)
我尝试了以下休息 api url :
http://domain/_vti_bin/listdata.svc/"+encodeURIComponent(listName)+"/
当 listName 很简单时,即。没有特殊字符和空格,我得到了输出。但是当它包含上述特殊字符时,就会报错。
但只解决了撇号而不是其他特殊字符。
请帮忙。
您可以使用下面的JavaScript函数来转换列表名称。
function convertListName(listName){
var newListName="";
var array=listName.split(/[.\-_, '?()$%^!@~+`|={}<>\[\]/]/g);
for(var i=0;i<array.length;i++){
newListName+=array[i].charAt(0).toUpperCase() + array[i].slice(1)
}
if(!isNaN(newListName.charAt(0))){
newListName="c_"+newListName;
}
return newListName;
}
如果你使用C#代码,我们可以使用Microsoft.SharePoint.Linq.Util.GetFriendlyName方法。
internal static string GetFriendlyName(string name)
{
string[] array = Regex.Split(name, "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Cf}]", RegexOptions.Compiled);
for (int i = 0; i < array.Length; i++)
{
if (!string.IsNullOrEmpty(array[i]) && char.IsLower(array[i], 0))
{
array[i] = char.ToUpper(array[i][0], CultureInfo.InvariantCulture) + ((array[i].Length > 0) ? array[i].Substring(1) : string.Empty);
}
}
name = string.Join(string.Empty, array);
if (string.IsNullOrEmpty(name))
{
throw new InvalidOperationException(Resources.GetString("CannotConvertNameToValidIdentifier", new object[]
{
name
}));
}
if (Regex.IsMatch(name[0].ToString(), "[^\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}]", RegexOptions.Compiled))
{
name = "c_" + name;
}
if (name.Length > 128)
{
name = name.Substring(0, 128);
}
return name;
}