I see, sorry I missed that requirement. As I understand it, and I'm hardly
an expert, you'll have to retrieve the CustomFields that you're interested
in. You can use the ProjTool's CustomFieldWebSvc.CustomFields class for
that. Get their Guids, found in the MD_PROP_NAME field.
For task, these Guids can then be matched to the Guid found in the
ProjectDataSet.TaskCustomFieldsDataTable's rows. The
TaskCustomFieldsRow.MD_PROP_UID property holds the associated CustomField
Guid. Once you've found the CustomField that you're looking for, you can
inspect its value and compare it to your selection criteria. When a value
matches your criteria, get the Project Guid from the
TaskCustomFieldsRow.PROJ_UID property.
Hope this helps.
That was exactly my thinking as well.
However, this single statement is very slow because it is returning
_all_ of the details for that one project.
Below is a working example of what I was talking about. Project is the
proxy I generated using wsdl. I wouldn't keep all of the project data
like in the example below; just the field values I needed from
ProjectDataSet.Project and ProjectDataSet.ProjectCustomFields.
using System;
using System.Collections.Generic;
using System.Text;
// added using statements
using System.Net;
namespace psiReadAllProjects
{
class Program
{
private static Project _project;
private static NetworkCredential _cred;
static void Main(string[] args)
{
_cred = new NetworkCredential("username", "password",
"domain");
_project = new Project();
_project.Credentials = _cred;
List<Guid> projectGuids = new List<Guid>();
ProjectDataSet projectList = _project.ReadProjectList();
foreach (ProjectDataSet.ProjectRow row in
projectList.Project)
{
projectGuids.Add(row.PROJ_UID);
}
List<ProjectDataSet> projectData = new
List<ProjectDataSet>();
foreach (Guid uid in projectGuids)
{
projectData.Add(_project.ReadProject(uid,
DataStoreEnum.PublishedStore));
}
Console.ReadKey();
}
}
}