我有一个 DataTable,我想使用表的 DataRows 中的数据将新项目添加到 Sharepoint 列表。但是我无法为类型为“个人或组”的字段添加数据,因为该字段似乎需要一个 ID,而不仅仅是“姓氏,名字”。我创建了一个类来构建 CAML 以调用UpdateListItems()
,它适用于将任何其他类型的数据添加到列表中:
public class CAMLBuilder
{
List<string> nameFields;
public CAMLBuilder()
{
nameFields = new List<string>();
nameFields.Add("Requestor");
}
public XmlElement batchAddElement(DataTable addTable)
{
XmlDocument doc = new XmlDocument();
XmlElement element = doc.CreateElement("Batch");
element.SetAttribute("OnError", "Continue");
element.SetAttribute("ListVersion", "1");
element.SetAttribute("ViewName", "");
int methodCtr = 1;
string batchStr = "";
foreach (DataRow dr in addTable.Rows)
{
batchStr += "<Method ID='" + methodCtr + "' Cmd='New'>";
foreach (DataColumn dc in addTable.Columns)
{
batchStr+="<Field Name='"+dc.ColumnName+"'>" + convertName(dc.ColumnName,Convert.ToString(dr[dc])) + "</Field>";
}
batchStr+="</Method>";
methodCtr++;
}
element.InnerXml = batchStr;
return element;
}
private string convertName(string columnName,string name)
{
if (nameFields.Contains(columnName))
{
name = "-1;#" + name;
}
return name;
}
}
我在本次讨论"-1;#"
中将in视为一种解决方法,可让您避免查找此人的 ID。但它不起作用;我在返回的 XML 中收到此错误消息:convertName()
0x81020054The user does not exist or is not unique.
有没有办法构建 CAML,这样我就不需要 ID 并且可以只使用名称?