Обновление настраиваемых полей уровня задачи

Используя CSOM, я вижу, как использовать метод SetCustomFieldValue для обновления настраиваемых полей, связанных с проектом, но невозможно ли сделать это для задачи в Project Online? Я не вижу ничего, что позволило бы это сделать, но в документации указано, что это должно быть возможно.

Спасибо!


person user3666151    schedule 15.09.2014    source источник


Ответы (3)


Вы смотрели эту ветку? Используйте CSOM для обновления настраиваемых полей проекта

Это уровень проекта, но он может дать некоторые дополнительные подсказки. На самом деле, в нижней части этого поста есть код уровня задачи, так что, надеюсь, это то, что вам нужно.

person andrefadila    schedule 22.10.2014

Я также искал способ обновления настраиваемых полей уровня задачи, но не смог найти решение. По этой и некоторым другим причинам я решил сделать это, внедрив расширение 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                     });
person Karl    schedule 01.04.2015

Я могу дать вам пример 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 С#)

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

и т. д.

Если это не поможет, вы всегда можете отразить ProjectServer.Client.DLL, и вы увидите внутреннюю реализацию «SetCustomFieldValue», которая не публикуется.

Надеюсь, это поможет кому-то.

person Martin Laukkanen    schedule 05.09.2016