使用 CSOM,我可以看到如何使用 SetCustomFieldValue 方法来更新与项目关联的自定义字段,但是对于 Project Online 中的任务是否无法执行此操作?我没有看到任何允许这样做的东西,但它确实在文档中列出了这应该是可能的。
谢谢!
使用 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)”辅助方法可供使用,但它是相似的,我认为该属性是通过索引器在对象实例上设置的,例如:
(须藤 C# 代码)
var draftTask = [get task instance];
draftTask[cfInternalName] = "Some value";
等等
如果这没有帮助,那么您始终可以反映 ProjectServer.Client.DLL,您将看到未公开公开的“SetCustomFieldValue”的内部实现。
希望对某人有所帮助。