ArcGIS Pro 2.9 API Reference Guide
CreateTemplate(Layer,String,String,Inspector,String,String[],String[]) Method
Example 

ArcGIS.Desktop.Mapping Namespace > MappingExtensions Class > CreateTemplate Method : CreateTemplate(Layer,String,String,Inspector,String,String[],String[]) Method
the layer the new template is to be added to.
the template name.
Optional description of the template.
An ArcGIS.Desktop.Editing.Attributes.Inspector object containing default template values.
Optional, If not provided will use the default tool for the layer type. The defaultTool can be specified using daml-id.
Optional. A set of tags.
Optional list of tools to not allow for this template. Tool filters can be specified using daml-id.
Creates a new template using the specified definition. This method must be called on the MCT. Use QueuedTask.Run.
Syntax
Public Overloads Shared Function CreateTemplate( _
   ByVal layer As Layer, _
   ByVal templateName As String, _
   Optional ByVal description As String, _
   Optional ByVal inspector As Inspector, _
   Optional ByVal defaultTool As String, _
   Optional ByVal tags() As String, _
   Optional ByVal toolFilter() As String _
) As EditingTemplate

Parameters

layer
the layer the new template is to be added to.
templateName
the template name.
description
Optional description of the template.
inspector
An ArcGIS.Desktop.Editing.Attributes.Inspector object containing default template values.
defaultTool
Optional, If not provided will use the default tool for the layer type. The defaultTool can be specified using daml-id.
tags
Optional. A set of tags.
toolFilter
Optional list of tools to not allow for this template. Tool filters can be specified using daml-id.

Return Value

the newly created template. Null if it cannot be created.
Exceptions
ExceptionDescription
the Template name cannot be empty. And the template name must be unique.
Example
var layer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault();
if (layer == null)
  return;
QueuedTask.Run(() =>
{
  var insp = new Inspector();
  insp.LoadSchema(layer);

  insp["Field1"] = value1;
  insp["Field2"] = value2;
  insp["Field3"] = value3;

  var tags = new[] { "Polygon", "tag1", "tag2" };

  // set defaultTool using a daml-id 
  string defaultTool = "esri_editing_SketchCirclePolygonTool";

  // tool filter is the tools to filter OUT
  var toolFilter = new[] { "esri_editing_SketchTracePolygonTool" };

  // create a new template  
  var newTemplate = layer.CreateTemplate("My new template", "description", insp, defaultTool, tags, toolFilter);
});
// get an anno layer
AnnotationLayer annoLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<AnnotationLayer>().FirstOrDefault();
if (annoLayer == null)
  return;

QueuedTask.Run(() =>
{
  Inspector insp = null;
  // get the anno feature class
  var fc = annoLayer.GetFeatureClass() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClass;

  // get the featureclass CIM definition which contains the labels, symbols
  var cimDefinition = fc.GetDefinition() as ArcGIS.Core.Data.Mapping.AnnotationFeatureClassDefinition;
  var labels = cimDefinition.GetLabelClassCollection();
  var symbols = cimDefinition.GetSymbolCollection();

  // make sure there are labels, symbols
  if ((labels.Count == 0) || (symbols.Count == 0))
    return;

  // find the label class required
  //   typically you would use a subtype name or some other characteristic
  // in this case lets just use the first one

  var label = labels[0];

  // each label has a textSymbol
  // the symbolName *should* be the symbolID to be used
  var symbolName = label.TextSymbol.SymbolName;
  int symbolID = -1;
  if (!int.TryParse(symbolName, out symbolID))
  {
    // int.TryParse fails - attempt to find the symbolName in the symbol collection
    foreach (var symbol in symbols)
    {
      if (symbol.Name == symbolName)
      {
        symbolID = symbol.ID;
        break;
      }
    }
  }
  // no symbol?
  if (symbolID == -1)
    return;

  // load the schema
  insp = new Inspector();
  insp.LoadSchema(annoLayer);

  // ok to assign these fields using the inspector[fieldName] methodology
  //   these fields are guaranteed to exist in the annotation schema
  insp["AnnotationClassID"] = label.ID;
  insp["SymbolID"] = symbolID;

  // set up some additional annotation properties
  AnnotationProperties annoProperties = insp.GetAnnotationProperties();
  annoProperties.FontSize = 36;
  annoProperties.TextString = "My Annotation feature";
  annoProperties.VerticalAlignment = VerticalAlignment.Top;
  annoProperties.HorizontalAlignment = HorizontalAlignment.Justify;

  insp.SetAnnotationProperties(annoProperties);

  var tags = new[] { "Annotation", "tag1", "tag2" };

  // use daml-id rather than guid
  string defaultTool = "esri_editing_SketchStraightAnnoTool";

  // tool filter is the tools to filter OUT
  var toolFilter = new[] { "esri_editing_SketchCurvedAnnoTool" };

  // create a new template 
  var newTemplate = annoLayer.CreateTemplate("new anno template", "description", insp, defaultTool, tags, toolFilter);
});
Requirements

Target Platforms: Windows 11, Windows 10, Windows 8.1

See Also

Reference

MappingExtensions Class
MappingExtensions Members
Overload List