Viele CustomFields sind mit Werten aus Lookup Tabellen verknüpft.
Diese Werte sind nicht einfach unter der "TEXT_VALUE" Eigenschaft des CustomFields zu finden.
Um an den richtigen Wert heranzukommen benötigen wir drei Schritte:
1. Schritt - Zuerst brauchen wir ein CustomField
//CustomField ermitteln:
foreach (Microsoft.Office.Project.Server.Schema.CustomFieldDataSet.CustomFieldsRow cfrow
in cfDS.CustomFields)
{
if (cfrow.MD_PROP_NAME == "meinCustomField")
{
meinCustomFieldUID = cfrow.MD_PROP_UID;//Guid des CustomFields
break;
}
}
2. Schritt - Die Guid des Eintrags ermitteln
//Unter der CODE_VALUE Eigenschaft des CustomFields wird die Guid des entsprechenden Eintrags
aus der Lookup Tabelle erfasst. Hier ist es wichtig, noch zusätzlich nach der Guid des Vorgangs (Task) zu prüfen
(Weil wir uns in diesem Beispiel auf Vorgangsebene bewegen, haben wir eine taskUID):
foreach(Microsoft.Office.Project.Server.Schema.ProjectDataSet.TaskCustomFieldsRow
trow in projectDS.TaskCustomFields)
{
if (trow.MD_PROP_UID == meinCustomFieldUID && trow.TASK_UID == taskUID)
{
wertUID = trow.CODE_VALUE;
break;
}
}
3. Schritt - Wert aus der Lookup Tabelle holen
//Unter LT_VALUE_TEXT wird der eigentliche Text gespeichert:
Microsoft.Office.Project.Server.Schema.LookupTableDataSet lookupDS = new
Microsoft.Office.Project.Server.Schema.LookupTableDataSet();
lookupDS = lookUpTabService.ReadLookupTables(null, false, 1033);
DataRow ltRowCE = lookupDS.LookupTableTrees.FindByLT_STRUCT_UID(wertUID);
if (ltRowCE != null)
{
stringMeinWert = ltRowCE.Field("LT_VALUE_TEXT");
}
Nun haben wir unter stringMeinWert den eigentlichen Wert gespeichert. Wie wir die PSI Dienste ansprechen
wird unter dem folgenden Blogeintrag beschrieben:
http://www.arksolutions.de/gs/de-ms-project-blog/331-psi-direkt-ansprechen