如何以编程方式保存Microsoft Project Online项目的副本?

时间:2019-08-12 14:35:51

标签: project-server project-online

我需要经常将所有项目的本地副本保存在Microsoft Project Online的PWA实例中。我有数百个,所以手动选择不是一种选择。

我已经能够使用Project Server CSOM and .NET连接到PWA实例并读取数据。但是我找不到Microsoft.ProjectServer.Client命名空间中的方法来导出此数据并将其本地保存到任何MS Project可读文件中。

这甚至有可能吗?

或者,欢迎使用其他任何不涉及Project Server CSOM的方法来实现此目标。

编辑:我也尝试过通过Project Online REST API获取数据,因此我可以获得一个XML文件,可以将其用作MSPDI文件。但是MS Project Professional(桌面应用程序)和MPXJ library都无法识别它,我可能需要进行一些繁重的转换,但这并不能保证它甚至可以正常工作...

1 个答案:

答案 0 :(得分: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来编译项目。