Share via


Project.SyncProjectWithWss Method

Synchronizes the indicated project, or the SharePoint task list, as specified by the unique identifier.

Namespace:  [Project Web service]
Service reference: http://ServerName:32843/[Project Service Application GUID]/PSI/Project.svc
Web service reference: http://ServerName/ProjectServerName/_vti_bin/PSI/Project.asmx?wsdl

Syntax

'Declaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/SyncProjectWithWss", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Project/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/Project/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub SyncProjectWithWss ( _
    syncEntityUid As Guid, _
    syncEntityUidType As SyncEntityUidType _
)
'Usage
Dim instance As Project
Dim syncEntityUid As Guid
Dim syncEntityUidType As SyncEntityUidType

instance.SyncProjectWithWss(syncEntityUid, _
    syncEntityUidType)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/Project/SyncProjectWithWss", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Project/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/Project/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void SyncProjectWithWss(
    Guid syncEntityUid,
    SyncEntityUidType syncEntityUidType
)

Parameters

  • syncEntityUid
    Type: System.Guid
    The GUID of the project or the SharePoint task list.

Remarks

This is a new method in Project Server 2010. The SyncProjectWithWss method works on a project that has already been synchronized, where the synchronization data has been created by the CreateWssListSyncedProject method or updated by the UpdateProjectSyncSettings method.

Project Server Permissions

Permission

Description

PublishProject

Allows a user to publish a project to the Project Server Published database.

Examples

The example uses the SvcProject namespace in the ProjectServerServices.dll proxy assembly. The ConfigClientEndpoints method and the SetClientEndPoints method use an app.config file for setting the WCF binding, behavior, and endpoint. For information about creating a PSI proxy assembly and an app.config file, see Prerequisites for WCF-Based Code Samples.

Note

The following example is designed to demonstrate the use of the SyncProjectWithWss, UpdateSyncProjectSettings, and CreateWssListSyncedProjectmethods; it is not a full solution. The GUIDs are hardcoded for the necessary fields. To use the example, first create a SharePoint task list. In the code, change the LIST_TITLE, the SHAREPOINT_LIST_SITE, and other URL values where applicable, to match those in your test installation of Project Server 2010.

The SyncProjectWithWss method synchronizes the project with the SharePoint task list by using the updated SyncDataSet.

The Lists web service provides methods for working with SharePoint lists and list items. To access this web service, set a reference to http://site/_vti_bin/Lists.asmx.

The Lists.GetListCollection web method returns an XML document that includes the names and GUIDs of all lists in the SharePoint site. The sample uses the XElement.Parse method to change the XML document to an XElement object named root. The GetListGuid method then does a LINQ to XML query on the root object and returns the GUID of the list that corresponds to the list title.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.IO;
using System.ServiceModel;
using System.Xml;
using System.Xml.Linq;
using PSLibrary = Microsoft.Office.Project.Server.Library;
using System.Data;
using System.Web.Services;
using WebSvcLists = Microsoft.SDK.Project.Samples.ReadArchivedProjectsList.WebSvcLists;

namespace Microsoft.SDK.Project.Samples.SyncProject
{
    class Program
    {
        // Change the URL of the SharePoint list site and the name of the task list.
        private const string SHAREPOINT_LIST_SITE = "http://jc2vm1";
        private const string LIST_TITLE = "Task List 102";

        private const string ENDPOINT_PROJECT = "basicHttp_Project";
        private const string OUTPUT_FILES = @"C:\Projects\Samples\Output\";
        private static string outFilePathSyncDataSet;
        private static string outFilePathUpdatedSyncDS;

        private static SvcProject.ProjectClient projectClient;
        private static WebSvcLists.Lists lists;
        
        // The GUIDs of the default fields are the same in all 
        // SharePoint 2010 default task lists.
        private const string PRIORITY_LIST_FIELD_GUID =
            "a8eb573e-9e11-481a-a8c9-1104a54b2fbd";
        private const string DUEDATE_LIST_FIELD_GUID =
            "cd21b4c2-6841-4f9e-a23a-738a65f99889";
        private const string STARTDATE_LIST_FIELD_GUID =
            "64cd368d-2f95-4bfc-a1f9-8d4324ecb007";
        private const string BODY_LIST_FIELD_GUID =
            "7662cd2c-f069-4dba-9e35-082cf976e170";
        private const string ASSIGNEDTO_LIST_FIELD_GUID =
            "53101f38-dd2e-458c-b245-0c236cc13d1a";
        private const string PERCENTCOMPLETE_LIST_FIELD_GUID =
            "d2311440-1ed6-46ea-b46d-daa643dc3886";
        private const string TITLE_LIST_FIELD_GUID =
            "fa564e0f-0c70-4ab9-b863-0177e6ddd247";
        private const string PRIORITY_FIELD_GUID = 
            "a8eb573e-9e11-481a-a8c9-1104a54b2fbd";

        private static XElement root;  // The root of the list XML data.

        static void Main(string[] args)
        {
            lists = new WebSvcLists.Lists();
            lists.Url = "http://jc2vm1/_vti_bin/lists.asmx";
            lists.Credentials = CredentialCache.DefaultCredentials;

            // Get the XML data for the lists in the specified 
            // SharePoint lists collection.
            XmlNode listData = lists.GetListCollection();

            root = XElement.Parse(listData.OuterXml);

            string projectName = string.Empty;
            Guid listUid = GetListGuid(root, LIST_TITLE, out projectName);
            
            // If the output directory does not exist, create it.
            if(!Directory.Exists(OUTPUT_FILES))
            {
                Directory.CreateDirectory(OUTPUT_FILES);
            }

            // Assign the path where the output XML file will be saved.
            outFilePathSyncDataSet = OUTPUT_FILES + "SyncDataSet.xml";
            outFilePathUpdatedSyncDS = OUTPUT_FILES + "UpdatedSyncDataSet.xml";

            // Configure the endpoints.
            ConfigClientEndpoints(ENDPOINT_PROJECT);

            try
            {
                // Create Sync Dataset.
                SvcProject.SyncDataSet syncDS = CreateSyncDataSet(listUid);

                // Create the project.
                Guid CreatedProject_Guid = projectClient.CreateWssListSyncedProject(
                    syncDS, projectName);
                Guid[] syncEntityGuids = new Guid[1];
                syncEntityGuids[0] = listUid;

                // Read back the SyncDataSet, and write it to a file.
                SvcProject.SyncEntityUidType syncEntityUidType =
                    SvcProject.SyncEntityUidType.WssListUid;
                syncDS = projectClient.ReadProjectSyncSettings
                        (syncEntityGuids, syncEntityUidType, true);
                syncDS.WriteXml(outFilePathSyncDataSet);

                // Update project synchronization settings.
                syncDS.SyncValueTranslations.Rows[0]["SYNC_PROJECT_VALUE"] = "900";

                // No values are allowed in the SyncItemTaskMappings table, 
                // when updating the project synchronization settings.
                syncDS.SyncItemTaskMappings.Clear();
                syncDS.AcceptChanges();

                projectClient.UpdateProjectSyncSettings(syncDS);
                syncDS.WriteXml(outFilePathUpdatedSyncDS);

                // Synchronize the updated project.
                projectClient.SyncProjectWithWss(listUid, syncEntityUidType);
            }
            catch (CommunicationException e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(
                    "\n***System.ServiceModel.CommunicationException:");
                Console.WriteLine(e.ToString());
                Console.ResetColor();
            }
            Console.WriteLine("\n\nPress any key to exit.");
            Console.ReadKey(false);
        }

        static Guid GetListGuid(XElement listCollection, string listTitle, 
            out string projectName)
        {
            string listId = string.Empty;
            XNamespace xmlns = "https://schemas.microsoft.com/sharepoint/soap/";

            var query = from el in root.Elements(xmlns + "List")
                        where el.Attribute("Title").Value.Equals(listTitle)
                        select el;

            int numElem = query.Count<XElement>();
            Console.WriteLine("Number of elements in query: " + numElem.ToString());

            projectName = query.First<XElement>().Attribute("Title").Value;
            Console.WriteLine(projectName);

            listId = query.First<XElement>().Attribute("ID").Value;
            Guid listUid = new Guid(listId);
            Console.WriteLine("List ID = " + listUid.ToString());
            return listUid;
        }

        // Create the initial SyncDataSet, to use for synchronizing
        // a project the first time.
        static SvcProject.SyncDataSet CreateSyncDataSet(Guid listUid)
        {
            SvcProject.SyncDataSet syncDS = new SvcProject.SyncDataSet();

            string priority = PSLibrary.WSSSync.PriorityFieldName;
            string wssDuedate = "Due Date";
            string projectDueDate = PSLibrary.WSSSync.FinishDateFieldName;
            string wssAssignedTo = "Assigned To";
            string projectAssignedTo = PSLibrary.WSSSync.AssignedToFieldName;
            string wssStartDate = "Start Date";
            string projectStartDate = PSLibrary.WSSSync.StartDateFieldName;
            string wssPercentComplete = "% Complete";
            string projectPercentComplete = PSLibrary.WSSSync.PercentCompleteFieldName;
            string wssBody = "Body";
            string projectNotes = PSLibrary.WSSSync.PercentCompleteFieldName;
            string title = "Title";
            string priorityHigh = "(1) High";
            string priorityNormal = "(2) Normal";
            string priorityLow = "(3) Low";
            string priorityHighValue = "600";
            string priorityNormalValue = "500";
            string priorityLowValue = "400";

            // Project field GUIDs are the same for all projects.
            Guid PRIORITY_PROJECT_FIELD_GUID = PSLibrary.WSSSync.PriorityFieldUid;
            Guid FINISHDATE_PROJECT_FIELD_GUID = PSLibrary.WSSSync.FinishDateFieldUid;
            Guid ASSIGNEDTO_PROJECT_FIELD_GUID = PSLibrary.WSSSync.AssignedToFieldUid;
            Guid STARTDATE_PROJECT_FIELD_GUID = PSLibrary.WSSSync.StartDateFieldUid;
            Guid PERCENTCOMPLETE_PROJECT_FIELD_GUID = PSLibrary.WSSSync.PercentCompleteFieldUid;
            Guid NOTES_PROJECT_FIELD_GUID = PSLibrary.WSSSync.DescriptionFieldUid;
            Guid TITLE_PROJECT_FIELD_GUID = PSLibrary.WSSSync.TitleFieldUid;

            // Create a SyncProjectSettings row.
            SvcProject.SyncDataSet.SyncProjectSettingsRow synProjectSettingRow = 
                syncDS.SyncProjectSettings.NewSyncProjectSettingsRow();
            synProjectSettingRow.SYNC_WSS_LIST_UID = listUid;
            synProjectSettingRow.PROJ_UID = Guid.NewGuid();
            synProjectSettingRow.SYNC_WSS_SERVER_URL = SHAREPOINT_LIST_SITE;
            syncDS.SyncProjectSettings.AddSyncProjectSettingsRow(
                synProjectSettingRow);

            // Add SyncFieldMappingsRows.
            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow.SYNC_WSS_FIELD_UID = 
                new Guid(PRIORITY_LIST_FIELD_GUID);
            syncFieldMappingsRow.SYNC_WSS_FIELD_NAME = priority;
            syncFieldMappingsRow.SYNC_PROJECT_FIELD_UID = 
                PRIORITY_PROJECT_FIELD_GUID;
            syncFieldMappingsRow.SYNC_PROJECT_FIELD_NAME = priority;
            syncFieldMappingsRow.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow1 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow1.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow1.SYNC_WSS_FIELD_UID = 
                new Guid(DUEDATE_LIST_FIELD_GUID);
            syncFieldMappingsRow1.SYNC_WSS_FIELD_NAME = wssDuedate;
            syncFieldMappingsRow1.SYNC_PROJECT_FIELD_UID = 
                FINISHDATE_PROJECT_FIELD_GUID;
            syncFieldMappingsRow1.SYNC_PROJECT_FIELD_NAME = projectDueDate;
            syncFieldMappingsRow1.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow1);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow2 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow2.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow2.SYNC_WSS_FIELD_UID = 
                new Guid(ASSIGNEDTO_LIST_FIELD_GUID);
            syncFieldMappingsRow2.SYNC_WSS_FIELD_NAME = wssAssignedTo;
            syncFieldMappingsRow2.SYNC_PROJECT_FIELD_UID = 
                ASSIGNEDTO_PROJECT_FIELD_GUID;
            syncFieldMappingsRow2.SYNC_PROJECT_FIELD_NAME = projectAssignedTo;
            syncFieldMappingsRow2.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow2);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow3 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow3.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow3.SYNC_WSS_FIELD_UID = 
                new Guid(STARTDATE_LIST_FIELD_GUID);
            syncFieldMappingsRow3.SYNC_WSS_FIELD_NAME = wssStartDate;
            syncFieldMappingsRow3.SYNC_PROJECT_FIELD_UID = 
                STARTDATE_PROJECT_FIELD_GUID;
            syncFieldMappingsRow3.SYNC_PROJECT_FIELD_NAME = projectStartDate;
            syncFieldMappingsRow3.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow3);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow4 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow4.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow4.SYNC_WSS_FIELD_UID = 
               new Guid(PERCENTCOMPLETE_LIST_FIELD_GUID);
            syncFieldMappingsRow4.SYNC_WSS_FIELD_NAME = wssPercentComplete;
            syncFieldMappingsRow4.SYNC_PROJECT_FIELD_UID = 
                PERCENTCOMPLETE_PROJECT_FIELD_GUID;
            syncFieldMappingsRow4.SYNC_PROJECT_FIELD_NAME = 
                projectPercentComplete;
            syncFieldMappingsRow4.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow4);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow5 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow5.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow5.SYNC_WSS_FIELD_UID = 
                new Guid(BODY_LIST_FIELD_GUID);
            syncFieldMappingsRow5.SYNC_WSS_FIELD_NAME = wssBody;
            syncFieldMappingsRow5.SYNC_PROJECT_FIELD_UID = 
                NOTES_PROJECT_FIELD_GUID;
            syncFieldMappingsRow5.SYNC_PROJECT_FIELD_NAME = projectNotes;
            syncFieldMappingsRow5.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow5);

            SvcProject.SyncDataSet.SyncFieldMappingsRow syncFieldMappingsRow6 =
                syncDS.SyncFieldMappings.NewSyncFieldMappingsRow();
            syncFieldMappingsRow6.SYNC_WSS_LIST_UID = listUid;
            syncFieldMappingsRow6.SYNC_WSS_FIELD_UID = 
                new Guid(TITLE_LIST_FIELD_GUID);
            syncFieldMappingsRow6.SYNC_WSS_FIELD_NAME = title;
            syncFieldMappingsRow6.SYNC_PROJECT_FIELD_UID = 
                TITLE_PROJECT_FIELD_GUID;
            syncFieldMappingsRow6.SYNC_PROJECT_FIELD_NAME = title;
            syncFieldMappingsRow6.SYNC_IS_PROJECT_CUSTOM_FIELD = false;
            syncDS.SyncFieldMappings.AddSyncFieldMappingsRow(
                syncFieldMappingsRow6);

            // Add SyncValueTranslationsRow.        
            //SvcProject.SyncDataSet.SyncValueTranslationsRow
            //    syncValueTranslationsRow = 
            //    syncDS.SyncValueTranslations.NewSyncValueTranslationsRow();

            SvcProject.SyncDataSet.SyncValueTranslationsRow
                syncValueTranslationsRow1 = 
                syncDS.SyncValueTranslations.NewSyncValueTranslationsRow();
            syncValueTranslationsRow1.SYNC_WSS_LIST_UID = listUid;
            syncValueTranslationsRow1.SYNC_WSS_FIELD_UID = new Guid(PRIORITY_FIELD_GUID);
            syncValueTranslationsRow1.SYNC_WSS_FIELD_NAME = priority;
            syncValueTranslationsRow1.SYNC_WSS_VALUE = priorityHigh;
            syncValueTranslationsRow1.SYNC_PROJECT_VALUE = priorityHighValue;
            syncDS.SyncValueTranslations.AddSyncValueTranslationsRow(syncValueTranslationsRow1);

            SvcProject.SyncDataSet.SyncValueTranslationsRow
                syncValueTranslationsRow2 = syncDS.SyncValueTranslations.NewSyncValueTranslationsRow();
            syncValueTranslationsRow2.SYNC_WSS_LIST_UID = listUid;
            syncValueTranslationsRow2.SYNC_WSS_FIELD_UID = new Guid(PRIORITY_FIELD_GUID);
            syncValueTranslationsRow2.SYNC_WSS_FIELD_NAME = priority;
            syncValueTranslationsRow2.SYNC_WSS_VALUE = priorityNormal;
            syncValueTranslationsRow2.SYNC_PROJECT_VALUE = priorityNormalValue;
            syncDS.SyncValueTranslations.AddSyncValueTranslationsRow(syncValueTranslationsRow2);

            SvcProject.SyncDataSet.SyncValueTranslationsRow
                syncValueTranslationsRow3 = syncDS.SyncValueTranslations.NewSyncValueTranslationsRow();
            syncValueTranslationsRow3.SYNC_WSS_LIST_UID = listUid;
            syncValueTranslationsRow3.SYNC_WSS_FIELD_UID = new Guid(PRIORITY_FIELD_GUID);
            syncValueTranslationsRow3.SYNC_WSS_FIELD_NAME = priority;
            syncValueTranslationsRow3.SYNC_WSS_VALUE = priorityLow;
            syncValueTranslationsRow3.SYNC_PROJECT_VALUE = priorityLowValue;
            syncDS.SyncValueTranslations.AddSyncValueTranslationsRow(syncValueTranslationsRow3);
 
            return syncDS;
        }

        // Configure the client endpoints.
        public static void ConfigClientEndpoints(string endpt)
        {
            projectClient = new SvcProject.ProjectClient(endpt);
        }
    }
}

See Also

Reference

Project Class

Project Members

Project Web Service