通过SOAP克隆列表(定义和项目)?

时间:2011-04-06 15:30:24

标签: python sharepoint soap sharepoint-2010

由于偏执的Sharepoint管理员,我们需要自己克隆SOAP API上的现有列表。是否有(简单)方法来完成此任务?我们已经有了一个基于Python的API来访问SOAP上的列表项和字段描述 - 我不确定这是否足以创建一个1:1的副本...是否有更好的更直接的方式?

2 个答案:

答案 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服务来演示列表同步,如果它能帮到你的话。