ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Desktop.Core.Geoprocessing Namespace / GPExecuteToolFlags Enumeration
Example Example

In This Topic
    GPExecuteToolFlags Enumeration
    In This Topic
    Flags to indicate what happens after a tool execution is complete. Use bitwise logic OR ('|') to combine two actions .
    Syntax
    Members
    MemberDescription
    AddOutputsToMap Adds outputs to the current Map.
    AddToHistory Adds execution logs to geoprocessing project history.
    Default Adds outputs to map and refreshes project items.
    GPThread Execute tool in GP thread
    InheritGPOptions overrides AddOutputsToMap and AddToHistory by Geoprocessing Options settings
    None No action is taken.
    RefreshProjectItems Refreshes project items.
    Example
    Stop a feature class created with GP from automatically adding to the map
    {
      // However, settings in Pro App's Geoprocessing Options will override option set in code
      // for example, in Pro App's Options > Geoprocessing dialog, if you check 'Add output datasets to an open map'
      // then the output WILL BE added to history overriding settings in code
      var CopyfeaturesParams = Geoprocessing.MakeValueArray("C:\\data\\Input.gdb\\PlanA_Roads", "C:\\data\\Input.gdb\\Roads_copy");
      IGPResult gpResult = Geoprocessing.ExecuteToolAsync("management.CopyFeatures", CopyfeaturesParams, null, null, null, GPExecuteToolFlags.None).Result;
    
      // use the result as needed
    }
    GPExecuteToolFlags.AddToHistory will add the execution messages to History
    {
      // However, settings in Pro App's Geoprocessing Options will override option set in code
      // for example, if in Options > Geoprocessing dialog, if you uncheck 'Write geoprocessing operations to Geoprocessing History'
      // then the output will not be added to history.
      var args = Geoprocessing.MakeValueArray("C:\\data\\Vegetation.shp", "NewField", "TEXT");
      var result = Geoprocessing.ExecuteToolAsync("management.AddField", args, null, null, null, GPExecuteToolFlags.AddToHistory);
    
      // use the result as needed
    }
    Multi Ring Buffer
    {
      //The data referenced in this snippet can be downloaded from the arcgis-pro-sdk-community-samples repo
      //https://github.com/Esri/arcgis-pro-sdk-community-samples
      {
        var paramsArray = Geoprocessing.MakeValueArray(currentTemplate.MapMember.Name,
                    @"C:\Data\FeatureTest\FeatureTest.gdb\Points_MultipleRingBuffer",
                    new List<string> { "1000", "2000" }, "Meters", "Distance",
                    "ALL", "FULL");
    
        IGPResult gpResult = Geoprocessing.ExecuteToolAsync("Analysis.MultipleRingBuffer", paramsArray).Result;
        var messages = string.IsNullOrEmpty(gpResult.ReturnValue)
                ? $@"Error in Geoprocessing tool: {gpResult.ErrorMessages}"
                : $@"Ok: {gpResult.ReturnValue}";
        // use the messages and the result as needed
      }
    }
    Non-blocking execution of a Geoprocessing tool
    {
      //The data referenced in this snippet can be downloaded from the arcgis-pro-sdk-community-samples repo
      //https://github.com/Esri/arcgis-pro-sdk-community-samples
      string in_data = @"C:\tools\data.gdb\cities";
      string cities_buff = @"E:\data\data.gdb\cities_2km";
    
      var valueArray = Geoprocessing.MakeValueArray(in_data, cities_buff, "2000 Meters");
    
      // to let the GP tool run asynchronously without blocking the main thread
      // use the GPThread option of GPExecuteToolFlags
      //
      GPExecuteToolFlags flags = GPExecuteToolFlags.GPThread;  // instruct the tool run non-blocking GPThread
      IGPResult bufferResult = Geoprocessing.ExecuteToolAsync("Analysis.Buffer", valueArray, null, null, null, flags).Result;
    }
    How to pass parameter with multiple or complex input values
    {
      var environments = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true);
    
      string toolName = "Snap_edit";  // or use edit.Snap
    
      // Snap tool takes multiple inputs each of which has
      // Three (3) parts: a feature class or layer, a string value and a distance
      // Each part is separated by a semicolon - you can get example of sytax from the tool documentation page
      var snapEnv = @"'C:/SnapProject/fgdb.gdb/line_1' END '2 Meters';'C:/SnapProject/fgdb.gdb/points_1' VERTEX '1 Meters';'C:/SnapProject/fgdb.gdb/otherline_1' END '20 Meters'";
    
      var infc = @"C:/SnapProject/fgdb.gdb/poly_1";
    
      var snapParams = Geoprocessing.MakeValueArray(infc, snapEnv);
    
      GPExecuteToolFlags tokens = GPExecuteToolFlags.RefreshProjectItems | GPExecuteToolFlags.GPThread | GPExecuteToolFlags.AddToHistory;
    
      IGPResult snapResult = Geoprocessing.ExecuteToolAsync(toolName, snapParams, environments, null, null, tokens).Result;
    
      // use the result as needed
    }
    How to access Geoprocessing History
    {
      string openProjectPath = @"D\DATA\IGPHistoryItemTestProject\IGPHistoryItemTestProject.aprx";
      Project.OpenAsync(openProjectPath);
      MapProjectItem mapProjItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map", StringComparison.CurrentCultureIgnoreCase));
    
      // Note: Needs QueuedTask to run
      var map = mapProjItem.GetMap();
      var ftrLayer = map.Layers[0] as FeatureLayer;
      string tool1 = "management.GetCount";
      var args1 = Geoprocessing.MakeValueArray(ftrLayer);
      var env = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true);
      GPExecuteToolFlags executeFlags = GPExecuteToolFlags.AddToHistory;
      var t = Geoprocessing.ExecuteToolAsync(tool1, args1, env, null, null, executeFlags);
    
      IEnumerable<IGPHistoryItem> hisItems = Project.Current.GetProjectItemContainer(Geoprocessing.HistoryContainerKey) as IEnumerable<IGPHistoryItem>;
    
      string hitemID = "";
      string hitemToolPath = "";
      IGPResult hitemGPResult = null;
      DateTime hitemTimeStamp;
    
      foreach (var hitem in hisItems)
      {
        // common IGPHistoryItem and Item properties
        hitemID = (hitem as Item).ID;
        hitemToolPath = hitem.ToolPath;
        hitemGPResult = hitem.GPResult;
        hitemTimeStamp = hitem.TimeStamp;
    
        // use the properties as needed
      }
    }
    Add Geometry via MakeValueArray to GP Tool parameter lists
    {
      var tool_name = "analysis.Clip";
      var extent = MapView.Active.Extent;
      var sel_layer = MapView.Active.Map.GetLayersAsFlattenedList()
                        .OfType<FeatureLayer>().FirstOrDefault(l => l.Name == "GreatLakes");
      if (sel_layer == null) return;
    
      var gdb = Project.Current.DefaultGeodatabasePath;
      var out_fc = System.IO.Path.Combine(gdb, "clipped_lakes_out");
    
      // Note: Needs QueuedTask to run
      var rect = GeometryEngine.Instance.Scale(extent, extent.Center, 0.5, 0.5) as Envelope;
      var clip_poly = PolygonBuilderEx.CreatePolygon(rect, rect.SpatialReference);
    
      //Add the geometry to a list before calling MakeValueArray
      //Envelope and Geometry types are supported
      var geom = new List<object>() { clip_poly };
      var val_array = Geoprocessing.MakeValueArray([sel_layer, geom, out_fc]);
    
      Geoprocessing.ExecuteToolAsync(tool_name, val_array,
      null, null, null, GPExecuteToolFlags.InheritGPOptions);
    }
    Inheritance Hierarchy

    System.Object
       System.ValueType
          System.Enum
             ArcGIS.Desktop.Core.Geoprocessing.GPExecuteToolFlags

    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.0 or higher.
    See Also