2011-04-06 55 views
1

由於偏執Sharepoint管理員,我們有需要克隆SOAP API自己的現有列表。是否有一種(簡單)的方法來實現這一點?我們已經有了一個基於Python的API來訪問SOAP上的列表項和字段描述 - 我不確定這是否足以創建一個1:1的副本...有更好的更直接的方法嗎?通過SOAP克隆列表(定義和項目)?

+0

SharePoint 2007或2010? – 2011-04-06 15:34:49

+0

Sharepoint 2010 – 2011-04-06 15:38:10

+1

有沒有一個原因,你不是通過創建一個列表模板通過UI或列表定義與功能和創建實例「克隆」? – 2011-04-06 15:53:01

回答

0

有沒有一種「簡單」的方法來做到這一點。您必須從Web服務中檢索架構,並在將其實例化之前對其進行修改。它取決於克隆操作的目標位置,但是不管目的地如何,您都必須以某種程度更改架構。

除此之外,它取決於如何定製列表。如果您使用的是自定義內容類型,那麼您也必須克隆它們,同樣也會遇到同樣的困難。如果它具有自定義視圖,則必須對它們執行相同的技巧。如果你有自己的觀點的自定義表單,我認爲你會受到影響。我不知道有什麼方法從Web服務界面獲取這些表單。

+0

我不同意,有相當稱職的集成組件將什麼將這個任務轉換成一個簡單的sql到sql同步工作。 – 2011-04-06 20:30:11

+0

@Trikks:我很肯定本說的是克隆整個列表......不只是複製數據。目前尚不清楚OP在談論什麼。 – 2011-04-06 21:16:38

+0

@Trikks:是的 - 那裏有備份和遷移工具,但是基於問題的上下文(他提到Python和Web服務),我認爲他想要編寫自定義代碼來傳輸(通過複製)列表(模式+視圖+數據)到任意位置。這不是微不足道的。 – 2011-04-07 17:35:55

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世界到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 protected]','Company','A test message!')"); 

$post = $client->ExecuteNonQuery($sql); 
echo($post->ExecuteNonQueryResult); // true (1) on success 

所以,檢索和插入數據變得相當,好,簡單。

我可以寫一些示例.net服務來演示列表同步,如果它會幫助你。