using System; using TestFramework.ApplicationAPI; using TestFramework.AuthenticateAPI; using TestFramework; namespace Tests.wbs { /// <summary> /// Summary description for WBSProjectSample. /// /// this sample loads or create a portfolio /// then creates a project, a proposal and a work organization /// and assigns them to the portfolio /// </summary> public class WBSProjectSample { public WBSProjectSample() { } // these are all variables that are used in this sample public static String projectExternalID = "external"; public static String projectName = "IBM_GENERIC_PROJECT_ABC"; public static String parentProjectExternalID = "parentExternalID"; public static String chargeCodeName = "charge code name"; public static String projectManagerID = "MANAGER_ID"; public static String portName = "IBMPORTFOLIO_ABC"; //Session ID is use for all transaction and is get from the //Authenticate.login function. The session ID will replace //the User password while transacting public static String sessionid; public void sampleTest() { // initialize a session with the API sessionid = APISetup.SetUp(); // create a save result object SaveResult save = null; // create a portfolio scope // this scope enables us to work with a portfolio and // any child object we wish to use PortfolioScope pScope = new PortfolioScope(); // create a portfolio object that we will use to either // create one or load one portfolio Portfolio parentProject = null; // adjust portfolio scope so it includes projects pScope.projects = new WorkElementScope(); LoadResult loader = APISetup.application. loadFromXpath(sessionid, "/Portfolio", null); // query the portfolio LoadResult load = APISetup.application.loadFromXpath( sessionid, "/Portfolio[name='" + portName + "']", pScope ); //check if the portfolio exists if( load.rpmObjectList == null || load.rpmObjectList.Length == 0 ) { // create a portfolio parentProject = new Portfolio(); parentProject.name = portName; // save the porfolio to the RPM repository // use a reload type thats enables you to continue // using the object // a scope is not necessary here since we save a // simple portfolio save = new SaveResult(); save = APISetup.application.save(sessionid, parentProject, pScope,ReloadType.ReloadResult); APISetup.checkForErrors( save ); // reload the portfolio // this way, an ID and contexte // name as been given to it parentProject = (Portfolio)save.rpmObject; } else { // assign the existing portfolio to // the portfolio object parentProject = (Portfolio)load.rpmObjectList[0]; } // create a proposal Proposal proposal = createProposal(parentProject); // create a project Project project = createProject(parentProject); // create a work organization WorkOrganization organization = createOrganization(parentProject); // assign the generic projects to the portfolio parentProject.projects = new GenericProject[] {proposal, project, organization}; // save the portfolio into the RPM repository // use a reload type thats enables you to continue // using the object // a scope is necessary to keep the projects // linked with the portfolio save = new SaveResult(); save = APISetup.application.save(sessionid,parentProject, pScope,ReloadType.ReloadResult); APISetup.checkForErrors( save ); // close connection with API APISetup.CleanUp(sessionid); } /** Proposal createProposal * * simple fonction casting a Proposal into * createGenericProject fonction */ public Proposal createProposal(Portfolio parent) { Proposal proposal = (Proposal)createGenericProject(new Proposal(), parent); SaveResult save = new SaveResult(); save = APISetup.application.save(sessionid, proposal, null, ReloadType.ReloadResult); APISetup.checkForErrors( save ); return (Proposal)save.rpmObject; } /** WorkOrganization createOrganization * * simple fonction casting a WorkOrganization into * createGenericProject fonction */ public WorkOrganization createOrganization(Portfolio parent) { WorkOrganization org = (WorkOrganization)createGenericProject( new WorkOrganization(), parent); SaveResult save = new SaveResult(); save = APISetup.application.save(sessionid, org, null, ReloadType.ReloadResult); APISetup.checkForErrors( save ); return (WorkOrganization)save.rpmObject; } /** Project createProject * * simple fonction casting a Project into * createGenericProject fonction */ public Project createProject(Portfolio parent) { Project project = (Project)createGenericProject( new Project(), parent); SaveResult save = new SaveResult(); save = APISetup.application.save(sessionid, project, null, ReloadType.ReloadResult); APISetup.checkForErrors( save ); return (Project)save.rpmObject; } /** GenericProject createGenericProject * * Fonction creating a generic project * with basic information plus calendar and currency */ public GenericProject createGenericProject(GenericProject projectToUpdate, Portfolio parent) { // create a new project projectToUpdate.externalID = projectExternalID; projectToUpdate.name = projectName; projectToUpdate.portfolio = parent; TestFramework.ApplicationAPI.RPMCalendar projectCalendar= (TestFramework.ApplicationAPI.RPMCalendar)APISetup. application.loadFromXpath(sessionid, "/RPMCalendar[name='Standard (Default)']", null ). rpmObjectList[0]; projectToUpdate.calendar = projectCalendar; Currency projectCurrency = (Currency)APISetup. application.loadFromXpath(sessionid, "/Currency[name='Canadian dollars']", null ).rpmObjectList[0]; projectToUpdate.currency = projectCurrency; projectToUpdate.estimatedStartDate = new DateTime(2005, 10, 10, 10, 10, 10 ); projectToUpdate.estimatedFinishDate = new DateTime(2005, 11, 10, 10, 10, 10 ); projectToUpdate.assignmentType = AssignmentType.Work; return projectToUpdate; } } }