使用CSOM我可以看到如何使用SetCustomFieldValue方法更新与项目关联的自定义字段,但是不能对Project Online中的任务执行此操作吗?我没有看到任何允许这样做的内容,但它确实在文档中列出了这应该是可能的。
谢谢!
答案 0 :(得分:0)
它的项目级别,但它可能提供一些进一步的线索。 实际上,该帖子底部的任务级别代码很有希望,这就是您所需要的。
答案 1 :(得分: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 });
答案 2 :(得分:0)
我可以给你一个JSOM示例:
public class GenericBookStore<K,V>
{
private final List<GenericBookDet<K,V>> descriptions = new ArrayList<>;
public int addBook(K key, V bkDescription) {
descriptions.add(new GenericBookDet<>(key,bkDescription)));
return descriptions.size();
}
那应该是完整的(虽然我从脚本中删除它,所以检查我截断的成功/失败处理程序)
从CSOM的内存中找不到&#34; set_item(cf,val)&#34;要使用的辅助方法,但它类似,我认为属性是通过索引器在对象实例上设置的,例如:
(sudo c#code)
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);
});
等
如果这没有帮助,那么您可以随时反映ProjectServer.Client.DLL,并且您将看到&#34; SetCustomFieldValue&#34;的内部实现。这不是公开曝光的。
希望能有所帮助。