About listing fields
The IGeoProcessor2 interface does not provide a method to directly access the fields of a feature class or table since fields can be listed by ArcObjects from the Geodatabase library conveniently. The IGPUtilities3 interface of the Geoprocessing library provides three methods to access fields of a GPValue object.
The following code example shows how to get the fields of a feature class with the Fields property and FindField method of the IFeatureClass interface, then use the Calculate Field geoprocessing tool to update the values of the NEW_YIELD field with the values from the MODEL_YIELD field:
public void FieldsFromIFeatureClass(IGeoProcessor2 gp, IFeatureClass fc)
{
IFields fields=fc.Fields;
IVariantArray parameters=new VarArrayClass();
object sev=null;
int fieldIndex1=fields.FindField("NEW_YIELD");
int fieldIndex2=fields.FindField("MODEL_YIELD");
if ((fieldIndex1 > - 1) && (fieldIndex2 > - 1))
{
parameters.Add(fc);
parameters.Add("NEW_YIELD");
parameters.Add("!MODEL_YIELD!");
parameters.Add("PYTHON_9.3");
gp.Execute("CalculateField_management", parameters, null);
Console.WriteLine(gp.GetMessages(ref sev));
}
}
[VB.NET] Public Sub testFieldsFromIFeatureClass(ByVal gp As IGeoProcessor2, ByVal fc As IFeatureClass)
Dim fields As IFields=fc.Fields
Dim parameters As IVariantArray=New VarArray
Dim sev As Object=Nothing
Dim fieldIndex1=fields.FindField("NEW_YIELD")
Dim fieldIndex2=fields.FindField("MODEL_YIELD")
If ((fieldIndex1 > -1) And (fieldIndex2 > -1)) Then
parameters.Add(fc)
parameters.Add("NEW_YIELD")
parameters.Add("!MODEL_YIELD!")
parameters.Add("PYTHON_9.3")
gp.Execute("CalculateField_management", parameters, Nothing)
Console.WriteLine(gp.GetMessages(sev))
End If
End Sub
You can also use the methods on the IGPUtilities3 interface to work with Field objects if you have a GPValue object. The GetOutput method of an IGeoProcessorResult object returns an IGPValue object. Thus, you always get a GPValue object from the result of tool execution if the output is a feature class.
To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
- ESRI.ArcGIS.Geoprocessing
- ESRI.ArcGIS.Geodatabase
- ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)