1

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

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

4

2 回答 2

1

确实没有内置的方法可以做到这一点。但是对于 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;
                }
于 2012-06-29T22:21:23.277 回答
1

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

此外,我会阅读http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx 博客,了解有关如何编写计时器作业的信息。

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

获取一个 spsite 对象。(这应该包含包含您的列表的网络)获取包含您的列表的网络对象。获取列表

SPList countLIst = <yourWeb>.lists["<listname or GUID>"]

获取列表计数

int numberOfItems = countList.items.count

以某种方式显示或保存numberOfItems

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

希望此扩展程序满足您的要求

干杯特鲁兹

于 2012-06-27T14:58:32.707 回答