是否可以每天两次比较同一Sharepoint列表以查找更改/更改计数

是否可以每天两次比较同一Sharepoint列表以查找更改/更改计数,sharepoint,sharepoint-2007,Sharepoint,Sharepoint 2007,我是SharePoint新手,对列表比较有一个一般性问题。目前,有一个用户生成的列表不断变化,我想收集有关变化的定量数据。每天,我8点进来,5点再离开。我想知道8:00和5:00时列表中有多少项,然后能够查看结果。例如,该列表包含我需要完成的当前项目。如果我8:00进来时有20个,离开时有3个,我希望能够查看我完成85%项目和17/20的数据。 这可能吗 *注意,目前我没有SharePoint Designer或对服务器的访问权限。假设需要访问并且我可以获得,那么最好的方法是什么?Timerjo

我是SharePoint新手,对列表比较有一个一般性问题。目前,有一个用户生成的列表不断变化,我想收集有关变化的定量数据。每天,我8点进来,5点再离开。我想知道8:00和5:00时列表中有多少项,然后能够查看结果。例如,该列表包含我需要完成的当前项目。如果我8:00进来时有20个,离开时有3个,我希望能够查看我完成85%项目和17/20的数据。 这可能吗


*注意,目前我没有SharePoint Designer或对服务器的访问权限。假设需要访问并且我可以获得,那么最好的方法是什么?

Timerjob可能是一个不错的选择。这只是一点编码,只需点击列表查询所有项目并计数,然后ping一封电子邮件给某人,或者将返回的数据放在SharePoint中的某个位置

此外,我会有一个阅读周围 有关如何编写计时器作业的信息,请访问博客

为了真正得到你需要的东西,我会告诉你你需要做什么,但不会给你代码,因为你应该在问之前先尝试一下

获取spsite对象。(该对象应包含包含列表的web) 获取包含列表的web对象。 获取列表

SPList countLIst = <yourWeb>.lists["<listname or GUID>"]
以某种方式显示或保存
numberOfItems

请记住,SPContext.current.site因其上下文而无法在计时器作业中工作

希望这次延期能满足您的要求

干杯
Truez

真的没有内置的方法来做到这一点。但对于SharePoint的所有功能,有多种方法可以完成任务。由于您没有访问SP Designer或服务器本身的权限,因此阻力最小的路径可能是使用SP Web服务查询列表(例如,在上午8点)并获取项目计数,将项目计数存储(持久化)在某个位置,然后再次查询列表(下午5点),并根据最初一天的计数进行检查,并给出总数

您可以通过SP Web服务访问列表数据,网址为
http://server_name/_vti_bin/Lists.asmx
。使用类似下面的代码来获取列表计数。您可以将存储的值保存在任何位置—文本文件、本地存储、内存

注意,您需要向项目添加Web服务引用。在下面的代码中,它被命名为sp2010,但很明显,您可以根据自己的需要命名。变量listItemCount将保存您的列表计数。代码的其余部分应该是自解释的

            sp2010.Lists spList = new sp2010.Lists() { Credentials = new NetworkCredential("username", "password") };
            string listName = "YourListName"; 
            string listItemCount = string.Empty;

            XmlNode listXML = spList.GetListItems(listName, null, null, null, null, null, null);

            XmlDataDocument innerXml = new XmlDataDocument();
            innerXml.LoadXml(listXML.InnerXml);
            XmlNodeList rows = innerXml.GetElementsByTagName("rs:data");

            foreach (XmlNode attribute in rows)
                {
                    // listItemCount holds the count of your list
                    listItemCount = attribute.Attributes["ItemCount"].Value;
                }

由于OP提到他没有访问服务器的权限,我们可以假设,像您建议的那样,需要Sharepoint.dll库的解决方案(或安装包含计时器作业的解决方案)并不是他的最佳选择。谢谢!我很欣赏一个不需要服务器身份验证的答案。我将在下周对此进行调查。您需要的唯一身份验证是查看列表所需的常规凭据—仅此而已。由于它访问Web服务,您不需要在本地服务器上安装任何东西。这段代码是什么语言?C/Java?我从哪里运行程序?这是C代码。您可以从任何类型的.Net程序运行它:控制台应用程序、WinForms应用程序、ASP.Net/MVC web应用程序。创建程序后,获取答案中的URL,右键单击服务引用,单击添加服务引用,然后添加URL。给它起个名字(我把我的名字命名为sp2010)。将其添加到项目后,使用上面的代码连接到SP站点,并获取列表计数。
            sp2010.Lists spList = new sp2010.Lists() { Credentials = new NetworkCredential("username", "password") };
            string listName = "YourListName"; 
            string listItemCount = string.Empty;

            XmlNode listXML = spList.GetListItems(listName, null, null, null, null, null, null);

            XmlDataDocument innerXml = new XmlDataDocument();
            innerXml.LoadXml(listXML.InnerXml);
            XmlNodeList rows = innerXml.GetElementsByTagName("rs:data");

            foreach (XmlNode attribute in rows)
                {
                    // listItemCount holds the count of your list
                    listItemCount = attribute.Attributes["ItemCount"].Value;
                }