如何使用加载项从 Microsoft Project Professional 获取所有任务?

问题描述 投票:0回答:2

我确实尝试使用 Office.context.document.getSelectedDataAsync(),但我需要单击行才能从任务中获取数据。

我需要在不单击加载项项目中使用 Javascript 的情况下获取所有任务。

javascript office-js office-addins ms-project project-web-addins
2个回答
0
投票

您可以在 MSDN 中找到针对 Office.Document 类描述的所有可用方法。

getTaskAsync
getTaskByIndexAsync
方法允许获取给定
taskId
的任务名称、WSS 任务 ID 和资源名称:

// Get data for the specified task.
function getTaskAsync() {
    if (taskGuid != undefined) {
        _projDoc.getTaskAsync(
            taskGuid,
            function (asyncResult) {
                if (asyncResult.status === Office.AsyncResultStatus.Failed) {
                    logMethodError("getTaskAsync", asyncResult.error.name,
                               asyncResult.error.message);
                } else {
                    var taskInfo = asyncResult.value;
                    var taskOutput = "Task name: " + taskInfo.taskName +
                                     "\nGUID: " + taskGuid +
                                     "\nWSS Id: " + taskInfo.wssTaskId +
                                     "\nResourceNames: " + taskInfo.resourceNames;
                    text.value = taskOutput;
                }
            }
        );
    } else {
        text.value = 'Task GUID not valid:\n' + taskGuid;
    } 
}

请参阅使用文本编辑器为 Microsoft Project 创建第一个任务窗格加载项了解更多信息。


0
投票

我正在尝试,但是不知道为什么不存储在数组中,然后返回一个对象数组,其中包含我想要为每个任务选择的字段。 通过这个函数,我获取最大id来创建for循环并迭代所有任务,然后获取GUID来获取字段,所有这些都使用office.js,在控制台中显示检查for循环并成功获取值,问题正在存储数据并返回。

async function getMaxTaskIndex() {
const taskGuids = [];
let fieldValues = [];
let myObject = {};
const targetFields = [
  Office.ProjectTaskFields.TaskGUID,
  Office.ProjectTaskFields.ID,
  Office.ProjectTaskFields.Name,
  Office.ProjectTaskFields.Text29, //LIST OF PLAN BASELINE RISK ID´S
  Office.ProjectTaskFields.Text30, //LIST OF MONITORING RISK ID´S
  Office.ProjectTaskFields.BaselineStart,
  Office.ProjectTaskFields.BaselineFinish,
  Office.ProjectTaskFields.PercentComplete,
  Office.ProjectTaskFields.Summary,
  Office.ProjectTaskFields.Start,
  Office.ProjectTaskFields.Finish,
  Office.ProjectTaskFields.ActualStart,
  Office.ProjectTaskFields.ActualFinish,
  Office.ProjectTaskFields.Milestone,
];
const keyFields = [
  "taskGUID",
  "idTask",
  "Name",
  "Text29", //LIST OF PLAN BASELINE RISK ID´S
  "Text30", //LIST OF MONITORING RISK ID´S
  "BaselineStart",
  "BaselineFinish",
  "PercentComplete",
  "Summary",
  "Start",
  "Finish",
  "ActualStart",
  "ActualFinish",
  "Milestone",
];
let maxTaskIndex = 0;
Office.context.document.getMaxTaskIndexAsync(async function (result) {
  if (result.status === Office.AsyncResultStatus.Succeeded) {
    maxTaskIndex = result.value;
    for (let index = 0; index <= maxTaskIndex; index++) {
      Office.context.document.getTaskByIndexAsync(index, (result) => {
        if (result.status === Office.AsyncResultStatus.Succeeded) {
          taskGuids.push(result.value);

          for (let i = 0; i <= targetFields.length; i++) {
            // desde aca comienza el error actual ------------------------------------------------------------------
            Office.context.document.getTaskFieldAsync(result.value, targetFields[i], (r) => {
              if (r.status === Office.AsyncResultStatus.Succeeded) {
                console.log(keyFields[i], r.value.fieldValue);
                myObject[keyFields[i]] = r.value.fieldValue;
              } else {
                i--;
                console.log(r.error);
              }
            });
          }
          fieldValues.push(myObject);
        } else {
          console.log(result.error);
        }
        return fieldValues;
      });
    }

    // console.log(taskGuids);
  } else {
    console.log(result.error);
  }
});

}

© www.soinside.com 2019 - 2024. All rights reserved.