I'm just struggling to find the Execute Method that takes IGPProcess as an input.I'm stuck with the one that takes a string input, and when I use that, my application just kind of fades away. the code I'm working with currently: class ExportGeoprocessing
{
GeoProcessor gp = new GeoProcessor();
IGPUtilities gputils = new GPUtilitiesClass();
public void ExecuteGeoprocessingTask(String infeature, String outfeature,
IWorkspace outworkspace, IFeatureWorkspace inputworkspace, IFields fields, Hashtable fieldpairings)
{
String extension = outfeature.Split('.')[1];
IVariantArray parameters = null;
object severity = 2;
switch (extension)
{
case("dbf"):
parameters = BuildParameterObjectForTable(infeature, outfeature, outworkspace, inputworkspace, fields, fieldpairings);
break;
case("shp"):
parameters = BuildParameterObjectForShapefile(infeature, outfeature, outworkspace, inputworkspace, fields, fieldpairings);
try
{
gp.Execute("FeatureclassToFeatureclass_conversion", parameters, null);
}
catch
{
Console.WriteLine(gp.GetMessages(ref severity).ToString());
}
break;
}
}
private IVariantArray BuildParameterObjectForShapefile(String infeature, String outfeature,
IWorkspace outworkspace, IFeatureWorkspace inputworkspace,IFields fields, Hashtable fieldpairings)
{
IVariantArray parameters = new VarArrayClass();
IName fcname = GetFeatureName(infeature, outfeature, (IWorkspace)inputworkspace);
IFeatureClass infc = inputworkspace.OpenFeatureClass(infeature);
IGPFieldMapping fieldmapping = BuildOutputFieldMapping(fcname, fields, fieldpairings);
parameters.Add(infc);
parameters.Add(outworkspace); //make a string object
parameters.Add(outfeature);
parameters.Add(" ");
parameters.Add(fieldmapping);
return parameters;
}
private IVariantArray BuildParameterObjectForTable(String infeature, String outfeature,
IWorkspace outworkspace, IFeatureWorkspace inputworkspace, IFields fields, Hashtable fieldpairings)
{
IVariantArray parameters = new VarArrayClass();
IName fcname = GetFeatureName(infeature, outfeature, (IWorkspace)inputworkspace);
ITable intable = inputworkspace.OpenTable(infeature);
return parameters;
}
private IName GetFeatureName(String infeature, String outfeature, IWorkspace workspace)
{
IName infeaturename = null;
String extension = outfeature.Split('.')[1];
String infcname = infeature.Split('.')[1];
switch (extension)
{
case ("dbf"):
IEnumDatasetName tablenames = workspace.get_DatasetNames(esriDatasetType.esriDTTable);
infeaturename = AssignNameVariable(infcname, tablenames);
break;
case ("shp"):
IEnumDatasetName dsnames = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
if (infeature.Contains("\\"))
{
IDatasetName ds = dsnames.Next();
while (ds != null)
{
IEnumDatasetName fcs = ds.SubsetNames;
infeaturename = AssignNameVariable(infcname, fcs);
ds = dsnames.Next();
}
}
else
{
infeaturename = AssignNameVariable(infcname, dsnames);
}
break;
}
return infeaturename;
}
private IName AssignNameVariable(String infeaturename, IEnumDatasetName dsnames)
{
IName infcname = null;
IDatasetName fc = dsnames.Next();
while (fc != null)
{
if (fc.Name.ToUpper().Contains(infeaturename.ToUpper()))
{
if (infcname == null)
{
infcname = (IName)fc;
}
break;
}
fc = dsnames.Next();
}
return infcname;
}
private IGPFieldMapping BuildOutputFieldMapping(IName fcname, IFields fields, Hashtable fieldpairings)
{
IGPFieldMapping fieldmapping = new GPFieldMappingClass();
IDETable intable = (IDETable)gputils.MakeDataElementFromNameObject(fcname);
IArray intables = new ArrayClass();
intables.Add(intable);
fieldmapping.Initialize(intables, null);
IFields infields = intable.Fields;
foreach (String key in fieldpairings.Keys)
{
int fieldindex = fieldmapping.FindFieldMap(fieldpairings[key].ToString());
IGPFieldMap tempfieldmap = fieldmapping.GetFieldMap(fieldindex);
int tempmapindex = tempfieldmap.FindInputField(intable, fieldpairings[key].ToString());
IField inputfield = tempfieldmap.GetField(tempmapindex);
int inindex = infields.FindField(fieldpairings[key].ToString());
IField fieldin = infields.get_Field(inindex);
IGPFieldMap fieldmap = new GPFieldMapClass();
fieldmap.OutputField = fields.get_Field(fields.FindField(key.ToString()));
fieldmap.AddInputField(intable, fieldin, 0, fieldin.Length);
fieldmapping.AddFieldMap(fieldmap);
fieldmap.RemoveAll();
}
return fieldmapping;
}
}