更新任务级别自定义字段

时间:2014-09-15 17:18:49

标签: office365 csom ms-project-server-2013

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

谢谢!

3 个答案:

答案 0 :(得分:0)

你看过这个帖子吗? Use CSOM to update project's custom fields

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

答案 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;的内部实现。这不是公开曝光的。

希望能有所帮助。