正在开展一个项目,我想从SharePoint中的不同列表中提取数据,并将这些数据导入到单个列表中。该列表到处都有相同的属性;它位于不同的地方。
我有一个列表,其中包含这些网站的所有网站名称和网址。我们的想法是从这个列表中读取所有站点名称,然后转到这些站点中的每一个,并尝试从该特定站点下的列表中提取信息,同步事项。从上周的过程中提取的数据不需要再次提取。
有人可以指导我解释这个解决方案的最佳方法吗?
使用SharePoint 2007
答案 0 :(得分:0)
你可能最好看一下Data View Web Part (DVWP) and rollups
有关的一个常见话题 SharePoint,是如何汇总的 从子站点到顶部的信息 级别网站,只是一般如何 显示另一个网站上的数据 站点。
答案 1 :(得分:0)
我有这种情况。我创建了一个webpart,通过sharepoint Web服务发送我的整合列表的信息。 我在每个sharepoint站点安装了webpart,这个webpart获取数据(当它过时时)并通过lists.asmx webservice在合并列表中插入。见http://msdn.microsoft.com/en-us/library/lists(v=office.12).aspx。然后,我创建一个有权在我的合并站点中的合并列表中写入的用户,并在它将在列表中执行插入时使用它来验证我的webpart。
我在Visual Studio 2005中做过类似的事情,引用了Sharepoint dll。
public void InsertToPainel(string strID, string user, string password)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
try
{
//WSPainel is the WebReference to http://<site>/_vti_bin/Lists.asmx.
using (WSPainel.Lists lstPainel = new webPartSender.WSPainel.Lists())
{
lstPainel.UseDefaultCredentials = true;
lstPainel.Credentials = new System.Net.NetworkCredential(user, password);
#region Make the fields in consolidation list
Dictionary<string, string> fieldsNamesAndValues = new Dictionary<string, string>();
fieldsNamesAndValues.Add("ID", strID);//Recuperar quando for atualizar ou incluir New
fieldsNamesAndValues.Add("URL", SPContext.Current.Web.Url + ", " + splInfGerItems[0]["Title"].ToString()); //The link of the actual site that is sending the information
fieldsNamesAndValues.Add("Comments", splStatusItems[0]["Title"].ToString());//In my case, I just need the last result.
#endregion
//It will make the register in CAML format and updates the lists.
lstPainel.UpdateListItems(_listaPainel, NewCAMLRegister(fieldsNamesAndValues, strID));
}
}
catch (Exception e)
{
//Exception
}
});
}
private XmlNode NewCAMLRegister(Dictionary<string, string> FieldsNamesAndValues, string strID)
{
try
{
XmlDocument xdMensagem = new XmlDocument();
XmlElement xeBatch = xdMensagem.CreateElement("Batch");
XmlNode xnMethod = xdMensagem.CreateElement("Method");
xdMensagem.AppendChild(xeBatch);
xeBatch.AppendChild(xnMethod);
XmlAttribute xaID = xdMensagem.CreateAttribute("ID");
XmlAttribute xaCmd = xdMensagem.CreateAttribute("Cmd");
xaID.Value = "1"; //Id do comando no Batch.
if (strID == "New")
{
xaCmd.Value = "New";
}
else
{
xaCmd.Value = "Update";
}
xnMethod.Attributes.Append(xaID);
xnMethod.Attributes.Append(xaCmd);
foreach (KeyValuePair<string, string> strfieldname in FieldsNamesAndValues)
{
XmlNode xnField = xdMensagem.CreateElement("Field");
XmlAttribute xaName = xdMensagem.CreateAttribute("Name");
xaName.Value = strfieldname.Key;//Nome do Campo
xnField.Attributes.Append(xaName);
xnField.InnerText = strfieldname.Value;//Valor do Campo
xnMethod.AppendChild(xnField);
}
//"<Method ID=\"1\" Cmd=\"New\">" + "<Field Name=\"ID\">New</Field>" + "<Field Name=\"Title\">This is a test</Field>" + "</Method>";
return xdMensagem;
}
catch (Exception e)
{
//Exception
return null;
}
}
我希望它有所帮助。