Как программно сохранить копию проекта Microsoft Project Online?

Мне нужно часто сохранять локальные копии всех моих проектов, хранящихся в моем экземпляре PWA в Microsoft Project Online. У меня их сотни, поэтому делать это вручную - не вариант.

Мне удалось подключиться к экземпляру PWA с помощью Project Server CSOM и .NET и прочтите данные. Но я не смог найти в пространстве имен Microsoft.ProjectServer.Client способ экспортировать эти данные и сохранить их локально в любой файл, доступный для чтения MS Project.

Возможно ли это вообще?

В качестве альтернативы будет приветствоваться любой другой способ достижения этого, не связанный с CSOM Project Server.

Изменить: я также пытался получить данные через REST API Project Online, поэтому я могу получить XML-файл, который я мог бы использовать, как если бы это был файл MSPDI. Но ни MS Project Professional (настольное приложение), ни библиотека MPXJ не распознают его, мне может потребоваться серьезное преобразование и это не гарантирует, что он будет работать ...


person John Meyers    schedule 12.08.2019    source источник


Ответы (1)


В конце концов, я решил пойти по «уродливому, но рабочему» пути, прямо указав настольному клиенту MS Project подключиться, открыть и локально сохранить проект с помощью некоторого кода C #:

private static void start()
{
    var objProcess = Process.Start(@"winproj.exe", "/s https://PWA-URL");
}

static void Main(string[] args)
{
    var backgroundThread = new Thread(new ThreadStart(start));
    backgroundThread.Start();
    Thread.Sleep(10000);

    ApplicationClass objProject = new ApplicationClass
    {
        Visible = false
    };

    object oMissing = System.Reflection.Missing.Value;
    object oFile = @"<>\test-project";
    object oFormat = "MSProject.mpp";
    object oReadOnly = true;
    objProject.DisplayAlerts = false;

    objProject.FileOpen(oFile, oReadOnly, PjMergeType.pjDoNotMerge, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oFormat, oMissing, PjPoolOpen.pjPoolReadOnly, oMissing, oMissing, oMissing, oMissing);
    objProject.FileSaveAs(@"C:\Windows\Temp\LocalCopy.mpp");
    objProject.Quit(PjSaveType.pjDoNotSave);
}

Учетные данные Windows используются для подключения к PWA, хотя можно указать другой пользователь и пароль, но я не пробовал (ApplicationClass.FileOpen).

Также следует импортировать Microsoft.Office.Interop.MSProject.dll для компиляции проекта.

person John Meyers    schedule 14.08.2019
comment
FWIW Я считаю, что это единственный способ сохранить файл в формате .mpp. - person Rachel Hettinger; 17.08.2019