如何在Project Server 2013(C# VSTO插件)中修改项目级自定义字段
如何在C#编写的MS Project插件中更新项目级企业自定义字段
我之前也碰到过这个一模一样的问题——任务和资源级的自定义字段用SetField就能轻松搞定,但项目级的相关文档确实藏得有点深,核心原因是大家容易忽略一个关键参数。
核心解决方案
项目级企业自定义字段的更新逻辑其实和任务/资源级类似,但需要明确指定字段类型为项目级,具体步骤如下:
- 获取目标项目对象:可以是当前活动项目,或者你通过插件定位到的特定项目
- 转换字段名称为常量:调用
FieldNameToFieldConstant时必须传入PjFieldType.pjProject参数,这是区分项目级和其他级别字段的关键 - 调用
SetField更新值:直接用Project对象的SetField方法即可
完整代码示例
using Microsoft.Office.Interop.MSProject; // 假设你已经获取了MS Project的Application实例 Application msApp = Globals.ThisAddIn.Application; // 获取当前活动项目(如果是特定项目,可替换为你自己的Project对象) Project targetProject = msApp.ActiveProject; try { // 将项目级企业自定义字段名称转换为对应的字段常量 // 第二个参数PjFieldType.pjProject必须指定,否则会默认查找任务/资源字段 int projectFieldConstant = msApp.FieldNameToFieldConstant( "你的项目级自定义字段名称", PjFieldType.pjProject ); // 设置字段值:根据字段类型传入对应数据(字符串/数字/日期等) targetProject.SetField(projectFieldConstant, "你要设置的新值"); // 保存更改(如果需要持久化到Project Server/本地文件) targetProject.Save(); } catch (Exception ex) { // 处理异常:比如字段不存在、权限不足、数据类型不匹配等 MessageBox.Show($"更新项目字段失败:{ex.Message}"); }
关键注意事项
- 字段类型匹配:如果你的自定义字段是数字、日期或查找表类型,一定要传入对应的数据类型,比如数字字段不能传字符串,查找表字段需要传入内部值而非显示文本
- 权限验证:在Project Server环境下,确保当前用户有修改项目级企业自定义字段的权限
- 对象库引用:确认你的项目已正确引用
Microsoft.Office.Interop.MSProject程序集(一般通过NuGet或COM引用添加)
内容的提问来源于stack exchange,提问作者Preli
相关产品推荐
相关产品推荐

