Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

ProjectFusion: ColdFusion Project Server Integration

Manage tasks, resources, and projects

Most people are familiar with Microsoft Project - project management software that allows you to manage many aspects of projects including tasks, due dates, progress, and people assigned to specific tasks.

Microsoft Project Server is an enterprise storage product that facilitates sharing project plans created with Microsoft Project with other people in a company, especially other project managers. Project Server enables you to manage a workforce by tracking all projects in common and giving you a view of all projects that an individual may be assigned to. Chances are that any large organization will have more than one project manager and using a centralized storage point allows for better group management of projects. In this kind of environment, Project Server acts as the central repository and Microsoft Project acts as a client to access that information. Project Server also provides a Web interface for viewing the status of projects.

The principal (recommended) way to integrate with Microsoft Project is by using the integrated Project Data Service (PDS) that's included with Microsoft Project Server. PDS is a SOAP Web service that translates incoming requests and manages their entry into the system. The most common integration pieces are external user management, timesheet systems, and ticketing systems. The PDS exposes pieces of the puzzle that allow you to integrate with these external systems and to integrate all the parts of your organizational project systems.

The PDS will allow you to create projects, tasks, resources, as well as log time against projects and run administrative reports on information in the system. Granted, for most integration you'll want to use the Microsoft hooks into other Microsoft products. For example, Project Server boasts excellent integration with Microsoft's Outlook Exchange, Active Directory, and Sharepoint. If those are your only integration points, any work you would need to do is done by Microsoft, but if you need to work with a non-Microsoft product, read on.

Often times the largest integration obstacle is simply learning how a product works, and that can easily be the case with Microsoft Project. The initial learning curve of Microsoft Project may be steep but it's worth the hurdle to reach familiarization with the application before and during your implementation. You can retrieve a copy of the Microsoft Project Server API help files from this location: www.microsoft.com/downloads/details.aspx?FamilyID=4D2ABC8C-8BCA-4DB9-8753-178C0D3099C5&displaylang=en .

I'll now focus on the basics of the PDS and share some code that you can use in your organization to hook into Project Server.

Authentication
The first thing you have to do in any integration is authenticate with the other system. In Project Server land authentication is a three-part process: authenticate with Project Server, create the session, and authenticate with PDS Web services. If you're trying this on your local system, the best way to debug and observe the authentication steps is to turn on prompting for all cookies and turn off automatic forwarding in your Web browser.

To authenticate with Project Server:


 <cfhttp method="get"  url="http://#projectserver#/projectserver/lgnPSAu.asp"
   redirect="No" timeout="60">
    <cfhttpparam name="un" value="#pjUname#" type="url">
    <cfhttpparam name="pwd" value="#pjPwd#" type="url">
</cfhttp>

Next take the cookie from the Project Server login page and pass it to the session manager:


<cfhttp method="post" url="http://#projectserver#/projectserver/SesStart.asp?
ref=lgnpsau.asp&au=0" redirect="No" timeout="60">
  <cfhttpparam name="PjSessionID" value="#urldecode(PjSessionCookie)#" 
  type="Cookie">
</cfhttp>

Passing in the cookie to Project Server instantiates the session on Project Server and initiates the security system.


<cfhttp method="post"  url="http://#projectserver#/projectserver/lgnpsau.asp?err=0"
 redirect="No" timeout="60">
   <cfhttpparam name="PjSessionID" value="#urldecode(PjSessionCookie)#" type="Cookie">
</cfhttp>

After the third cfhttp call, you'll receive an XML session cookie to use with Web services. Each and every Web service request must be accompanied with the XML session cookie provided in the last step. This cookie serves to associate your session with the system and Project Server uses this to manage the security and show you the correct projects that your username has access to. To make things easier, create an object and function to send the cookie and the XML request to Project Server.


<cfobject webservice="http://sjn-msp-02/projectserver/pds.wsdl" name="pdshandle">

  // Function to make it easier to send requests to the web service
    function pdsSend(myxml) {
       var returnedxml = "";
        returnedxml = xmlparse(pdshandle.soapxmlrequest(sessioncookie,m
		yxml));
        return returnedxml;
   }

From here you just have to send SOAP requests to the Project Server to manage whatever project you're working on. The first step is to create a project using the PDS <CreateProject> method:


 initialProject = pdsSend("<Request><ProjectCreate><AutoPublish>1</AutoPublish>
 <Project>
<ProjectName>#projectname#</ProjectName><Title>MY Test ColdFusion
 Project</Title><Company>eBay</Company><StartDate>#dateformat(now(),'yyyymmdd')#
 </StartDate></Project></ProjectCreate></Request>");

You can use this method to fully create a project and tasks, if you know all of the details about the project, such as tasks, resources, and assignments. For this example, though, project creation is broken down into each respective method call to show a wider variety of methods associated with the PDS. This example creates only one project but the PDS allows you to create multiple projects in one request. A large number of PDS methods allow you to create or modify several items in one request, which can be very convenient; however, if one item fails, all other items will fail as well.

Replies from the PDS Web service always come back in the same format: an XML response with an hresult and status node. A status code of 0 means that your request was successful; anything greater than a 0 means that something went wrong and the request failed. Figure 1 shows a <CFDUMP> of the resultant XML that is returned by PDS.

Next, check out the project you just created using the Web service call <ProjectsCheckout> to add tasks, resources, and assignments to it.


projectcheckout = pdsSend("<Request><ProjectsCheckout><Project>
<ProjectID>#projectID#
</ProjectID>
</Project><Project><ProjectID>1</ProjectID></Project>
</ProjectsCheckout>
</Request>");

In the <ProjectsCheckout> Web service call, there are two projects being checked out: the project you just created from the PDS system and the ID for the global resources project. To add resources or users to Project Server, it's necessary to check out the global project because the resources will also be added to the global project. In the default configuration, the global project should have an ID of 1 and the name of resglobal, but this may be different for your configuration. It helps to keep in mind that within Project Server, users are a type of resource.

Once the global resource project is checked out, create a resource by calling the <ResourcesAdd> method.


resourceinfo = pdsSend("<Request><ResourcesAdd><Resources><Resource>
<Name>#resourcename#</Name></Resource></Resources></ResourcesAdd></Request>");

The default type of resource created is the "work" type, meaning a person. When a work resource is created with this PDS method, it automatically creates a Project Server Web access login for the resource as well. PDS returns the enterprise resource ID or Enterprise User ID (EUID) of the user that is created. The EUID is needed for successive method calls and it must be parsed out.

Although the resource has been added to Project Server, it still needs to be added to the project that was just created in order to assign the resource to a task. Using <ProjectResourcesCreate> you can add one or several resources to the project.


ProjResource = pdsSend("<Request><ProjectResourcesCreate><AutoPublish>1</AutoPublish>
<ProjectID>#projectID#</ProjectID><Resources><Resource><EUID>#resourceUID#
</EUID></Resource></Resources></ProjectResourcesCreate></Request>");

At this point there is a little bit of a problem. The resource was added to Project Server and an EUID was created, but unfortunately the EUID can't be used in the project for assignments. For resources in Project Server there are three IDs to choose from when trying to assign a resource to a specific task in a project. Resources have an enterprise resource ID or EUID (one that corresponds to the resource ID of the resource global project), a project resource Unique ID (UID), and a Resource ID.

To assign the resource to the task, you need to find the UID for the resource. You can accomplish this by making another request to get the details for the project using the <ProjectData> method and then taking the EUID received after adding the resource to Project Server and matching it with the EUID that's returned with the project data. The <ProjectData> method returns a complete resource object that includes the EUID and the UID for that particular project.


projectdata =  pdsSend("<Request><ProjectData><ProjectID>#projectID#</ProjectID>
<ReturnUIDs>1</ReturnUIDs></ProjectData></Request>");

Sound confusing? It helps to think of Project Server organizing everything into projects. When a resource is added to a project, it creates a Unique ID for that project. The EUID corresponds to the Unique ID for the resource in the global project.

There's one other thing that you need the project data for: to find out what the next Task ID should be. If you have installed the latest service pack from Microsoft for Project Server, you won't need to do this step. For previous versions of Project Server you'll need to find out what the next Task ID is and include it with the Project ID in the task creation method <ProjectTasksCreate>.


Taskxml = pdsSend("<Request><ProjectTasksCreate><AutoPublish>1</AutoPublish>
<ProjectID>#ProjectID#</ProjectID><Tasks><Task><Name>#taskname#</Name>
<ID>#projectTaskID#</ID><Finish>#dateformat(taskenddate,'yyyymmdd')
##timeformat(taskenddate,'HHmmss')#</Finish><Start>#dateformat(taskstartdate,'yyyymmdd')
##timeformat(taskstartdate,'HHmmss')#</Start></Task></Tasks>
</ProjectTasksCreate></Request>");

Once the task has been added to the project, assign a resource to the task using <ProjectAssignmentsCreate>.


ProjAssign = pdsSend("<Request><ProjectAssignmentsCreate><AutoPublish>1</AutoPublish>
<ProjectID>#ProjectID#</ProjectID><Assignments><Assignment>
<TaskID>#projectTaskID#</TaskID><ResourceID>#ProjectResourceID#</ResourceID>
<Units>100</Units><Finish>#dateformat(taskenddate,'yyyymmdd')
##timeformat(taskenddate,'HHmmss')#</Finish><Start>#dateformat(taskstartdate,'yyyymmdd')
##timeformat(taskstartdate,'HHmmss')#</Start></Assignment></Assignments>
</ProjectAssignmentsCreate></Request>");

A resource can only be assigned to a task once. However, several resources can be assigned to complete a task. Assignments have their own start dates and end dates as well, because specific assignments can be less than the duration of the task. To finish it off, check the project back in and voilà, you've created your own project in Project Server!


projectcheckin = pdsSend("<Request><ProjectsCheckin><Project>
<ProjectID>#projectID#
</ProjectID>
</Project><Project><ProjectID>1</ProjectID></Project>
</ProjectsCheckin>
</Request>");

Conclusion
Once all of the above steps have been completed, you have a project in which you can manage tasks, resources, and projects. Using the Web service calls discussed in this article, you can do anything from tracking the status of projects, to managing resources and resource availability on an enterprise scale with your custom applications. Integrating with Project Server using ColdFusion's built-in processing tools is a great way to connect your enterprise applications to Microsoft's project management tools. If you're interested in doing more with Project Server, you'll find more information at these Web sites:

  • The official developer's network that includes tools and information for dealing with Microsoft Project including developer guides and helpful information about integrating with Microsoft Project Server and Microsoft Project: http://msdn.microsoft.com/project
  • Microsoft Project Users Group is an independent Web site that features Microsoft Project and project management resources for those interested in finding out more about how other project management professionals are doing things in the real world: www.mpug.org

More Stories By John Hirschi

Jon Hirschi is a Senior Web Developer at eBay Inc. specializing in content and knowledge management systems. He has been using ColdFusion since version 4.0.

Comments (0)

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


@ThingsExpo Stories
According to Forrester Research, every business will become either a digital predator or digital prey by 2020. To avoid demise, organizations must rapidly create new sources of value in their end-to-end customer experiences. True digital predators also must break down information and process silos and extend digital transformation initiatives to empower employees with the digital resources needed to win, serve, and retain customers.
Amazon has gradually rolled out parts of its IoT offerings in the last year, but these are just the tip of the iceberg. In addition to optimizing their back-end AWS offerings, Amazon is laying the ground work to be a major force in IoT – especially in the connected home and office. Amazon is extending its reach by building on its dominant Cloud IoT platform, its Dash Button strategy, recently announced Replenishment Services, the Echo/Alexa voice recognition control platform, the 6-7 strategic...
We're entering the post-smartphone era, where wearable gadgets from watches and fitness bands to glasses and health aids will power the next technological revolution. With mass adoption of wearable devices comes a new data ecosystem that must be protected. Wearables open new pathways that facilitate the tracking, sharing and storing of consumers’ personal health, location and daily activity data. Consumers have some idea of the data these devices capture, but most don’t realize how revealing and...
IoT solutions exploit operational data generated by Internet-connected smart “things” for the purpose of gaining operational insight and producing “better outcomes” (for example, create new business models, eliminate unscheduled maintenance, etc.). The explosive proliferation of IoT solutions will result in an exponential growth in the volume of IoT data, precipitating significant Information Governance issues: who owns the IoT data, what are the rights/duties of IoT solutions adopters towards t...
Whether your IoT service is connecting cars, homes, appliances, wearable, cameras or other devices, one question hangs in the balance – how do you actually make money from this service? The ability to turn your IoT service into profit requires the ability to create a monetization strategy that is flexible, scalable and working for you in real-time. It must be a transparent, smoothly implemented strategy that all stakeholders – from customers to the board – will be able to understand and comprehe...
Complete Internet of Things (IoT) embedded device security is not just about the device but involves the entire product’s identity, data and control integrity, and services traversing the cloud. A device can no longer be looked at as an island; it is a part of a system. In fact, given the cross-domain interactions enabled by IoT it could be a part of many systems. Also, depending on where the device is deployed, for example, in the office building versus a factory floor or oil field, security ha...
An IoT product’s log files speak volumes about what’s happening with your products in the field, pinpointing current and potential issues, and enabling you to predict failures and save millions of dollars in inventory. But until recently, no one knew how to listen. In his session at @ThingsExpo, Dan Gettens, Chief Research Officer at OnProcess, discussed recent research by Massachusetts Institute of Technology and OnProcess Technology, where MIT created a new, breakthrough analytics model for s...
In his general session at 19th Cloud Expo, Manish Dixit, VP of Product and Engineering at Dice, discussed how Dice leverages data insights and tools to help both tech professionals and recruiters better understand how skills relate to each other and which skills are in high demand using interactive visualizations and salary indicator tools to maximize earning potential. Manish Dixit is VP of Product and Engineering at Dice. As the leader of the Product, Engineering and Data Sciences team at D...
"We're a cybersecurity firm that specializes in engineering security solutions both at the software and hardware level. Security cannot be an after-the-fact afterthought, which is what it's become," stated Richard Blech, Chief Executive Officer at Secure Channels, in this SYS-CON.tv interview at @ThingsExpo, held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA.
In this strange new world where more and more power is drawn from business technology, companies are effectively straddling two paths on the road to innovation and transformation into digital enterprises. The first path is the heritage trail – with “legacy” technology forming the background. Here, extant technologies are transformed by core IT teams to provide more API-driven approaches. Legacy systems can restrict companies that are transitioning into digital enterprises. To truly become a lead...
Video experiences should be unique and exciting! But that doesn’t mean you need to patch all the pieces yourself. Users demand rich and engaging experiences and new ways to connect with you. But creating robust video applications at scale can be complicated, time-consuming and expensive. In his session at @ThingsExpo, Zohar Babin, Vice President of Platform, Ecosystem and Community at Kaltura, discussed how VPaaS enables you to move fast, creating scalable video experiences that reach your aud...
"Once customers get a year into their IoT deployments, they start to realize that they may have been shortsighted in the ways they built out their deployment and the key thing I see a lot of people looking at is - how can I take equipment data, pull it back in an IoT solution and show it in a dashboard," stated Dave McCarthy, Director of Products at Bsquare Corporation, in this SYS-CON.tv interview at @ThingsExpo, held November 1-3, 2016, at the Santa Clara Convention Center in Santa Clara, CA.
What happens when the different parts of a vehicle become smarter than the vehicle itself? As we move toward the era of smart everything, hundreds of entities in a vehicle that communicate with each other, the vehicle and external systems create a need for identity orchestration so that all entities work as a conglomerate. Much like an orchestra without a conductor, without the ability to secure, control, and connect the link between a vehicle’s head unit, devices, and systems and to manage the ...
IoT is rapidly changing the way enterprises are using data to improve business decision-making. In order to derive business value, organizations must unlock insights from the data gathered and then act on these. In their session at @ThingsExpo, Eric Hoffman, Vice President at EastBanc Technologies, and Peter Shashkin, Head of Development Department at EastBanc Technologies, discussed how one organization leveraged IoT, cloud technology and data analysis to improve customer experiences and effici...
Everyone knows that truly innovative companies learn as they go along, pushing boundaries in response to market changes and demands. What's more of a mystery is how to balance innovation on a fresh platform built from scratch with the legacy tech stack, product suite and customers that continue to serve as the business' foundation. In his General Session at 19th Cloud Expo, Michael Chambliss, Head of Engineering at ReadyTalk, discussed why and how ReadyTalk diverted from healthy revenue and mor...
The 20th International Cloud Expo has announced that its Call for Papers is open. Cloud Expo, to be held June 6-8, 2017, at the Javits Center in New York City, brings together Cloud Computing, Big Data, Internet of Things, DevOps, Containers, Microservices and WebRTC to one location. With cloud computing driving a higher percentage of enterprise IT budgets every year, it becomes increasingly important to plant your flag in this fast-expanding business opportunity. Submit your speaking proposal ...
The Internet of Things (IoT) promises to simplify and streamline our lives by automating routine tasks that distract us from our goals. This promise is based on the ubiquitous deployment of smart, connected devices that link everything from industrial control systems to automobiles to refrigerators. Unfortunately, comparatively few of the devices currently deployed have been developed with an eye toward security, and as the DDoS attacks of late October 2016 have demonstrated, this oversight can ...
You have great SaaS business app ideas. You want to turn your idea quickly into a functional and engaging proof of concept. You need to be able to modify it to meet customers' needs, and you need to deliver a complete and secure SaaS application. How could you achieve all the above and yet avoid unforeseen IT requirements that add unnecessary cost and complexity? You also want your app to be responsive in any device at any time. In his session at 19th Cloud Expo, Mark Allen, General Manager of...
Bert Loomis was a visionary. This general session will highlight how Bert Loomis and people like him inspire us to build great things with small inventions. In their general session at 19th Cloud Expo, Harold Hannon, Architect at IBM Bluemix, and Michael O'Neill, Strategic Business Development at Nvidia, discussed the accelerating pace of AI development and how IBM Cloud and NVIDIA are partnering to bring AI capabilities to "every day," on-demand. They also reviewed two "free infrastructure" pr...
As data explodes in quantity, importance and from new sources, the need for managing and protecting data residing across physical, virtual, and cloud environments grow with it. Managing data includes protecting it, indexing and classifying it for true, long-term management, compliance and E-Discovery. Commvault can ensure this with a single pane of glass solution – whether in a private cloud, a Service Provider delivered public cloud or a hybrid cloud environment – across the heterogeneous enter...