由于偏执的Sharepoint管理员,我们需要自己克隆SOAP API上的现有列表。是否有(简单)方法来完成此任务?我们已经有了一个基于Python的API来访问SOAP上的列表项和字段描述 - 我不确定这是否足以创建一个1:1的副本...是否有更好的更直接的方式?
答案 0 :(得分:0)
没有一种“简单”的方法可以做到这一点。您必须从Web服务检索架构,并在将其实例化到其他位置之前对其进行修改。它取决于克隆操作的目标位置,但无论目的地如何,您都必须在某种程度上更改模式。
除此之外,它取决于列表的自定义方式。如果您使用自定义内容类型,则必须克隆它们,并遇到所有相同的困难。如果它有自定义视图,则必须使用它们执行相同的操作。如果你有自己的观点自定义表格,我认为你已经被软管了。我不知道从Web服务界面获取这些表单的任何方法。
答案 1 :(得分:0)
克隆列表的最简单方法是将列表保存为模板(在sharepoint的列表设置中)并包含它的内容。通过这种方式,您可以获得“列表模板”,您可以在任何地方下载和安装。
通过另一个系统克隆列表数据是一项完全不同的任务,但并非不可能。我使用Camelot .NET Connector for SharePoint(http://www.bendsoft.com/net-sharepoint-connector/)在几个SharePoint安装之间使用PHP复制数据。
SharePoint安装的外向接口是一个非常简单的WCF服务。例如
public string ExecuteScalar(string sql)
{
try
{
using (SharePointConnection connection = new SharePointConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["sharepoint_sales"].ConnectionString))
{
connection.Open();
using (SharePointCommand command = new SharePointCommand(sql, connection))
{
var returnValue = command.ExecuteScalar();
if (returnValue != null)
{
return returnValue.ToString();
} else {
return null;
}
}
}
}
catch (Exception e)
{
//add your own exception handling
return null;
};
}
public bool ExecuteNonQuery(string sql)
{
try
{
using (SharePointConnection connection = new SharePointConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["sharepoint_sales"].ConnectionString))
{
connection.Open();
using (SharePointCommand command = new SharePointCommand(sql, connection))
{
command.ExecuteNonQuery();
return true;
}
}
}
catch (Exception e)
{
//add your own exception handling
return false;
};
}
要将php-world中的内容插入到SharePoint代码中,可以看起来像这样
$client = new SoapClient("http://wcf.labs.trikks.com/Camelot.svc?wsdl");
$sql = array('sql' => "INSERT INTO contactform (title,email,company,message)
VALUES ('Name','email@example.net','Company','A test message!')");
$post = $client->ExecuteNonQuery($sql);
echo($post->ExecuteNonQueryResult); // true (1) on success
因此,检索和插入数据变得非常简单。
我可以编写一些示例.net服务来演示列表同步,如果它能帮到你的话。