基于可变站点命名从不同站点合并SharePoint中的数据

时间:2010-06-11 11:12:52

标签: sharepoint

正在开展一个项目,我想从SharePoint中的不同列表中提取数据,并将这些数据导入到单个列表中。该列表到处都有相同的属性;它位于不同的地方。

我有一个列表,其中包含这些网站的所有网站名称和网址。我们的想法是从这个列表中读取所有站点名称,然后转到这些站点中的每一个,并尝试从该特定站点下的列表中提取信息,同步事项。从上周的过程中提取的数据不需要再次提取。

有人可以指导我解释这个解决方案的最佳方法吗?

使用SharePoint 2007

2 个答案:

答案 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;

            }
        }

我希望它有所帮助。