Примечание: я решил проблему с ошибками открытия 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.