正在更新任务级别的自定义字段



使用CSOM,我可以了解如何使用SetCustomFieldValue方法更新与项目关联的自定义字段,但对于Project Online中的任务,是否不可能这样做?我没有看到任何允许这样做的东西,但它确实在文档中列出了这应该是可能的。

谢谢!

你看过这个线程吗?使用CSOM更新项目的自定义字段

这是项目级别的,但它可能会提供一些进一步的线索。事实上,这篇文章的底部有任务级别的代码,所以希望这就是你所需要的。

我也在寻找更新任务级自定义字段的方法,但找不到解决方案。出于这个原因和其他一些原因,我决定通过实现projectdrilldown扩展来实现这一点。这意味着直接在项目网格中更新值,并让项目服务器完成其余的内部处理:

       _grid=window.projectDrilldownComponent.get_GridSatellite(); // get the grid
       // Update the datavalue of a column (taskfield) 
       _grid.WriteDataValueByKey(...)
       // Update the localizedvalue of a column (taskfield)
       _grid.WriteLocalizedValueByKey(rec_key, fieldkey, fieldvalue,
                function () {
                    console.log("Post Update task:" + rec_key);
                    cbSuccess();                        // callback after update                     });

我可以给您举一个JSOM示例来实现这一点:

var projContext = PS.ProjectContext.get_current();    
var projects = projContext.get_projects();
var project = projects.getByGuid(projUid).get_draft();
var tasks = project.get_tasks();
var task = tasks.getByGuid(taskUid);
task.set_item(cfIntName, newValue);
var queueJob = project.update();
projContext.waitForQueueAsync(queueJob, 60, 
    Function.createDelegate(this, function(res) {
        // Publish project here
    }), function(error) {
    console.error(error);        
}); 

这应该是完整的(尽管我从脚本中提取了它,所以检查我截断的成功/失败处理程序)

从CSOM中的内存来看,没有"set_item(cf,val)"辅助方法可供使用,但它是类似的,我认为该属性是通过索引器在对象实例上设置的,例如:

(sudo c#代码)

var draftTask = [get task instance];
draftTask[cfInternalName] = "Some value";

等等。

如果这没有帮助,那么您可以始终反映ProjectServer.Client.DLL,并且您将看到未公开的"SetCustomFieldValue"的内部实现。

希望这能帮助到别人。

相关内容

  • 没有找到相关文章

最新更新