分享

开始针对 Project 2010 进行开发

 超酷图书馆 2014-02-23

更新日期: 2011 年 3 月

摘要:探讨 Microsoft Project Server 2010 和 Microsoft Project 2010 客户端应用程序的主要开发与定制功能。Project Server 2010 具有 Windows Communication Foundation (WCF) 服务和 ASMX Web 服务两个接口,以及 Project Server 扩展的其他主要的新定制和开发功能。

适用范围: Microsoft Project Standard 2010 | Microsoft Project Professional 2010 | Microsoft Project Server 2010 | Microsoft SharePoint Server 2010 Enterprise | Microsoft Visual Studio 2010 | Microsoft SQL Server 2008

供稿人:Jim Corbin,Microsoft Corporation

目录

本文在 Project Server 2007:新开发人员平台入门 (该链接可能指向英文页面)文章的基础上对 Project 2010 相关内容进行了更新。

Project Server 2010 介绍

Microsoft Project Server 2010 是 Project Server 的第四个主要版本,它扩展了 Microsoft Office Project Server 2007 引入的新开发平台。Project Server 2010 与 SharePoint 的集成更深入,并需要具有企业版客户端访问许可证的 Microsoft SharePoint Server 2010。Project Portfolio 服务、工作流、身份验证、Web 部件、Project Web App 功能区、基于 ECMAScript (JavaScript) 的新网格控件、用于团队协作的项目网站,以及许多其他 Project Server 功能都以 SharePoint Server 2010 平台为基础。

本文简要介绍了 Project 客户端的开发,较为详细地概述了 Project Server 的开发和 Project Server 接口 (PSI) 的使用。由于 Project Server 2010 是作为 Microsoft SharePoint Server 2010 中的一项服务安装的,因此,Project Server 功能(如需求管理工作流、Project Web App 功能区和项目网站)是基于 SharePoint 功能构建的。

PSI 新增了工作流、公文包分析和业务驱动因素服务,并扩展了其他一些服务以支持新功能。这些受支持的新功能包括:部门、资源委派、改进的时间表设置和安全类别管理、多个 OLAP 多维数据集以及项目与 SharePoint 任务列表的同步。在 PSI 双接口中,Windows Communication Foundation (WCF) 服务实现了 ASMX Web 服务。基于 WCF 的服务成为分布式应用程序开发的战略方向。

Project Server 2010 建立在 Microsoft .NET Framework 3.5 之上。作为首个企业项目管理 (EPM) 系统,Project Server 2010 在可编程性方面实现了以下目标:

  • 出色的可扩展性   Project Server 2010 解决了扩展 EPM 功能的关键区域,并与 Microsoft Office 2010 产品、合作伙伴解决方案和业务线 (LOB) 应用程序实现了集成。

  • 开发平台   PSI 服务、Project Server 事件服务、Project Server 队列服务、Project Server 工作流系统、服务器端调度引擎、报告数据库,以及 SharePoint 功能(如商业智能 (BI) 中心、自定义列表和 Web 部件)共同打造一个完整的开发平台。

  • 轻松入门   熟悉 Microsoft Visual Studio、标准 SharePoint Web 部件或 Microsoft SQL Server 报告服务的开发人员可以充分利用 Project Server 开发平台的相关功能。

  • 开发人员工作效率提高   PSI 服务使用 Microsoft ADO.NET 类型化的 DataSet 对象。Visual Studio 中的 Microsoft IntelliSense 会立即显示可用于代码语句的方法、参数和字段。您可以创建、安装和测试 Project Server 工作流和 Web 部件,还可以直接在 Visual Studio 2010 内修改 Project Web App 和项目网站的许多功能。您可以使用 PSI 访问数据(如按时间分段的任务信息),而无需直接针对 Project Server 数据库进行编程。

  • “无障碍”防火墙   所有 Project 2010 客户端应用程序(包括 Project Professional 2010 和 Project Web App)均使用 HTTP 协议、SOAP 协议或借助 WCF 使用其他协议通过 PSI 服务与 Project Server 建立通信。您还可以通过用于访问整个 Internet 的外围网络中的单独 Project Web App 服务器来安全地使用 Project Server。

Project Server 2010 和 SharePoint Server 2010 提供许多优势和改进。本文向您介绍平台可编程性,并参考了 Project 2010 软件开发工具包 (SDK) 中深入的概念性文章和“操作方法”文章。

Project 文档 — 从哪里获取所需信息

Project 文档分为四大部分,每一部分面向不同的受众。开发人员可能需要阅读本文。但是,您可能经常需要用到最终用户、管理员、支持或知识库 (KB) 信息及其他 Project 下载。

有关 Project 文档的详细信息及获取其他资源的位置,请参阅查找 Project Server 2010 文档(该链接可能指向英文页面)。要获取有关如何使用 Project Server 2010 中的许多新增功能的视频,请参阅培训与学习(该链接可能指向英文页面)。有关 Microsoft 主要产品与技术(如 SharePoint、Silverlight 和 SQL Server 商业智能)的动手实验课程,请参阅 MSDN 培训课程(该链接可能指向英文页面)SharePoint 与 Silverlight 培训课程(该链接可能指向英文页面)

Project 2010 开发人员文档

以下是 Project 2010 SDK 的主要部分:

联机 Project 2010 SDK 目前仅提供英语和日语版本。日本版本将晚于英语版本数月推出。有关日语版本的信息,请参阅 http://msdn.microsoft.com/zh-cn/library/ms512767.aspx(该链接可能指向英文页面)

Project 2010 管理员文档

在 TechNet 上的 Microsoft Project Server 部分,您可以搜索有关 Project 安装、迁移和管理方面的信息。TechNet 内容包括 Project Web App 的最终用户文档。Project Server 2010 技术库还可以通过下载获得;具体请参阅编译的帮助格式的 Microsoft Project Server 2010 技术库

以下是 TechNet 中 Project 2010 的主要部分:

有关 Project Server 管理员文档的最新信息,请参阅 Enterprise Project Management 内容发布新闻(该链接可能指向英文页面)博客。

Project 2010 最终用户文档

Project Standard 和 Project Professional 中提供上下文相关帮助。要获取 VBA 帮助的更新内容,请单击“Project 帮助”窗口右下角的“连接状态”菜单,然后单击“显示来自 Office.com 的内容”。如果您在使用 Project Web App,要获取上下文相关帮助请单击页面右上角的“帮助”图标。

若要联机访问当前所有的 Project 帮助主题,请参阅以下内容:

有关各个主题的详细信息,请参阅项目工作组的官方博客:Microsoft Project 2010(该链接可能指向英文页面)

Project 2010 的支持文档和知识库文章

Microsoft 客户服务和支持团队负责维护知识库 (KB) 网站,其中提供了大量有关 Project 2010 的操作方法和疑难解答文章。

Gg607685.Tip(zh-cn,office.14).gif 提示:

有关知识库文章的主题分类列表以及指向搜索和 RSS 源页面的链接,请参阅 Microsoft Project 支持

新知识库文章即将由机器翻译成日语、法语、西班牙语和德语。客户服务与支持团队为 Project 2010 版本创建了许多新知识库文章,并对许多原有知识库文章进行了更新。

Project 支持页面提供了用于查找 Microsoft 的电子邮件、联机和电话支持的链接。

您可以在 Project 论坛(已取代新闻组)中提问问题并寻找许多问题的答案。有关论坛的一般信息,请参阅欢迎来到 MSDN 论坛。以下是 Project 的四个公共论坛:

有关 Project 支持的最新信息,请参阅 Microsoft Office Project 支持网络日志(该链接可能指向英文页面)

Project 2010 的下载

您可以通过搜索 Microsoft 下载中心来找到 Project 的所有下载资源。

查找 Project 2010 的所有下载资源

  1. 通过浏览找到 Microsoft 下载中心

  2. 在搜索文本框中键入 Project 2010,然后按 Enter

  3. 若要对搜索结果进行筛选或排序,请打开“精简结果”对话框,选择筛选器和排序参数,然后单击“执行”

若要查找适用于多个 Office 产品的下载资源,请在搜索框中键入多个产品名称。例如,搜索 Project Visio 可查找 Visio 2007 WBS 建模器。

其他 Office 产品和技术文档

您可以将 Project 2010 与其他 Microsoft Office 产品集成,以创建各种 Office 业务应用程序。

要轻松查找 2007 Microsoft Office system 产品的开发人员文档及其他文档,您可以使用交互式 Microsoft Office 2010 开发人员地图(该链接可能指向英文页面)。要获取显示所有 Office 2010 客户端和服务器产品及相关技术的 PDF 文件,请参阅 Office 2010:开发人员地图海报(该链接可能指向英文页面)

图 1 显示 Office 2010 开发人员地图的桌面应用程序页面。此交互式地图包括所有 Microsoft Office 客户端应用程序、服务器应用程序、移动应用程序、服务和 Office 365 应用程序,以及相关技术、开发工具和平台组件之间的关系。安装 Office 2010 开发人员地图后,您可以单击任何一项,查看该产品或功能的含有指向联机文档的链接的页面。



图 1. Microsoft Office 2010 开发人员地图

Office 2010 开发人员地图

使用 Project 2010 中的 VBA

尽管本文章重点介绍 Project Server 2010,但 Project Standard 和 Project Professional 中的 VBA 对象模型应用也非常广泛。您可以借助 VBA 中的宏来自动化 Project 桌面客户端,并将 Project 与其他 Office 2010 应用程序集成,以创建全面的业务解决方案。对于复杂的解决方案,建议您使用 Microsoft Visual Studio 2010 中的 Microsoft Office 开发工具 而非 VBA。有关详细信息,请参阅 Project Client Programming (该链接可能指向英文页面)

宏和自定义功能区命令   创建简单宏的最简便方法是使用功能区的“开发工具”选项卡上的“录制宏”命令,然后手动执行希望宏包含的步骤。若要显示“开发工具”选项卡,请依次单击“文件”选项卡上的“选项”,“项目选项”对话框中的“自定义功能区”,然后在“主选项卡”列表中选择“开发工具”。您很可能需要在 Visual Basic 编辑器中编辑录制的宏,以对其进行调整和简化。

由于 Project Standard 2010 和 Project Professional 2010 使用功能区用户界面而非工具栏和菜单,因此,可以使用新方法来添加自定义命令按钮。具体请参阅How to: Use VBA to Add a Custom Command to the Ribbon (该链接可能指向英文页面)How to: Use Managed Code to Add a Custom Command to the Ribbon (该链接可能指向英文页面)

有关创建和编辑 VBA 宏的一般信息,请参阅 Office 开发中心Office 2010 中的 VBA 开发入门。有关 Project VBA 的特定文章,请参阅 Microsoft Office Project 1998-2007 版本的 VBA 编程 (该链接可能指向英文页面)中的“使用事件”和“使用时间分段数据”章节。Project 2007 SDK 中还提供了其他一些有关 Project VBA 的操作方法文章,例如日历例外和有效工作周 (该链接可能指向英文页面)配合使用 VBA 和本地自定义字段与大纲代码 (该链接可能指向英文页面)

Gg607685.Tip(zh-cn,office.14).gif 提示:

有关 Project 的 VBA 编程的书籍仅有一本,目前已进行更新,加入了 Project 2010 的相关内容。具体请参阅 Microsoft Project 1998-2010 版的 VBA 编程及 VSTO 介绍(该链接可能指向英文页面)

要为其他 Project Standard 用户部署宏,您可以分发包含该宏的项目 .mpp 文件或 .mpt 文件。例如,您可以将项目文件发布到 SharePoint 文档库中,并提供复制和使用宏的说明。要在本地计算机上将某个宏用于所有项目,需要将该宏复制到本地全局模板中。要复制 Global.mpt 文件,可以使用功能区的“开发工具”选项卡上的“管理器”

要将宏部署到 Project Professional 的用户组,可以签出企业全局模板,然后将该宏复制到 Project Server 的企业全局模板中。然后可以创建一个自定义功能区命令,并将该命令复制到签出的企业全局模板中。

Gg607685.note(zh-cn,office.14).gif 注释:

在 Project Professional 功能区的“开发工具”选项卡中,单击“打开企业全局设置”。若要复制宏,请打开“管理器”,然后单击“管理器”对话框中的“模块”选项卡。在“管理器”的左侧窗格中,选择 VBA 模块,然后从右侧窗格中选择“签出企业全局设置”

使用 Visual Studio 实现 Project 自动化   Visual Studio 2010 中的 Office 开发工具 具备诸多优势,能够开发出更复杂、更安全、可伸缩性更强的解决方案,从而自动化 Project 2010 桌面客户端及其他 Microsoft Office 应用程序。Visual Studio 中的 ClickOnce 发布极大简化了包含 Project 桌面客户端的高级解决方案的开发、测试和部署过程。

有关 Project 2010 中针对 VBA 开发人员的变动的概述,请参阅 VBA Object Model Changes (该链接可能指向英文页面)。有关 Visual Studio 2010 中的 Office 开发工具的详细信息,请参阅 MSDN 中的使用 Visual Studio 开发中心进行 Office 开发(该链接可能指向英文页面)。要获取使用 Visual Studio 2010 开发的 Project 2010 外接程序的详细示例,请参阅Walkthrough: Building a Managed Code Add-in to Check PWA Compatibility (该链接可能指向英文页面)

Gg607685.note(zh-cn,office.14).gif 注释:

Project 2010 的外接程序必须进行更新,才能同时适用于 32 位和 64 位版本。有关详细信息,请参阅Working with VBA in Office 2010 (32-bit) and Office 2010 (64-bit) (该链接可能指向英文页面)

Project Server 体系结构

Project Server 2010 的体系结构分为多层。演示层包括 Project Web App、Project Professional 2010 和第三方客户端应用程序。应用程序服务层包括 PSI 服务、业务逻辑和 SharePoint Server 2010。数据层包括数据访问层 (DAL) 组件和多个 Microsoft SQL Server 数据库。图 2 显示了 Project Server 体系结构的简化视图。有关详细信息,请参阅 Project Server 2010 Architecture (该链接可能指向英文页面)



图 2. Project Server 2010 体系结构

Project Server 2010 体系结构

Project Server 支持多个 Project Web App 虚拟网站。您可以在同一台计算机上安装一个或多个 Project Web App 实例作为 Project Server 的核心组件,也可以分别安装到同一个 SharePoint 服务器场的多台计算机上。每个 Project Web App 实例使用同一个核心 Project Server 和其他共享服务,但使用的数据库各不相同。例如,下面两个 Project Web App 虚拟网站集总共需要 8 个 Project Server 数据库,但可以共享 SharePoint Server 的配置和内容数据库:

  • http://ServerName/pwa/

  • http://ServerName/pwaTest/

在上述示例中,pwapwaTest 是 Project Web App 虚拟网站集的名称。每个网站集各自拥有独立的授权用户列表,该列表存储在 SharePoint 内容数据库中。Project Server 数据库不存储用户登录信息。例如,pwa 网站使用名为 ProjectServerDraft、ProjectServerPublished、ProjectServerArchive 和 ProjectServerReporting 的数据库。pwaTest 网站使用名为 TestDraft、TestPublished、TestArchive 和 TestReporting 的独立数据库。您可以将数据库安装到运行 SQL Server 2005 或 SQL Server 2008 的不同计算机上。

Project Web App 使用 Microsoft ASP.NET 3.5 构建,并使用通过 PSI 与 Project Server 交互的编译程序集。ActiveX 控件在 Project Web App 页面中已被清除,并在 SharePoint 2010 中被新的 JS 网格控件取代。开发人员无权访问 Project Web App 中 Web 部件和 ASPX 页面背后的代码。不过,您可以访问 JS 网格控件 对象模型来修改和扩展使用 JS 网格控件的 Project Server Web 部件。您还可以修改 Project Web App 功能区,使用 SharePoint Server 对象模型来创建您自己的与 Project Server Web 部件交互的 Web 部件。您的扩展范围内的 Microsoft Visual C# 或 Microsoft Visual Basic 代码不会向其他开发人员公开。相关示例,请参阅How to: Modify the Ribbon in PWA (该链接可能指向英文页面)Walkthrough: Customizing the PWA Ribbon and Accessing the JS Grid (该链接可能指向英文页面)Walkthrough: Creating a Project Server Web Part with a JS Grid (该链接可能指向英文页面)

Project Web App 使用 SharePoint Server 2010 进行身份验证,并将其用作 Web 服务器。有关 Project Web App 安装在单独计算机上时如何使用 PSI 的详细信息,请参阅 Project 2010 SDK 中的 Project Server 2010 Architecture (该链接可能指向英文页面)

访问 Project Server 2010 数据

Project Professional 2010 和所有第三方应用程序只能通过 PSI 与 Project Server 2010 进行通信。在 2007 以前的 Project Server 版本中,Project Professional 使用 ODBC 来直接访问 Project Server 数据库。无法通过大多数企业防火墙使用 ODBC。Project Professional 2010 则无需直接访问数据库,但报告数据库除外。报告数据库可独立于其他 Project Server 数据库安装到运行 SQL Server 的计算机上。

Gg607685.Warning(zh-cn,office.14).gif 警告:

您可以通过直接编程方式随意访问草稿、已发布和归档的数据库。不过,您还应该知道,Project Professional 缓存、发布数据库和报告数据库均依赖于可由直接数据编辑中断的缓存同步协议。在此警告您,如果您由于使用直接访问更改数据而破坏了 Project Server 数据库或损坏了 Project Professional 客户端缓存,产品支持将无法提供帮助。

PSI 是您的应用程序和业务对象层之间的接口。Project Server 中的业务对象是包括以下规则的组件:逻辑实体(如项目、任务、资源和分配)如何进行更改,这些实体之间以及与其他 Project Server 组件之间如何进行交互。每个逻辑实体可跨多个数据库表。由于所有客户端应用程序都经过 PSI 并使用同一个业务逻辑,因此,Project Server 负责保持业务对象之间的正确关系。业务对象不与 Project Server 数据直接进行交互;它们调用 DAL,并由其处理与正确数据库表相关的事务。

并非所有 Project Server 数据都能通过 PSI 获得。例如,大多数企业日历数据在已发布数据库中都是二进制图像 (BLOB) 字段。PSI 方法可以创建、读取和更新企业日历例外,但不能管理工作周数据。要管理工作周数据,必须使用 Project Professional(或者 VBA 宏或 Project 外接程序)。

试用报告数据库

有些情况下,使用报告数据库读取 Project Server 数据比使用 PSI 更容易。例如,您可以快速获得使用查找表的自定义字段值,这是因为 Project Server 在报告数据库中为每个自定义字段创建一个 OLAP 视图和用户视图。例如,内置 MSPLT_Department_UserView 包含在 Project Web App 的“部门”查找表中定义的部门数据。以下查询列出了查找表中的前 9 个部门,以及特殊的 Null 成员。

T-SQL
SELECT TOP 10 [LookupMemberUID]
      ,[MemberValue]
      ,[MemberDescription]
FROM [ProjectServer_Reporting].[dbo].[MSPLT_Department_UserView]

要获取报告数据库架构参考,请参阅 Project 2010 SDK 下载(该链接可能指向英文页面)。架构参考包含使用查找表(如“成本类型”、“运行状况”和“RBS”)的内置自定义字段的视图。对于不使用查找表的自定义字段,您可以使用项目视图、资源视图或任务用户视图。例如,以下查询针对指定项目中的所有任务查找名为 Test Number 的任务自定义字段的值。

T-SQL
SELECT task.[ProjectUID]
      ,[TaskName]
      ,[TaskIndex]
      ,[TaskDuration]
      ,[Test Number]
FROM [ProjectServer_Reporting].[dbo].[MSP_EpmTask_UserView] AS task
INNER JOIN [ProjectServer_Reporting].[dbo].[MSP_EpmProject_UserView] AS proj
   ON task.ProjectUID = proj.ProjectUID
WHERE proj.ProjectName = N'My Swell Project'

有关详细信息,请参阅Custom Fields and the Reporting Database (该链接可能指向英文页面)

Project 2010 中的缓存、队列、事件和服务器端调度

Project Professional 2010 的本地缓存与 Project Server 队列服务共同实现了脱机工作,并缩短了打开和保存项目所需的时间。当项目经理在脱机工作后重新建立连接时,Project Professional 会向 Project Server 队列发送消息并仅保存更改的数据。Project Server 队列以异步方式保存数据,项目经理可以退出 Project Professional 或返回工作。

Project Server 事件服务是一项主要功能,通过该功能可以扩展 Project Server 功能。开发人员可以使用 PSI 的 Events 服务中的方法,或使用 Project Web App 创建事件处理程序,并以编程方式注册它们。每个主要业务对象(如 CustomFieldsCubeAdminLookupTableProjectReportingSecurityTimeSheet)均包含多个事件,您可以在 Project Web App (http://ServerName/ProjectServerName/_layouts/pwa/admin/Events.aspx) 中的服务器端事件处理程序页面上看到这些事件。事件处理程序提供用于添加新功能、自定义现有功能以及与其他应用程序集成的“挂钩”。有关某些示例,请参阅本文中的 Project Server 2010 中的事件

Project Server 2010 中的调度引擎已得到改进。举例来说,在以前的 Project 版本中,如果某团队成员报告的时间量与为某个任务计划的时间量不同,项目经理就必须从 Project Professional 中打开项目,重新安排该任务及相关事宜。Project Server 2010 可以重新安排任务。例如,您可以实施自定义时间表系统,Project Server 会重新安排项目,而无需使数据在 Project Professional 中往返。但是,PSI 不具备直接调用 Project Server 调度引擎的方法。

Gg607685.note(zh-cn,office.14).gif 注释:

PSI 中的公共方法符合管理服务器端项目和与其他应用程序集成的最常见和有用要求。公共 PSI 不支持 Project Professional 或 Project Web App 的所有功能,后者还使用方法和一些专用 PSI 服务。

有关详细信息,请参阅 What the PSI Does and Does Not Do (该链接可能指向英文页面)

与 Microsoft SharePoint Server 2010 集成

Project Server 2010 需要 具有企业版客户端访问许可证的 Microsoft SharePoint Server 2010。所有 Project Web App 功能均基于 SharePoint Server,包括网站管理、用户身份验证、工作流、Project Server Web 部件(如项目中心和“我的任务”),以及包含问题、风险、可交付结果及相关文档列表的项目网站。有关 SharePoint 体系结构的介绍,请参阅 SharePoint 2010 Architectures Overview (该链接可能指向英文页面)

Project Server 安全性

SharePoint Server 2010 通过声明处理来验证用户身份,这是 SharePoint Server 的一项新功能。SharePoint 同时为 Project Server 用户处理 Windows 身份验证和表单身份验证。Project Server 为各种 Project Server 功能和操作的用户授权添加全局权限和分类权限,在 Project Web App 的“管理用户”页面中选择某用户时便可访问这些权限。

Project Server 中的 Security 业务目标(可通过 PSI Security 服务以编程方式访问)管理安全组、类别、模板和 Project Web App 全局权限。Security 服务可以添加现有权限或从 Project Server 用户可用的权限集中移除权限。但是,Security 服务无法创建自定义权限。

Gg607685.note(zh-cn,office.14).gif 注释:

在 Office Project Server 2007 中,您可以通过修改已发布数据库中的安全表来创建自定义的全局和分类权限。演练:创建和使用自定义 Project Server 权限 (该链接可能指向英文页面)文章是唯一的 SDK 示例,在该示例中,针对直接更改已发布数据库设置了例外。自定义权限显示在 Project Web App 的权限列表中,Project Server 管理员可以在该列表中以保护其他 Project Server 功能的方式保护第三方扩展。在 Project Server 2010 中,创建自定义权限的过程已过时。作为一种替代方法,您可以创建自己的用户界面来管理自定义权限。

有关如何合并报表中的 Project Server 安全模型的详细信息,请参阅使用 SQL Server Reporting Services 报表中的 Project Server 安全性 (该链接可能指向英文页面)。有关 Project Server 安全性的详细信息(包括全局和分类权限讨论),请参阅 Project Server 2007 SDK 中的 Project Server 安全入门指南 (该链接可能指向英文页面),以及 TechNet 上的 Project Server 2010 的安全和保护

Project Server Web 部件

Project Web App 和 SharePoint Server 2010 的网页开发功能基于 .NET Framework 3.5 构建。由于 Project Web App 一个 SharePoint 网站,因此,您可以像开发其他 SharePoint 网站一样开发 Project Web App 的 Web 部件。与早期版本相比,Visual Studio 2010 更便于开发、部署、测试和调试 Web 部件。新 Visual Web 部件项目模板提供了 Web 部件设计器。

您可以将 Web 部件添加到在“网站操作”菜单中包含“编辑页面”选项的 Project Web App 页面中。部分页面(如“公文包分析”和“服务器设置”)用于特定功能,不允许进行编辑。不过,Project Web App 管理员可以使用“服务器设置”页面上的“快速启动”链接将节和链接添加到“快速启动”中的自定义页面。图 3 显示向可编辑的 Project Web App 页面添加 Web 部件非常简单。只需单击“网站操作”菜单上的“编辑页面”,然后在您需要的页面部分中单击“添加 Web 部件”即可。在图 3 中,在“Project Web App”类别中选中了“问题”Web 部件。



图 3. 添加 Project Server Web 部件

添加 Project Server Web 部件

Project Server 2010 在“Project Web App”类别中包含了 18 个专有 Project Server Web 部件,如“项目中心”、“项目详细信息”和“我的时间表”。SharePoint Server 2010 有多个类别,其中包含了更多 Web 部件。(图 3 中的“JS 网格示例”类别是一个自定义的附加项,您在自己的 Project Web App 网站中看不到它。)若要查看可在 Project Web App 中使用的近 90 个内置 Web 部件的列表,请在“网站操作”菜单中单击“网站设置”,然后在“库”部分单击“Web 部件”

Web 部件可以在 ASP.NET 3.5 中使用 System.Web.UI.WebControls.WebParts 命名空间,或 Microsoft.SharePoint.WebControls 命名空间。有关自定义 Web 部件和使用哪个命名空间的详细信息,请参阅Developing Project Server Web Parts (该链接可能指向英文页面)

Gg607685.note(zh-cn,office.14).gif 注释:

如果其他 SharePoint 网站与 Project Server 位于同一个服务器场,您可以将 Project Server 2010 Web 部件添加到这些网站中。Project Server 2010 不需要设置其他 SharePoint 网站。

使用目标 .NET Framework 3.5,Visual Studio 2010 中的 Visual Web 部件项目模板和 Web 部件项模板都会创建一个具有 .webpart 文件扩展名的 Web 部件。Project Web App 还支持原有的 Windows SharePoint Services 2.0 Web 部件(文件扩展名为 .dwp), .ascx 自定义控件及 Microsoft ASP.NET 2.0 的其他可扩展功能。如果可能,我们建议您构建 ASP.NET 3.5 Web 部件,以便与 SharePoint Server 2010 及 SharePoint 承载的其他 ASP.NET 3.5 或 Microsoft ASP.NET 4.0 应用程序相兼容。

修改 Project Web App 页面
SharePoint Server 2010 使用母版页控制网站中网页的外观。但是,Project Server 不允许使用 Microsoft SharePoint Designer 2010 编辑 Project Web App 页面或母版页,原因在于 SharePoint Designer 不能管理访问 PSI 及其他 Project Server 程序集的完整代码。您可以对 Project Web App 进行更改以加入您的组织的商标、配色方案和术语,具体请参阅“网站设置”页面的“外观”部分。您还可以添加、移除、禁用、更改网站外观,或更改 Project Web App 功能区上控件的操作。有关详细信息,请参阅How to: Modify the Ribbon in PWA (该链接可能指向英文页面)

JS 网格控件(Microsoft SharePoint Foundation 2010 的部件)取代了之前版本的 Project Server 中使用的 ActiveX 网格控件。JS 网格控件使用 ECMAScript(JavaScript、JScript)对网格进行客户端修改。对于带有 JS 网格控件的 Project Web App 页面,您可以使用 JS 网格控件对象模型和事件处理程序来修改网格及添加功能;回调也可以使用服务器端程序集。有关示例,请参阅Walkthrough: Customizing the PWA Ribbon and Accessing the JS Grid (该链接可能指向英文页面)。您的自定义 Web 部件可以调用 PSI 方法或第三方应用程序。有关示例,请参阅Walkthrough: Creating a Project Server Web Part with a JS Grid (该链接可能指向英文页面)

项目网站

当您创建并发布项目时,默认情况下您还会创建用于团队协作的项目网站。在以前版本的 Project Server 中,项目网站称为项目工作区。例如,名为 My Test Project 的项目的默认网站为:

http://ServerName/My%20Test%20Project/default.aspx

当您使用 Project Professional 或 PSI 创建和发布项目时,您可以指定同一服务器场内正运行 SharePoint 的另一台服务器,或指定其他网站名。项目网站可以包含文档、问题、风险和项目可交付结果的列表。项目经理可以项目的可交付结果列表形式发布项目任务或里程碑事件,其他项目经理可以订阅该列表以及时获取更改通知。发布或订阅可交付结果可作为改进项目间的协作的方式,而不会影响任何项目的任务安排。

可交付结果列表是专用的 SharePoint 列表,SharePoint 2010 SDK 提供了如何建立自定义列表的示例。由于项目网站是带有某些自定义列表的基本 SharePoint 网站,因此,您可以利用所有 SharePoint 技术进行定制和扩展,包括使用 SharePoint Designer 2010 修改母版页。若要为项目网站创建新的母版页,请手动创建一个不与项目连接的项目网站(即,在您发布项目时 Project Server 未创建该网站)。修改该网站,然后将其母版页用作其他项目网站的母版页。

有关修改项目网站模板的信息,请参阅 Project 2007 SDK 中的扩展项目工作区模板 (该链接可能指向英文页面)。有关使用 SharePoint 列表数据(如问题、风险及其他自定义列表)的信息,请参阅书籍摘录将 SharePoint 列表数据导入到 Project Server 2007 自定义字段中 (该链接可能指向英文页面)。该流程同样适用于 Project Server 2010。有关自定义项目网站的详细信息,请参阅 SharePoint 开发中心

Project Server 工作流

Windows Workflow Foundation (WF) 是一个由 SharePoint Foundation 2010 承载并扩展的基于 Windows 的平台组件。WF 是一个开发框架,而不是服务器或应用程序,用于为 SharePoint 及其他 Windows 应用程序提供常用的工作流技术。有关 SharePoint 中的工作流的详细信息,请参阅新增功能:工作流增强功能

Project Server 2010 为 SharePoint 工作流平台添加了多个扩展和一个限制。Project Server 具有自定义工作流活动,可与标准 SharePoint 和 WF 活动配合使用。您不能像在 SharePoint 中那样,使用 SharePoint Designer 2010 开发 Project Server 工作流。Project Server 工作流需要在 Project Server 计算机上使用 Visual Studio 2010 来开发。

Microsoft Project 2010 解决方案初用者(该链接可能指向英文页面) (在 Project Server 2010 版本之后引入)中的部分工具可帮助创建简单(无分支)工作流并管理相关功能。工作流完全集成到需求管理和公文包分析中。有关 Project Server 工作流的详细信息,请参阅Workflow and Demand Management (该链接可能指向英文页面)Developing Project Server Workflows (该链接可能指向英文页面)

Project Web App 中的 SimpleUI URL 选项

Project Web App 页面仍实现名为 SimpleUI 的原有 URL 选项来隐藏或显示页面的各个部分,但这些选项已很少使用。在 Project Server 2010 中,SimpleUI 设置仍作为 cookie 保留在本地用户计算机上。SimpleUI 全局应用于 Project Web App 页面,但不应用于未设置 Project Server 的服务器场中的其他 SharePoint 网站。Project Server 2010 中新增的功能区不受影响。有关简单示例,请访问在 Project Web App 中隐藏“快速启动”的以下 URL:

http://ServerName/ProjectServerName/default.aspx?SimpleUI=8

现在,所有页面都移除了相同元素,因此,其他页面上不会再显示 SimpleUI 选项。若要暂时返回当前页面的默认视图,请将 ?SimpleUI=0 添加到任意一个 Project Web App URL。若对所有页面保留默认视图,请添加 ?SimpleUI=16。与 Project Server 2003 中 256 个组合的 SimpleUI 不同,Project Server 2010 采用 32 位掩码组合(0 到 31)。若要查看 URL 选项表,请参阅 Project 2007 SDK 中的自定义 Web 部件方案 (该链接可能指向英文页面)

Project Server 接口

PSI 包括 22 项公共服务(通过 ASMX 接口访问时也称为 Web 服务)。大多数 PSI 服务与 Project Server 业务对象相对应,这些对象是逻辑实体(如项目和资源)。PSI 的 Project 服务对应项目实体、Resource 服务对应资源实体、TimeSheet 服务对应时间表实体,等等。每项 PSI 服务都包括一个或多个包含该实体数据的 DataSet 对象。大多数 PSI 方法使用 DataSet 参数或返回 DataSet 对象。例如,Project 服务中的 QueueCreateProject 方法向 Project Server 队列发送消息,以使用 ProjectDataSet 参数中指定的数据在“草稿”数据库中创建项目。以下是 QueueCreateProject 方法的签名。

C#
public void QueueCreateProject(Guid jobUid, ProjectDataSet dataset, 
   bool validateOnly);

通过 jobUid 参数可以使用 QueueSystem 服务方法跟踪和管理队列中的作业。所有名称以 Queue 开头的 PSI 方法(如 QueuePublishQueueCheckInProject)将异步运行;Project Server 在队列中放入消息,然后将控件传送回您的应用程序。其他方法(如 CheckOutProjectReadProject)则同步运行;您的应用程序在该方法完成后才能继续执行。

ReadProject 方法读取在指定数据库中指定的项目,并返回 ProjectDataSet 对象。所有实体将在 Project Server 中由 GUID标识。PSI 方法中的部分参数使用 Microsoft.Office.Project.Server.Library.dll 程序集中的枚举,有时则使用 PSI 服务中的枚举。例如,以下是 ReadProject 方法的签名。

public ProjectDataSet ReadProject(Guid projectUid, DataStoreEnum dataStore);

ReadProject 方法调用的以下代码片段中,SvcProject 命名空间代表 PSI 中 Project 服务的代理的任意名称。projUid 变量代表之前保存到“草稿”数据库(正在运行的存储区)的项目的 GUID。

C#
using PSLibrary = Microsoft.Office.Project.Server.Library;
. . .

private static SvcProject.ProjectClient projectClient;
. . .
    // Initialization of the projectClient object is not shown here.
    
    Guid projUid = new Guid("8024BEB0-7814-44CF-98FF-4E74148E3404");
    SvcProject.ProjectDataSet projDs = 
        projectClient.ReadProject(projUid, PSLibrary.DataStoreEnum.WorkingStore);
    . . .

双接口:ASMX 和 WCF

由于 WCF 接口在 SharePoint Server 后端的 Project Server 应用程序服务中定义,因此,您不能使用 Internet Explorer 查看 PSI 服务的 WCF 接口。每项 PSI 服务的 WCF 接口提供一个包含您用于访问该服务的方法的主类。主类名称带有 Client 后缀。例如,Project 服务的主类是 ProjectClient;在资源服务中,主类是 ResourceClient

主类的构造函数具有多个重载。初始化主类的常用方法是定义一个 WCF 端点,然后将该端点名用作参数,如以下示例所示:

projectClient = new SvcProject.ProjectClient("basicHttp_Project");

您可以编程方式定义 WCF 端点,也可以在服务配置文件(如 app.config 或 web.config)中定义。有关 app.config 文件示例,请参阅Prerequisites for WCF-Based Code Samples (该链接可能指向英文页面)中的“添加服务配置文件”一节。有关以编程方式定义 WCF 端点的示例,请参阅Walkthrough: Developing PSI Applications Using WCF (该链接可能指向英文页面)中的“以编程方式配置服务”一节。如果您的应用程序是独立的(即,您的应用程序不影响其他应用程序的服务配置文件时),您可以使用服务配置文件。要避免 Project Web App 自行修改 app.config 文件,当您的应用程序是 Project Server 的扩展程序(如事件处理程序、Project Web App 页面上 JS 网格控件的修改或 PSI 扩展)时,您必须以编程方式定义 WCF 端点。

ASMX 接口   由于将在 Project Web App 前端访问 ASMX 接口,因此,您可以使用 Internet Explorer 查看 PSI Web 服务的 ASMX 接口。例如,更改您的 Project Web App 实例的以下 URL,然后将该 URL 粘贴到 Internet Explorer 中:

http://ServerName/ProjectServerName/_vti_bin/PSI/project.asmx?wsdl

每项 PSI Web 服务的 ASMX 接口中的主类是该服务的名称。例如,Project 服务中的主 ASMX 类是 Project;在资源服务中是 Resource。在以下代码段中,ProjectWebSvc 代表 PSI 中 Project 服务的代理的任意命名空间。您只需设置 Url 属性和 Credentials 属性,便可以初始化 Project 主对象,如以下示例所示。

C#
using System.Web.Services.Protocols;
using PSLibrary = Microsoft.Office.Project.Server.Library;
. . .

    ProjectWebSvc.Project project = new ProjectWebSvc.Project();
    project.Url = "http://ServerName/ProjectServerName/_vti_bin/psi/project.asmx";
    project.Credentials = CredentialCache.DefaultCredentials;

初始化 PSI 服务中的主类后,基于 ASMX 的应用程序中的代码的其余部分与基于 WCF 的应用程序相同(以下两种情况除外:您的应用程序执行模拟操作,或 Project Web App 实例同时使用 Windows 身份验证和表单身份验证)。有关使用 ASMX 接口的详细信息,请参阅Prerequisites for ASMX-Based Code Samples (该链接可能指向英文页面)。Project 2010 SDK 中有多个 PSI 方法包含 WCF 接口和 ASMX 接口的代码示例;例如,请参阅 ReadProjectStatus

如果您开发使用 PSI 服务的新应用程序,建议您使用 WCF 接口。ASMX 接口可用于原有 Project Server 应用程序(为 Office Project Server 2007 开发的应用程序)。对于为 Project Server 2003 或更早版本开发的较早应用程序,您必须完全重新构建这些应用程序才能在 Project Server 2010 中运行。在许多情况下,由于 Office Project Server 2007 和 Project Server 2010 中引入了新功能,之前的应用程序无法继续使用。有关迁移较早的 Project Data Service (PDS) 应用程序的信息,请参阅 PSI Web 服务的奇偶校验位 (该链接可能指向英文页面)。有关 WCF 和 ASMX 接口的详细信息,请参阅 Overview of WCF and the PSI (该链接可能指向英文页面)

快速入门方法

在使用 Project Server 中的 WCF 服务进行开发时有许多选项供您选择,这会让您在使用 PSI 的 WCF 接口时感到困惑。您可以通过三种途径来添加 WCF 服务引用,通过两种途径对服务进行配置(如果您使用 Visual Studio 中的“服务配置编辑器”,则有三种途径,如Walkthrough: Developing PSI Applications Using WCF (该链接可能指向英文页面)中的“使用 app.config 配置服务”一节所述)。

为使您更加轻松地开始学习 PSI 开发,您可以参考已完成配置的示例。

创建第一个基于 WCF 的 PSI 应用程序

  1. 安装 Project 2010 SDK 下载资源。为避免在使用 Visual Studio 示例时遇到权限问题,安装到目录(如 C:\Project_SDK)而非默认目录会更简单。

  2. ~\Documentation\Intellisense\WCF\Source.zip 文件提取到同一个子目录中,然后在 Visual Studio 命令提示符窗口中运行 CompileWCFProxyAssembly 命令。此操作会创建 ProjectServerServices.dll 代理程序集。

  3. 打开 Visual Studio 2010 中的 Samples\ManagedCodeReference\CreateProject4Department.sln 解决方案。

    Gg607685.note(zh-cn,office.14).gif 注释:

    如果可能,您应该对 Project Server 执行一次测试安装。对于许多应用程序(工作流,或修改 Project Web App 或项目网站除外),您可以在外部计算机上进行开发,但随后您必须将 Microsoft.Office.Project.Server.Library.dll 程序集和 ProjectServerServices.dll 代理程序集复制到该远程计算机上。

  4. 设置对步骤 2 中创建的 ProjectServerServices.dll 代理程序集的引用,并确保 Microsoft.Office.Project.Server.Library 引用有效。

  5. 在 app.config 文件中更改端点地址,以对 ProjectServer.svc 端点使用正确的服务器名称和 Project Web App 名称。

  6. 如果需要其他值,请在 Program.cs 文件中更改 OUTPUT_FILES 常量的目录名称。

  7. 在“部门”查找表中创建一个或多个部门(使用 http://ServerName/ProjectServerName/_layouts/PWA/Admin/EditLookupTable.aspx?_guid=e7397277-1ab0-4096-b2dd-57029a055ba4),然后查找其中一个部门的 GUID,如 Program.cs 文件的注释中所述。更改 DEPARTMENT_TEST 常量的值。

  8. 编译并运行程序。您应该在 Visual Studio 命令提示符窗口中看到以下输出。

    msdos
    XML output of the ProjectDataSet before QueueCreateProject:
        C:\Project\Samples\Output\ProjectDataSet4Department_before.xml
    Creating project: Test Dept 1
    Waiting for job: ProjectCreate .................................................
    
    XML output of the ProjectDataSet after ReadProject:
        C:\Project\Samples\Output\ProjectDataSet4Department_after.xml
  9. 按任意键退出命令提示符窗口。如果提示出错,请确保您拥有访问 Project Web App 和创建项目的正确权限。同时按照Project Server 2010 错误检查中所述检查 ULS 日志。

使用 PSI 中的 DataSet 对象

每项 PSI 服务都包括其所需的对应于业务实体中信息的 DataSet 类。DataSet 对象从根本上说是一个内存中关系数据库,它包括表、关系、约束、行和字段架构。每个 DataSet 对象又包含一个或多个 DataTable 对象,其中包含 DataRow 对象。每个 DataRow 包含一个或多个用于管理行的属性(数据字段)和方法。例如,ResourceDataSet 类包含子类(如 ResourceDataTableResourceRatesDataTable),这些子类与 Resource 表和 ResourceRates 表相对应。ResourceDataSet.ResourceRatesRow 子类在 ResourceRates 表中定义行(即资源成本记录)。

Demo_UpdateResource 控制台应用程序的以下代码中,resourceDs 变量包含 ResourceDataSet 对象。

Gg607685.note(zh-cn,office.14).gif 注释:

app.config 文件中 "basicHttp_Resource" WCF 端点的定义未在此处显示。您可以为 Project 2010 SDK 下载中的 PSI 示例解决方案调整任何 app.config 文件。

要处理基于 WCF 的应用程序中出现的 FaultException 错误,您应该在调用 PSI 方法时使用 trycatch 语句。在基于 ASMX 的应用程序中,您会捕获 SoapException 错误。有关详细信息,请参阅 Project Server Error Codes (该链接可能指向英文页面)中的“WCF 代码示例”和“ASMX 代码示例”两节。

C#
using System;
using System.ServiceModel;
using System.Xml;
using PSLibrary = Microsoft.Office.Project.Server.Library;

namespace Demo_UpdateResource
{
    class Program
    {
        private const string ENDPOINT_RESOURCE = "basicHttp_Resource";
        private const string OUTPUT_FILES = @"C:\Project\Samples\Output\";

        private static SvcResource.ResourceClient resourceClient;
        private static string outFilePath;

        static void Main(string[] args)
        {
            outFilePath = OUTPUT_FILES + "Demo_ReadResource.xml";
            resourceClient = new SvcResource.ResourceClient(ENDPOINT_RESOURCE);

            Guid myUid = resourceClient.GetCurrentUserUid();

            SvcResource.ResourceDataSet resourceDs = resourceClient.ReadResource(myUid);

            // Set cost per use to 1.25 USD.
            double costPerUse = 1.25 * PSLibrary.ValidationConst.s_cost_multiplier;

            if (resourceDs.ResourceRates[0].RES_COST_PER_USE != costPerUse)
            {
                resourceDs.ResourceRates[0].RES_COST_PER_USE = costPerUse;

                if (resourceDs.Resources[0].IsRES_CHECKOUTBYNull())
                {
                    Guid[] resourceUids = { myUid };  // Array of resources to check out.
                    resourceClient.CheckOutResources(resourceUids);
                }
                bool validateOnly = false;
                bool autoCheckIn = true;
                resourceClient.UpdateResources(resourceDs, validateOnly, autoCheckIn);
            }
            resourceClient.Close();
            
            Console.WriteLine("XML output file for ResourceDataSet: {0}", outFilePath);
            resourceDs.WriteXml(outFilePath);
            Console.Write("\nPress any key to exit... ");
            Console.ReadKey(true);
        }
    }
}

Demo_UpdateResource 执行以下操作:

  1. 使用 WCF 端点初始化 ResourceClient 对象。

  2. 使用 GetCurrentUserUid 方法获取应用程序用户的 GUID。

  3. 使用 ReadResource 方法初始化 ResourceDataSet 对象。ResourceDataSet 包括由 ResourceRates[0] 访问的 ResourceRates 表中的一行。

  4. 将单位使用成本值设置为 1.25 美元(针对美国英语系统)。RES_COST_PER_USE 属性使用 s_cost_multiplier 字段转换该成本值。

  5. 确定应用程序用户的单位使用成本是否为 1.25 美元。如果不是,将 RES_COST_PER_USE 字段设置为 1.25 美元。

  6. 确定 RES_CHECKOUTBY 值是否为 null;如果是,请签出资源。

  7. 使用 UpdateResources 方法更新资源。

    Gg607685.note(zh-cn,office.14).gif注释:

    在 Project 2010 SDK 中,PSI 服务主类中的每个方法的主题的“注释”部分显示了使用该方法所需的 Project Server 权限。例如,UpdateResources 方法使用四项权限,其中包括 ManageUsersAndGroups 全局权限和 EditEnterpriseResourceData 分类权限。如果应用程序用户并非拥有所有必需的权限,则 UpdateResources 方法调用将失败,并出现异常。

  8. 关闭 ResourceClient 对象以帮助进行垃圾收集。

  9. 使用 WriteXml 方法将 ResourceDataSet 对象序列化到 XML 文件以进行调试。以下示例是 XML 文件的一部分,显示了更新后的 RES_COST_PER_USE 字段。

    XML
    <?xml version="1.0" standalone="yes"?>
    <ResourceDataSet xmlns="http://schemas.microsoft.com/office/project/server/webservices/ResourceDataSet/">
      <Resources>
        <!-- Fields in the Resources table. -->
      </Resources>
      <ResourceCustomFields>
        <!-- Fields in the ResourceCustomFields table. -->
      </ResourceCustomFields>
      <CalendarExceptions>
        <!-- Fields in the CalendarExceptions[0] row.-->
      </CalendarExceptions>
      <CalendarExceptions>
        <!-- Fields in the CalendarExceptions[1] row.-->
      </CalendarExceptions>
      <ResourceRates>
        <RES_UID>efef7161-eb7f-43b0-8936-7247ca393453</RES_UID>
        <RES_RATE_TABLE>0</RES_RATE_TABLE>
        <RES_STD_RATE>12</RES_STD_RATE>
        <RES_OVT_RATE>15</RES_OVT_RATE>
        <RES_COST_PER_USE>125</RES_COST_PER_USE>
      </ResourceRates>
      <ResourceAvailabilities>
        <RES_UID>efef7161-eb7f-43b0-8936-7247ca393453</RES_UID>
        <RES_AVAIL_UNITS>100</RES_AVAIL_UNITS>
      </ResourceAvailabilities>
    </ResourceDataSet>

例如,若要在开发和测试过程中对 Demo_UpdateResource 应用程序进行调试,请在包含 UpdateResources 调用的语句上设置断点。在应用程序暂停执行时,将鼠标指针悬停在 resourceDs 参数上,然后单击小放大镜图标显示“数据集可视化工具”对话框。在“表”下拉列表中选择“ResourceRates”(见图 4)。



图 4. 在调试过程中使用数据集可视化工具

使用 DataSetVisualizer 进行调试

该应用程序执行完成后,如果您在 Project Web App 中打开该用户对应的“编辑用户”页面,则“每次使用成本”文本框将显示 1.25 美元。

Project 2010 SDK 中的许多代码示例使用数据集。例如,QueueCreateProject 主题包括基于 WCF 和 ASMX 的代码示例,这些示例在空 ProjectDataSet 的数据表中添加行,然后创建项目。ProjTool 测试应用程序包括很多操作 PSI 中的数据集的示例。ProjTool 的源代码可以通过 Project 2010 SDK 下载获取;具体请参阅Using the ProjTool Test Application in Project Server 2010 (该链接可能指向英文页面)。有关数据集的一般信息,请参阅 ADO.NET

使用 xmlFilter 参数的 PSI 方法

用于读取数据的 8 个 PSI 方法在 xmlFilter 参数中使用 XML 字符串筛选对象,它可以限制该方法在 DataSet 中返回的数据量。筛选方法包括 ReadCalendarsReadCustomFieldsReadCustomFields2ReadLookupTablesReadLookupTablesMultiLangReadResourcesReadResourceAssignmentsReadResourcePlan。在大多数情况下,如果 xmlFilter 参数为空字符串,该方法将返回所有可用的数据;ReadResourceAssignments 方法例外,该方法需要使用非空字符串,因为可能有成千上万个工作分配。

例如,以下代码中的 GetLookupTableFilter 方法创建一个 XML 筛选器,用以限制 LookupTableDataSet,使其仅包含具有 LT_UIDLT_STRUCT_UIDLT_VALUE_FULL 列的 LookupTableTrees 表。GetRbsValue 方法调用 ReadLookupTables 方法,然后循环访问筛选后的 LookupTableTrees 表,以查找 lutValueUid 参数指定的 RBS 自定义字段的完整值。

C#
using PSLibrary = Microsoft.Office.Project.Server.Library;
. . .
private string GetRbsValue(Guid lutValueUid)
{
    string rbsValue = string.Empty;
    // Don't use a known LCID when ReadLookupTables uses a non-empty filterXml parameter.
    int noLcid = 0; 
    PSLibrary.Filter lutFilter = GetLookupTableFilter();
    string lutFilterXml = lutFilter.GetXml();

    SvcLookupTable.LookupTableDataSet lutDs =
        lookupTableClient.ReadLookupTables(lutFilterXml, false, noLcid);

    for (int i = 0; i < lutDs.LookupTableTrees.Count; i++)
    {
        if (lutDs.LookupTableTrees[i].LT_STRUCT_UID == lutValueUid)
        {
            rbsValue = lutDs.LookupTableTrees[i].LT_VALUE_FULL;
            break;
        }
    }
    return rbsValue;
}

// Create a filter for the ReadLookupTables method.
private PSLibrary.Filter GetLookupTableFilter()
{
    // Create an empty LookupTableDataSet, to get the table and column names.
    SvcLookupTable.LookupTableDataSet lutDs = new SvcLookupTable.LookupTableDataSet();

    string lutTableName = lutDs.LookupTableTrees.TableName;
    string lutUidColumn = lutDs.LookupTableTrees.LT_UIDColumn.ColumnName;
    string lutStructUidColumn = lutDs.LookupTableTrees.LT_STRUCT_UIDColumn.ColumnName;
    string lutFullValueColumn = lutDs.LookupTableTrees.LT_VALUE_FULLColumn.ColumnName;

    // Get the GUID for the built-in RBS lookup table.
    Guid lutRbsUid = PSLibrary.LookupTables.RBS_LT_UID;  

    PSLibrary.Filter lutFilter = new PSLibrary.Filter();

    lutFilter.FilterTableName = lutTableName;
    lutFilter.Fields.Add(new PSLibrary.Filter.Field(lutUidColumn));
    lutFilter.Fields.Add(new PSLibrary.Filter.Field(lutStructUidColumn));
    lutFilter.Fields.Add(new PSLibrary.Filter.Field(lutFullValueColumn));

    PSLibrary.Filter.FieldOperationType equal = PSLibrary.Filter.FieldOperationType.Equal;
    lutFilter.Criteria = new PSLibrary.Filter.FieldOperator(equal, lutUidColumn,
        lutRbsUid.ToString());

    return lutFilter;
}

完整的 Visual Studio 解决方案在 Project 2010 SDK 下载的 ReadRBS 示例中提供。有关使用 xmlFilter 参数的详细信息,请参阅 Project 2007 SDK 中的如何:对 PSI 方法使用筛选器参数 (该链接可能指向英文页面)

PSI 模拟与扩展

在 Project Server 应用程序中模拟用户的做法在 Project Server 2010 中不像 Office Project Server 2007 中那么普遍。例如,ReadStatusForResourceSubmitStatusForResource 方法不需要模拟和取代 ReadStatusSubmitStatus 方法。Project Server 2010 还具有其他限制,且需要更多管理设置。有关详细信息及代码示例,请参阅How to: Use Impersonation with WCF (该链接可能指向英文页面)

您可以使用其他服务对 PSI 本身进行扩展。例如,自定义 PSI 服务中的方法可以调用其他 PSI 方法,以检查用户授权、对特定作业使用模拟、统一服务器上的多个 PSI 调用以节省网络流量,或为 Project Server 添加新功能。有关还调用 ReadResource PSI 方法的名为 HelloService 的基于 WCF 的简单示例,请参阅Creating a PSI Extension for Project Server 2010 (该链接可能指向英文页面)。PSI 扩展安装在 Project Web App 前端应用程序中;例如,URL 为 http://ServerName/ProjectServerName/_vti_bin/PSI/HelloService.svc?wsdl

How to: Create a PSI Extension to Read Custom Fields in the RDB (该链接可能指向英文页面)一文中的 PSI 扩展使用报告数据库中的存储过程来查找包含指定自定义字段值的所有项目。PSI 扩展示例的完整 Visual Studio 解决方案在 Project 2010 SDK 下载中提供。

结合使用 Windows PowerShell 和 PSI

Windows PowerShell 脚本经常用于帮助执行 Project Server 2010 和 SharePoint Server 2010 的管理任务。您也可以使用带有 ASMX 接口的 Windows PowerShell 调用 PSI 方法。以下示例使用计算机的实际名称而非 localhost。例如,如果名为 PWA 的 Project Web App 实例位于 MyServer 计算机的 5050 端口上,则应将 $pwaUrl 值更改为 $pwaUrl = "http://MyServer:5050/pwa"

Gg607685.note(zh-cn,office.14).gif 注释:

以管理员身份运行“SharePoint 2010 Management Shell”(位于“开始”菜单的“Microsoft SharePoint 2010 产品”文件夹中)。每次运行以下脚本时,Get-Credential 命令(在 Windows PowerShell 中称为 cmdlet)都会要求您键入域、用户名和密码。

Windows PowerShell
############################################################################
## Get-RegularProjectList
##
## Uses the PSI to get a ProjectDataSet.Project table that includes 
## regular projects (not templates or proposals).
##
## The script user must have Project Server administrator permissions for the 
## ReadProjectList method.
##
## To run on your Project Server computer, change the $pwaUrl value.
#############################################################################
 
$pwaUrl = "http://ServerName/ProjectServerName"
$svcProjectUrl = $pwaUrl + "/_vti_bin/PSI/Project.asmx?wsdl"

$c = Get-Credential

# Create a proxy for the Project web service, from the ASMX interface.
$svcProjectProxy = New-WebServiceProxy -uri $svcProjectUrl -credential $c

$svcProjectProxy.ReadProjectList().Project | Where-Object { $_.PROJ_TYPE -eq 0 } `
    | Out-GridView –title "List of Regular Projects"

在上述代码中,ReadProjectList 方法为 Project 表中的以下字段返回包含值的 ProjectDataSetPROJ_UIDPROJ_NAMEPROJ_TYPE。图 5 显示使用 Windows PowerShell 中的 Out-GridView cmdlet(可缩写为 ogv)创建的网格视图的输出信息。您可以在网格视图中筛选值。



图 5. 从 Windows PowerShell 输出的网格视图中筛选值

在 Windows PowerShell 中使用网格视图

Project 2010 SDK 包含多个主题,说明如何使用 Windows PowerShell 进行管理活动(如部署自定义解决方案)。有关示例,请参阅How to: Deploy a Project Server Workflow (该链接可能指向英文页面)How to: Modify the Ribbon in PWA (该链接可能指向英文页面)。还可以参阅 SetDatabaseTimeout 中的管理脚本示例。TechNet 提供了有关 SharePoint 和 Project Server 的 Windows PowerShell cmdlet 的参考;具体请参阅 用于 Project Server 2010 的 Windows PowerShell

尽管上述代码示例说明您可以轻松使用包含访问 PSI 的现有 Windows PowerShell cmdlet 的脚本来读取 Project Server 数据,但仍存在若干限制。除每次都需要键入凭据外,还包括以下限制:在远程计算机上使用脚本很困难,用于创建或更新 Project Server 实体或需要多项 PSI 服务的作业的脚本很复杂,使用硬编码值而不是 Microsoft.Office.Project.Server.Library 命名空间中的枚举和字段,不便于调试,而且没有 IntelliSense。如果您需要更多 Windows PowerShell 功能,更为理想的解决方案是创建通过 WCF 接口访问 PSI 的自定义 cmdlet。相关详细信息,请参阅 Microsoft Project 2010:Project Server PSI 的 Powershell Cmdlet(该链接可能指向英文页面) 中的 MSDN 代码库下载。

Project Server 2010 中的事件

每个 Project Server 2010 业务实体(如项目、任务、工作分配、自定义字段和时间表)均包含事件。Project Server 实现 220 多个事件,事件类型既有前期事件也有后期事件。前期事件发生在 Project Server 将数据保存到数据库之前。前期事件的事件处理程序可以取消该操作,并且是同步的。即,使用前期事件的应用程序在事件处理程序结束后才能继续运行。后期事件无法取消(因为数据已保存),可以同步进行也可以异步进行。应用程序可以订阅事件,如 Project Publishing 前期事件或 Project Published 后期事件,并运行一个或多个关联的事件处理程序。您在 Project Web App 中注册事件处理程序时,可以指定 Project Server 对某个事件运行多个事件处理程序的顺序。

开发人员可以利用前期事件添加约束、自定义数据有效性或业务规则检查。例如,某企业项目管理办公室 (PMO) 可能要求某些项目的所有企业项目文本自定义字段的前缀均由两个字母组成。CustomField Changing 前期事件处理程序可以执行此业务规则。

后期事件是将 Project Server 与 LOB 应用程序(如会计系统)集成的主要途径。例如,有 14 个 TimeSheet 事件,其中包括 SubmittingSubmittedRecallingRecalledSubmittingRecalling 为前期事件。您可以在时间表提交到数据库之前创建事件处理程序来检查贵组织的业务规则,并在不符合规则时取消提交。SubmittedRecalled 为后期事件。项目经理提交时间表数据后,Timesheet Submitted 后期事件处理程序可以每周向会计系统发送数据。

当您为 Project Server 事件处理程序创建类时,该类继承自 Microsoft.Office.Project.Server.Events.dll 程序集中的事件接收器基类。事件接收器类包括 ProjectEventReceiverCustomFieldsEventReceiver 等。可以在一个事件处理程序类中创建一个或多个事件处理程序方法。每个事件处理程序方法将替代相应的基类方法。例如,CustomFieldsEvents 类可以包括 OnCreatingOnCreated 方法。以下代码包括两个具有多个事件处理程序的接收器类。

C#
using System;
using System.Diagnostics;
using System.Data;
using System.Xml;
using Microsoft.Office.Project.Server.Events;
using PSLibrary = Microsoft.Office.Project.Server.Library;

namespace TestEventHandlers
{
    public class ProjectEvents : ProjectEventReceiver
    {
        public override void OnPublishing(
            PSLibrary.PSContextInfo contextInfo, 
            ProjectPrePublishEventArgs e)
        {
            . . .
        }
    }
    public class CustomFieldsEvents : CustomFieldsEventReceiver
    {
        public override void OnCreating(
            PSLibrary.PSContextInfo contextInfo, 
            CustomFieldsPreEventArgs e)
        {
            . . .
        }

        public override void OnCreated(
            PSLibrary.PSContextInfo contextInfo, 
            CustomFieldsPostEventArgs e)
        {
            . . .
        }
    }
}

事件处理程序方法包含上下文信息,如用户名和 GUID、语言以及 Project Web App 网站 GUID。前期事件 e 参数(事件参数)包含 Cancel 属性及有关实体或事件的其他信息。例如,项目 OnPublishing 事件处理程序的 ProjectPrePublishEventArgs 包含项目名称、GUID 和项目网站的 SharePoint 网站 URL。后期事件的事件参数不包含 Cancel 属性。

有关 PSI 应用程序的所有 Project Server 事件的列表,请参阅 PSI 托管代码参考中的 PSEventID。有关 ProjectCreating 前期事件的 OnCreating 事件处理程序示例,请参阅How to: Create a Project Server Event Handler and Log an Event (该链接可能指向英文页面)

使用事件处理程序的数据集

多数 Project Server 事件与 PSI 方法直接相关;例如,QueueCreateProject 方法引发 Creating 前期事件和 Created 后期事件。如果相关 PSI 方法使用 DataSet 对象,前期事件或后期事件处理程序中的事件参数 (e) 可能包含实体的 DataSet。例如,CustomFieldsCreated 后期事件的 OnCreated 事件处理程序的事件参数包含 CustomFieldDataSet 类型的 CustomFieldsPostEventArgs.CustomFieldInformation

Gg607685.note(zh-cn,office.14).gif 注释:

要使用事件处理程序中的 DataSet 对象,必须设置对 Microsoft.Office.Project.Schema.dll 程序集的引用。Microsoft.Office.Project.Server.Schema 命名空间包含所需的类定义(如 CustomFieldDataSet)。

您可以使用以下命令从 [Windows]\assembly\GAC_MSIL\Microsoft.Office.Project.Schema\14.0.0.0__71e9bce111e9429c 目录中复制架构程序集。以管理员身份运行“命令提示符”窗口,然后更改 [Windows] 占位符,使其与您的计算机相匹配。

msdos
set SCHEMA= [Windows]\assembly\GAC_MSIL\Microsoft.Office.Project.Schema\14.0.0.0__71e9bce111e9429c
xcopy /y %SCHEMA%\*.dll .

以下代码显示一个简单的后期事件处理程序,它在自定义字段 Created 事件的事件参数中使用 CustomFieldInformation。例如,如果 customFieldDs 属于 Microsoft.Office.Project.Server.Schema.CustomFieldDataSet 类型,您可以使用语句 string cfName = customFieldDs.CustomFields[0].MD_PROP_NAME 获取该自定义字段的名称。CustomFields 是位于 e.CustomFieldInformation(其本身就属于 CustomFieldDataSet 类型)中的 CustomFieldsDataTable 对象。自定义字段表仅有一行 (CustomFields[0]),其中包含了刚创建的自定义字段的数据。有关自定义字段行中各属性的列表,请参阅 CustomFieldsRow

C#
using System;
using System.Diagnostics;
using Microsoft.Office.Project.Server.Events;
using PSLibrary = Microsoft.Office.Project.Server.Library;
using PSSchema = Microsoft.Office.Project.Server.Schema;

namespace TestCreatedCustomField
{
    public class WriteCustomFieldCreatedEvent : CustomFieldsEventReceiver
    {
        public override void OnCreated(
            PSLibrary.PSContextInfo contextInfo,
            CustomFieldsPostEventArgs e)
        {
            // Create an event log instance and assign its source.
            EventLog myLog = new EventLog();
            myLog.Source = "Custom Field OnCreated Event Handler";

            // Get information from the event arguments. 
            string userName = contextInfo.UserName.ToString();

            PSSchema.CustomFieldDataSet customFieldDs = e.CustomFieldInformation;

            string cfName = customFieldDs.CustomFields[0].MD_PROP_NAME;
            byte cfTypeEnum = customFieldDs.CustomFields[0].MD_PROP_TYPE_ENUM;
            Guid cfUid = customFieldDs.CustomFields[0].MD_PROP_UID;

            string[] cfTypes = Enum.GetNames(typeof(PSLibrary.CustomField.Type));

            string cfType = "";
            int index = 0;

            // Find the name of the custom field type.
            foreach (int i in Enum.GetValues(typeof(PSLibrary.CustomField.Type)))
            {
                if (i == Convert.ToInt32(cfTypeEnum))
                {
                    cfType = cfTypes[index];
                    break;
                }
                index++;
            }

            // Write an entry to the Application event log.
            int eventId = 3652;  // Create an arbitrary event ID.
            string logEntry;

            logEntry = "User: " + userName +
                "\nCustom Field Name: " + cfName +
                "\nGUID: " + cfUid.ToString() +
                "\nType: " + cfType +
                "\nThe custom field has been created.";

            myLog.WriteEntry(logEntry, EventLogEntryType.Information, eventId);
        }
    }
}

如果您编译并安装事件处理程序,在 Project Web App 中进行注册,然后创建一个属于 Duration 类型的名为 Test Res Duration 的资源自定义字段,则可以在 Project Server 计算机的“事件查看器”中看到 Application 事件(见图 6)。TestCreatedCustomField 示例的完整 Visual Studio 解决方案(包括用于复制引用和安装事件处理程序的脚本)位于 Project 2010 SDK 下载的 Samples\EventHandlers\TestCreatedCustomField 目录中。



图 6. 使用事件查看器显示事件处理程序中的属性

将事件查看器与事件处理程序结合使用

事件处理程序中的数据集是只读的。例如,您无法通过修改 CustomFieldDataSet 来更改 OnCreating 前期事件处理程序内的自定义字段的名称。不过,您可以捕获事件、获取所需属性、取消创建自定义字段、以编程方式配置 CustomFields 服务的 WCF 端点,然后使用 CustomFields Web 服务中的 CreateCustomFields 方法,创建具有正确名称的自定义字段。

有关一般信息,请参阅 Project 2007 SDK 中的 Project Server 事件 (该链接可能指向英文页面)。有关包括注册事件处理程序和写入 ULS 日志的相关说明的示例,请参阅How to: Create a Project Server Event Handler and Log an Event (该链接可能指向英文页面)。有关其他示例,请参阅如何:自定义用于 Project Server 通知的电子邮件 (该链接可能指向英文页面)(该示例将 OnSending 事件处理程序用于电子邮件通知);以及 Project Server 2010 委派审核事件处理程序(该链接可能指向英文页面)(该示例将 OnActivatedOnDeactivated 事件处理程序用于用户委派)。

Project 2010 中的 EPM 报告

Project Professional 2010 和 Project Standard 2010 桌面客户端具有使用 Microsoft Visio 2010 和 Microsoft Office Excel 2007 或者 Excel 2010 的可视化报表功能。利用可视化报表,您可以从本地 Project 文件创建图形报表和透视表报表。在服务器端,EPM 报告的平台是对支持 Microsoft 商业智能 (BI) 框架的 Project Server 2010 的重要升级。SharePoint Server 2010 的商业智能中心在 Project Web App 中进行定制和创建。商业智能中心的目的是帮助为可访问 Project Web App 的所有员工提供及时和相关的业务见解。

Project Server 中的报告体系结构包括报告数据库 (RDB)、报告数据服务 (RDS) 和多维数据集生成服务 (CBS)。有关详细信息,请在 Project 团队博客(该链接可能指向英文页面) (http://blogs./project/) 及其他 Project 博客、Project 的最终用户文档及 TechNet 中搜索可视化报表报告。有关示例,请参阅 Project Server 2010 中的商业智能(该链接可能指向英文页面)Project 2010:商业智能概述(该链接可能指向英文页面)Reporting on projects (Project Server 2010) (该链接可能指向英文页面)。在 Project 2010 SDK 中,请参阅Cube Build Service (该链接可能指向英文页面)Custom Fields and the Reporting Database (该链接可能指向英文页面)

若要开始使用 Project Server 报告,请参阅 Project 2010 的培训与学习(该链接可能指向英文页面)页中的报告视频。

报告数据库和报告数据服务

默认的报告数据库 (RDB) 表和视图用于从项目数据生成报告,并且是只读的。Project Server 2010 报告数据库架构参考在 Project 2010 SDK 下载中提供。RDB 架构包含三个核心部分:

  • EPM 数据(如项目、任务、资源、工作分配和自定义字段)

  • 时间表数据

  • 协作数据(如项目网站上的问题、风险和可交付结果)

报告数据服务 (RDS) 根据已发布数据库中的更改对 RDB 进行实时更新(仅需几分钟时间)。RDB 表已取消规范化,以便使用 Microsoft SQL Server Reporting Services (SSRS) 相对容易地创建报告。

RDS 使用队列处理 RDB 更新,并可以从多个服务器管理多线程更新操作。在更改后的数据从 RDB 形成报告之前,用户很可能在 Project Web App 中看到更改后的数据。RDS 包括用于数据更新的后期事件,因此,您可以在获取必要数据后管理报告缓存并更新报告。

RDB 中的视图包括为 OLAP 设计的视图,以及要直接从 RDB 创建报告的用户的视图;例如,资源数据在 MSP_EpmResource_OlapView 和 MSP_EpmResource_UserView 中提供。OLAP 视图旨在供多维数据集生成服务用于生成 OLAP 多维数据集。用户视图用于创建报告,其包含的字段通常多于 OLAP 视图。Project Server Report Pack 中的示例查询使用表和用户视图。Office Project 2007 SDK 下载提供了包含 7 个示例 SSRS 报告的报告包。MSDN 代码库提供了报告包的更新资源;具体请参阅 Project Server 2007 报告包 II —“主要报告”(该链接可能指向英文页面)

Gg607685.note(zh-cn,office.14).gif 注释:

Office Project Server 2007 的部分报告包示例依赖于为 2007 年推出的演示虚拟机创建的特定自定义字段和查找表。部分报告包示例使用的 Project Server 功能已过时或不能在 Project Server 2010 中使用。您可以将报告包示例作为起点,学习在 Project Server 2010 中如何创建新报告。

您可以向包含外部数据的 RDB 中添加表和视图,并使用 RDS 来管理自定义表和视图的更新。例如,Project Server 2010 委派审核事件处理程序(该链接可能指向英文页面)中的 MSDN 代码库示例在 RDB 中创建了一个 PS2010_UserDelegationAudit 表。

多维数据集生成服务

多维数据集生成服务 (CBS) 根据 Project Server 及相关 SharePoint 数据创建多个 OLAP 多维数据集。Project Web App 帮助管理 SQL Server Analysis Services 多维数据集,支持自定义多维数据集,并为使用 OLAP 多维数据集或 RDB 的报告服务报表提供集中位置。您可以将企业自定义字段作为新维度或度量值来添加,并将计算得出的度量值添加到整个 Project Web App 的多维数据集中。

除在 Project Web App 中进行管理外,CBS 还可以对 ULS 日志进行广泛的事件和跟踪日志记录。通过 PSI CubeAdmin Web 服务可以对多维数据集生成进行编程管理和计划。Project Server 2010 的 OLAP 数据库包含 14 个默认多维数据集,如Cube Build Service (该链接可能指向英文页面)中所述。

您可以使用增量数据更改来构建默认的 OLAP 多维数据集,从而提高更新频率并缩短更新持续时间。多维数据集数据视图在仪表板和 Web 部件中提供。您可以创建其他视图,以及对 Project Server 和外部数据进行整合的自定义 Web 部件。例如,您可以使用具有数据透视表报表和条件格式的 Excel 2010;还可以将 Excel 工作簿或电子表格发布到 Excel Services,以在任意 SharePoint 网站上呈现精简内容。

Project Web App 的商业智能中心页面包含大量的协作功能。团队成员可以轻松创建关键绩效指标 (KPI),用于监测数据趋势和显示包含可视化报表数据的 Excel 工作簿(方法是通过 Excel Services 将这些工作簿发布到 SharePoint)。管理员或开发人员可以创建记分卡元素、视图和角色,将 Project Server 数据更新发布到 Microsoft SharePoint Server 2010 中的 PerformancePoint Services,并在商业智能中心显示 PerformancePoint 内容。

有关演示如何扩展公文包分析器多维数据集的示例,请参阅如何:计算 OLAP 多维数据集的资源可用性 (该链接可能指向英文页面)。有关如何作为多维数据集中的维度或度量值添加自定义字段的详细信息,请参阅Custom Fields and OLAP Cubes (该链接可能指向英文页面)

Project Server 2010 错误检查

在开发 Project Server 解决方案时,您可以针对两个主要区域检查配置和运行时错误:应用程序事件日志和统一日志记录服务 (ULS) 跟踪日志。您还应该对调用 PSI 方法的代码使用 try-catch 块。有关用于处理 WCF 和基于 ASMX 的应用程序异常的错误和示例代码的详细信息,请参阅 Project Server Error Codes (该链接可能指向英文页面)

应用程序事件日志   在 Project Server 计算机上的“开始”菜单中单击“运行”,然后键入 eventvwr。在“事件查看器”窗口的左侧窗格中展开“Windows 日志”节点,然后单击“应用程序”查看由 Project Server、SharePoint、ASP.NET、SQL Server、自定义事件处理程序及其他应用程序记录的事件(见图 6)。如果按来源对事件进行排序,则可以轻松找到 Project Server 事件。来源包括“ProjectQueueService14”和“ProjectEventService14”

ULS 日志   ULS 跟踪日志和事件日志可提供比应用程序事件日志更为详细的数据。您可以配置一个 ULS 跟踪日志,用于记录 Project Server 和 SharePoint 中特定类别或所有类别和级别的活动。要查看跟踪日志,可以使用记事本、其他文本编辑器或 Microsoft Excel。要轻松读取并监测 ULS 日志,以及筛选事件和保存 ULS 日志示例,可以从 MSDN 代码库中下载并安装 ULS 查看器(该链接可能指向英文页面)。ULS 查看器是不受支持的应用程序。有关演示如何使用 ULS 查看器的示例,请参阅How to: Create a Project Server Event Handler and Log an Event (该链接可能指向英文页面)

配置 Project Server 的 ULS 日志及其他计时器作业

  1. 打开 SharePoint 2010 管理中心应用程序,单击“监控”,然后在“监控”页面的“计时器作业”部分单击“复查作业定义”

  2. 单击“诊断数据提供程序: 跟踪日志”,然后在“编辑计时器作业”页面上,将计时器作业设置为每 10 分钟运行一次。您可以类似方式配置“诊断数据提供程序: 事件日志”。例如,您可以为与 SharePoint 应用程序相关的性能计数器和 SQL 查询另外设置 5 个诊断数据提供程序计时器作业。

  3. Project Server Service Application 还包括四项您可以在“作业定义”页面上配置的设置,这些设置用于管理 SharePoint 计时器运行 Project Web App 的其他作业的频率。

  4. 在 SharePoint 2010 管理中心的“监控”页面上,单击“报告”部分的“配置诊断日志记录”。在“诊断日志记录”页上,展开“Project Server”类别,然后选中某个类别(如“服务器端事件”)。如果选择顶部的“Project Server”节点,则将对所有 39 个 Project Server 类别进行日志记录。

  5. 要获取最详细的信息,请为要在事件日志和跟踪日志中报告的重要程度最低的事件选择“详细”级别。由于事件日志和跟踪日志可能很大,因此,请仅在需要时才运行详细日志记录。

    Gg607685.Caution(zh-cn,office.14).gif 警告:

    如果您要在生产服务器上记录事件,请只选择特定类别以方便管理日志的大小。若要关闭所有日志记录,请为每个日志中重要程度最低的事件选择“无”。若要记录相对较少的事件,请为跟踪日志选择“高”或“可监控”。“意外”级别通常显示应用程序异常。对于事件日志,请选择“错误”或“重要”以记录较少的事件。

    系统将默认选择“启用事件日志淹没保护”设置。跟踪日志的默认路径为 %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\LOGS。如果您使用 ULS 查看器,则可以使用默认路径打开跟踪日志,也可以设置其他路径。

  6. 设置存储跟踪日志文件的最大天数;默认值为 14 天。您还可以限制用于存储跟踪日志的磁盘空间。

ULS 每 30 分钟创建一个新跟踪日志文件。跟踪日志文件在文件名中包含了日期和时间,例如,SERVERNAME-20110208-1326.log

结论

Project Server 2010 是一个基于最新编程和软件协作框架(.NET Framework 和 SharePoint Server,它们将是未来很多年里 Microsoft Project 及其他 Microsoft 软件程序的基础)的平台。使用 Project Server 平台可更轻松地开发扩展以及与各种其他应用程序集成。

Project Server 接口 (PSI) 及相关数据集不需要直接访问三个核心 Project Server 数据库(草稿、已发布和归档)。Project Server 事件是扩展 Project Server 以及与 LOB 应用程序集成的关键。事件处理程序可以启动工作流,工作流可以进行 PSI 调用,其他事件处理程序可以将消息发送到工作流中的项目详细信息页面。

Project Server 报告和 OLAP 多维数据集是 Project 可扩展平台的一部分,为客户和合作伙伴提供大量机会来提升组织中的项目管理、沟通和业务决策水平。

其他资源

有关详细信息,请参阅以下资源:

修订记录

日期 说明 原因

2011 年 3 月

Mar2011

内容更新

2011 年 3 月

Mar2011

内容更新

2011 年 3 月

初始发布

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多