Консолидация данных в SharePoint с разных сайтов на основе именования переменных сайтов - PullRequest
2 голосов
/ 11 июня 2010

Я работаю над проектом, в котором я хочу получить данные из разных списков в SharePoint и импортировать эти данные в один список. Список везде имеет один и тот же атрибут; он расположен на разных сайтах.

У меня есть список, который содержит все названия сайтов и URL-адреса этих сайтов. Идея состоит в том, чтобы прочитать из этого списка все имена сайтов, а затем перейти на каждый из этих сайтов и попытаться извлечь информацию из списка под этим конкретным сайтом, синхронно. Данные, извлеченные из процесса прошлой недели, не нужно извлекать снова.

Может ли кто-нибудь объяснить мне, как лучше всего использовать это решение?

Использую SharePoint 2007

Ответы [ 2 ]

0 голосов
/ 20 июля 2010

У меня есть этот сценарий. Я сделал веб-часть, которая отправляет информацию для моего списка консолидации через веб-сервисы sharepoint. Я установил веб-часть на каждом сайте sharepoint, эта веб-часть получает данные (если они устарели) и делает вставку в список консолидации через веб-сервис lists.asmx. См. http://msdn.microsoft.com/en-us/library/lists(v=office.12).aspx. Затем я создаю пользователя с правом записи в список консолидации на моем сайте консолидации и использую его для аутентификации моей веб-части, когда она выполнит вставку в список.

Я сделал что-то подобное в Visual Studio 2005, со ссылкой на dll Sharepoint.

    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;

            }
        }

Надеюсь, это поможет.

0 голосов
/ 11 июня 2010

Вам, возможно, будет лучше взглянуть на Веб-часть представления данных (DVWP) и накопительные пакеты

Распространенная тема, которую задают в SharePoint, - как свернутьинформация с под-сайтов на сайт верхнего уровня, и как обычно показывать данные с одного сайта на другом сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...