You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Project Server 2013(C# VSTO插件)中修改项目级自定义字段

如何在C#编写的MS Project插件中更新项目级企业自定义字段

我之前也碰到过这个一模一样的问题——任务和资源级的自定义字段用SetField就能轻松搞定,但项目级的相关文档确实藏得有点深,核心原因是大家容易忽略一个关键参数。

核心解决方案

项目级企业自定义字段的更新逻辑其实和任务/资源级类似,但需要明确指定字段类型为项目级,具体步骤如下:

  1. 获取目标项目对象:可以是当前活动项目,或者你通过插件定位到的特定项目
  2. 转换字段名称为常量:调用FieldNameToFieldConstant时必须传入PjFieldType.pjProject参数,这是区分项目级和其他级别字段的关键
  3. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:29:32