0

以下代码不会引发任何异常,但也不会创建新的 EPT:

public void CreateEnterpriseProjectType(Guid eptGuid, string eptName, string eptDescription)
    {
        ProjectContext pwaContext = new ProjectContext("http://serverName/pwaName");
        pwaContext.Credentials = new NetworkCredential("adminUsername", "adminPassword", "domainName");

        EnterpriseProjectTypeCreationInformation eptData = new EnterpriseProjectTypeCreationInformation();

        eptData.Id = eptGuid;
        eptData.Name = eptName;
        eptData.Description = eptDescription;
        eptData.IsDefault = false;
        eptData.IsManaged = true;
        eptData.WorkspaceTemplateName = "PROJECTSITE#0";
        eptData.ProjectPlanTemplateId = Guid.Empty;
        eptData.WorkflowAssociationId = Guid.Empty;

        // Get the maximum order of the existing EPTs and increment by 1 in order to use an order that does not already exist
        eptData.Order = Convert.ToInt32(Database.GetValue("SELECT MAX(ENTERPRISE_PROJECT_TYPE_ORDER) FROM [ProjectWebApp].[pub].[MSP_ENTERPRISE_PROJECT_TYPES]")) + 1;

        pwaContext.Load(pwaContext.ProjectDetailPages);
        pwaContext.ExecuteQuery();
        List<ProjectDetailPageCreationInformation> projectDetailPages = new List<ProjectDetailPageCreationInformation>() {new ProjectDetailPageCreationInformation() { Id = pwaContext.ProjectDetailPages[1].Id, IsCreate = false }};
        eptData.ProjectDetailPages = projectDetailPages;

        EnterpriseProjectType newEpt = pwaContext.EnterpriseProjectTypes.Add(eptData);
        pwaContext.EnterpriseProjectTypes.Update();
    }

关于我做错了什么或我错过了什么的任何想法?是否可以通过编程方式创建 EPT?

4

2 回答 2

0

以下代码对我来说很好:

public class PSI
{
    private ProjectContext _context;

    private string basicEpt = "Enterprise Project";   // Basic enterprise project type.
    private static readonly PSI psi = new PSI();
    private int timeoutSeconds = 60;
    SvcProject.ProjectClient _prClient;

    private PSI ()
    {
        _context = new ProjectContext(System.Configuration.ConfigurationManager.AppSettings["PwaUrl"]);
        //credentials of currently running acount or enable line below
        //_context.Credentials = new System.Net.NetworkCredential("user", "pass", "domain");

        timeoutSeconds = int.Parse(System.Configuration.ConfigurationManager.AppSettings["DefaultTimeoutPwa"]);
        _prClient = new SvcProject.ProjectClient("basicHttp_Project");
    }

    public static PSI Instance
    {
        get{ return psi; }
    }

    public Guid GetEptUid(string eptName)
    {
        Guid eptUid = Guid.Empty;

        try
        {
            var eptList = _context.LoadQuery( _context.EnterpriseProjectTypes.Where(ept => ept.Name == eptName));
            _context.ExecuteQuery();

            eptUid = eptList.First().Id;
        }
        catch (Exception ex)
        {
            string msg = string.Format("GetEptUid: eptName = \"{0}\"\n\n{1}", eptName, ex.GetBaseException().ToString());
            throw new ArgumentException(msg);
        }
        return eptUid;
    }

    public PublishedProject CreateProject(string prName, string description, DateTime startDate)
    {
        try
        {
            System.Console.Write("\nCreating project: {0} ...", prName);
            ProjectCreationInformation newProj = new ProjectCreationInformation();

            newProj.Id = Guid.NewGuid();
            newProj.Name = prName;
            newProj.Description = description;
            newProj.Start = startDate;

            newProj.EnterpriseProjectTypeId = GetEptUid(basicEpt);

            PublishedProject newPublishedProj = _context.Projects.Add(newProj);
            QueueJob qJob = _context.Projects.Update();
            JobState jobState = _context.WaitForQueue(qJob, timeoutSeconds);

            if (jobState == JobState.Success)
                return newPublishedProj;
            else
                return null;
        }
        catch (Exception ex)
        {
            System.Console.ForegroundColor = ConsoleColor.Red;
            System.Console.WriteLine("\nError: {0}", ex.Message);
            System.Console.ResetColor();
            return null;
        }
    }
}
于 2015-12-02T09:13:25.320 回答
0

是的,可以通过编程方式创建 EPT。结果发现缺少了三样东西:

  1. 第二个 PDP 具有(成功创建 EPTIsCreate = true至少需要一个IsCreate = true和一个)IsCreate = false

  2. 在添加新 EPT 之前迭代现有 EPT 的查询:

pwaContext.Load(pwaContext.EnterpriseProjectTypes); pwaContext.ExecuteQuery();

  1. 一个命令pwaContext.ExecuteQuery();pwaContext.EnterpriseProjectTypes.Update();
于 2015-08-12T08:46:18.050 回答