首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以通过PSI/CSOM创建EPT (MS PS企业项目类型)?

是否可以通过PSI/CSOM创建EPT (MS PS企业项目类型)?
EN

Stack Overflow用户
提问于 2015-08-11 21:42:15
回答 2查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2015-08-12 16:46:18

可以,可以通过编程方式创建EPT。结果发现遗漏了三样东西:

  1. 具有IsCreate = true的第二个PDP (要成功创建EPT,至少需要一个具有IsCreate = true的PDP和一个具有IsCreate = false的PDP)
  2. 用于在添加新的EPT之前迭代现有EPT的查询:

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

  1. pwaContext.EnterpriseProjectTypes.Update();命令后的pwaContext.ExecuteQuery();
票数 0
EN

Stack Overflow用户

发布于 2015-12-02 17:13:25

下面的代码很适合我:

代码语言:javascript
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31943462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档