Office365 更新任务级自定义字段

Office365 更新任务级自定义字段,office365,csom,ms-project-server-2013,Office365,Csom,Ms Project Server 2013,使用CSOM,我可以看到如何使用SetCustomFieldValue方法更新与项目关联的自定义字段,但对于Project Online中的任务,是否不可能这样做?我没有看到任何允许这样做的东西,但它确实在文档中列出了这应该是可能的 谢谢 你看过这条线了吗? 这是项目层面的,但可能会提供一些进一步的线索。 事实上,在那篇文章的底部有任务级代码,希望这就是你需要的。我也搜索了更新任务级自定义字段的方法,但找不到解决方案。 出于这个原因和其他一些原因,我决定通过实现projectdrilldown

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


谢谢

你看过这条线了吗?

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

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

       _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#代码)

等等

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

希望这能帮助别人

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