Подключение к определенному сайту и проекту Project Server с использованием объектной модели MS Project - PullRequest
2 голосов
/ 11 октября 2019

Примечание: я решил проблему с ошибками открытия winproj.exe. Эта проблема больше не является проблемой для меня.

Я, по существу, решил большую часть этой проблемы, изменив свойство Embedded IntroOp Types на false в Microsoft.Office.Interop.MSProject в Visual Studio, что позволило мне использоватьПроцесс ApplicationClass Я вставил новый код. Единственная проблема, с которой я сталкиваюсь сейчас, - это когда я открываю winproj.exe (var objProcess = Process.Start (@ "winproj.exe", "/ s" + OnlinePWA), он выдает ошибку с не найденным файлом, который останавливает процесс доЯ отменяю их, а затем открываю проект. Если у кого-то есть какие-либо сведения об открытии winproj.exe и устранении ошибок, пожалуйста, дайте мне знать.

Спасибо

public static List<FromTaskLinksClient> GetProjectTaskLinks(string OnlinePWA, string UserName, string Password, List<string> Projects, string OnPrem)
    {
        string PWAInstance = OnlinePWA.Replace("https://", "");
        string[] PWAInstance2 = PWAInstance.Split('/');
        int i = PWAInstance2.Count() - 1;
        string PWAInstance3 = PWAInstance2[i];
        SetDefaultPWAInstance.SetInstanceToYes(PWAInstance3);

        var objProcess = Process.Start(@"winproj.exe", " / s " + OnlinePWA);

        List <FromTaskLinksClient> fromTaskLinksClients = new List<FromTaskLinksClient>();

        foreach (var inproject in Projects)
        {
            ApplicationClass objProject = new ApplicationClass();

            objProject.Visible = false;

            object oMissing = System.Reflection.Missing.Value;

            object oFile = @"<>\" + inproject.ToString();
            object oReadOnly = true;
            object oFormat = "MSProject.mpp";
            object oUserID = UserName.ToString();
            object oDatabasePassword = Password.ToString();

            objProject.DisplayAlerts = false;

            objProject.FileOpen(oFile, oReadOnly, PjMergeType.pjDoNotMerge, oMissing, oMissing, oMissing, oMissing, oUserID, oDatabasePassword, oFormat, oMissing, PjPoolOpen.pjPoolReadOnly, oMissing, oMissing, oMissing, oMissing);

            Microsoft.Office.Interop.MSProject.Project project = objProject.ActiveProject;

            foreach (Microsoft.Office.Interop.MSProject.Task task in project.Tasks)
            {
                if (task.Predecessors.Contains("+") || task.Predecessors.Contains("-"))
                {
                    FromTaskLinksClient fromTaskClientLinks = new FromTaskLinksClient();
                    string Name = task.Name;
                    fromTaskClientLinks.ProjectName = inproject.ToString();
                    fromTaskClientLinks.TaskPredValue = task.Predecessors;
                    fromTaskClientLinks.TaskPred_Id = Guid.Parse(task.Guid);
                    fromTaskClientLinks.TaskPred_Name = task.Name;
                    fromTaskClientLinks.TaskPred_OutLineLevel = task.OutlineLevel;
                    fromTaskClientLinks.TaskPred_OutLineNumber = task.OutlineNumber;
                    fromTaskClientLinks.ProjectId = Guid.Empty;
                    fromTaskLinksClients.Add(fromTaskClientLinks);    
                }
            }
            objProject.Quit(PjSaveType.pjDoNotSave);


        }
        SetDefaultPWAInstance.SetInstanceToNo(PWAInstance3);
        return fromTaskLinksClients;
    }
}

Я ожидаю, что смогуполучить доступ к данным проекта и задачи для их обновления. Опять же, CSOM не позволяет обновлять Predeccessors с fs + x дней. Мне бы пришлось использовать объектную модель MS Project.

...