1

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

谢谢!

4

3 回答 3

0

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

这是项目级别,但它可能会提供一些进一步的线索。实际上,该帖子底部有任务级代码,因此希望这就是您所需要的。

于 2014-10-22T06:01:15.807 回答
0

我还搜索了一种更新任务级别自定义字段的方法,但找不到解决方案。出于这个和其他一些原因,我决定通过实施 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                     });
于 2015-04-01T06:41:40.300 回答
0

我可以给你一个 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)”辅助方法可供使用,但它是相似的,我认为该属性是通过索引器在对象实例上设置的,例如:

(须藤 C# 代码)

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

等等

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

希望对某人有所帮助。

于 2016-09-05T07:32:59.750 回答