Hi everyone,
I need to develop an SSIS package to integrate our TFS server to other legacy systems. To do it, I have to use the ClientService3SoapClient web service. Unfortunately, I cannot find any documentation about this web service and I'm writing code by trial and error.
I wrote the following piece of code as example, but the problem is that I cannot even define the variables that I have to pass to WS. Defining variables that just compile my code, a lot of exception occurs (such as "metadata" definition or TF51313: The request ID is incorrect or not recognized).
Anyone has an idea about this WS(documentation should be the best)?
Plus, the query that I wrote in the code is in this format
query = GetElement(@"<Group GroupOperator='And'><Expression Column='System.WorkItemType' FieldType='16' Operator='equals'><String>Bug</String></Expression></Group>");
, but I would like to use the wiql format
<?xml version="1.0" encoding="utf-8"?><WorkItemQuery Version="1"><TeamFoundationServer>http://[serveraddress]:8080/tfs/defaultcollection</TeamFoundationServer><TeamProject>Project_1</TeamProject><Wiql>SELECT [System.Id], [System.WorkItemType], [System.Title] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' ORDER BY [System.Id] </Wiql></WorkItemQuery>
Does it possible?
using System; using System.Data; using System.Text; using System.Net; using MyDemoWebService.WebReference4; using System.Xml; //using Microsoft.Teamfoundation.Client; namespace MyDemoWebService { class Program { static void Main(string[] args) { WCFCall(args); // ASMXCall(args); } public static void ASMXCall(string[] args) { ClientService3 service = new ClientService3(); DateTime d = new DateTime(); string dbStamp = ""; DataSet ds = new DataSet(); service.QueryWorkitems(null, null, false, null, out d, out dbStamp, out ds); } static void WCFCall(string[] args) { ServiceReference.ClientService3SoapClient client = new ServiceReference.ClientService3SoapClient(); client.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; Guid guid = new Guid(); ServiceReference.RequestHeader ReqHeader = new ServiceReference.RequestHeader(); System.Xml.XmlElement query ; //= new System.Xml.XmlElement(); ServiceReference.QuerySortOrderEntry singlesort = new ServiceReference.QuerySortOrderEntry(); ServiceReference.QuerySortOrderEntry[] sort = new ServiceReference.QuerySortOrderEntry[1]; bool useMaster = false ; ServiceReference.MetadataTableHaveEntry singlemetadataHave = new ServiceReference.MetadataTableHaveEntry(); ServiceReference.MetadataTableHaveEntry[] metadataHave = new ServiceReference.MetadataTableHaveEntry[1]; DateTime data = new DateTime(); String dbStamp; // new String(); System.Data.DataSet metadata = new System.Data.DataSet(); //sort[0].Ascending = true; System.Xml.XmlDocument myquery = new System.Xml.XmlDocument(); // myquery.Load("<TeamFoundationServer>http://[serveraddress]:8080/tfs/defaultcollection</TeamFoundationServer><TeamProject>ALM</TeamProject> <Wiql>SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' </Wiql>"); string xml = ""; ReqHeader.Id = "1"; singlesort.ColumnName = "Id"; sort[0] = singlesort; query = GetElement(@"<Group GroupOperator='And'><Expression Column='System.WorkItemType' FieldType='16' Operator='equals'><String>Bug</String></Expression></Group>"); singlemetadataHave.TableName = "WorkItems"; metadataHave[0] = singlemetadataHave; client.QueryWorkitems(ReqHeader, query, sort, useMaster, metadataHave, out data, out dbStamp, out metadata); } private static XmlElement GetElement(string xml) { XmlDocument doc = new XmlDocument(); doc.LoadXml(xml); return doc.DocumentElement; } } }
Thanks in advance for any suggestion that you can provide me.
Regards,
Paolo