Statusing WebService Updates ChangeList Schema

Sample code to update timesheet

Video blogs on Task Statusing

Treb and Dave are working on a series of Silverlight video blogs around task statusing and timetracking – and specifically what the administrative options do, and the first is live at and as you can guess from the URL it covers task settings and display settings in the Server Settings page.

As a side note, if you want to see Brian and I in action, check the following video from the last TechEd: Line-of-Business Integration Using Microsoft Office SharePoint Server 2007 and Microsoft Office Project Server 2007 (search for “project server”)

Figuring out the ChangeXML format when using the ‘UpdateStatus’ method

Christophe Fiessinger 31 Oct 2007 12:01 PM

The Statusing web service (Project Server Interface) in EPM2007 contains a powerful method called UpdateStatus. This method can be used to make changes to tasks and assignments; for instance: Actual Work, % Work Complete, … please refer to the ChangeList Schema Reference in the SDK for a complete list.

To help you generate the XML string required to achieve your customization needs the latest version of the SDK has a powerful tool that will help you generate the ChangeXML command: How to: Generate ChangeXML for Statusing Updates

Your customization will ideally generate the proper ChangerXML command dynamically based on the entities you need to update.

A sample method to generate the ChangeXML string could look like this:

public static StringBuilder CreateChangeXml(TimeSheetWS.TimesheetDataSet timesheetDs)


StringBuilder changeXml = new StringBuilder();

string pidRegularWork = PSLibrary.AssnConstID.s_apid_regular_work.ToString(System.Globalization.CultureInfo.InvariantCulture);


for (int i = 0; i < timesheetDs.Lines.Count; i++)


if (timesheetDs.Lines[i].TS_LINE_VALIDATION_TYPE == (int)PSLibrary.TimesheetEnum.ValidationType.Verified)


changeXml.AppendFormat("<Proj ID=\"{0}\">", timesheetDs.Lines[i].PROJ_UID.ToString());

changeXml.AppendFormat("<Assn ID=\"{0}\">", timesheetDs.Lines[i].ASSN_UID.ToString());

changeXml.AppendFormat("<Change PID=\"{0}\">{1}</Change>", pidRegularWork, timesheetDs.Lines[i].TS_LINE_ACT_SUM_VALUE.ToString(System.Globalization.CultureInfo.InvariantCulture));





return changeXml;