ArcGIS Pro 3.0 API Reference Guide
ArcGIS.Desktop.Reports Namespace / ReportElementFactory Class / CreateFieldValueTextElement Method
IElementContainer
Envelope
CIMReportField
CIMTextSymbol
Example

In This Topic
    CreateFieldValueTextElement Method (ReportElementFactory)
    In This Topic
    Creates a field value text element on a report from an envelope geometry. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    Public Function CreateFieldValueTextElement( _
       ByVal elementContainer As IElementContainer, _
       ByVal envelope As Envelope, _
       ByVal reportField As CIMReportField, _
       Optional ByVal textSymbol As CIMTextSymbol _
    ) As GraphicElement

    Parameters

    elementContainer
    IElementContainer
    envelope
    Envelope
    reportField
    CIMReportField
    textSymbol
    CIMTextSymbol

    Return Value

    Returns a GraphicElement
    Exceptions
    ExceptionDescription
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Invalid report section.
    Invalid report.
    Element extents outside section.
    Failed to create text element.
    Remarks
    The element gets added to the group at the topmost position.
    Example
    Create a new field in the report
    //This is the gap between two fields
    double fieldIncrement = 0.9388875113593206276389;
    //On the QueuedTask
    //New field to add.
    var newReportField = new CIMReportField
    {
      Name = "POP1990",
      FieldOrder = 2,
    };
    //Get the "ReportSection element"                
    var mainReportSection = report.Elements.OfType<ReportSection>().FirstOrDefault();
    if (mainReportSection == null) return;
    
    //Get the "ReportDetails" within the ReportSectionElement. ReportDetails is where "fields" are.
    var reportDetailsSection = mainReportSection?.Elements.OfType<ReportDetails>().FirstOrDefault();
    if (reportDetailsSection == null) return;
    
    //Within ReportDetails find the envelope that encloses a field.
    //We get the first CIMParagraphTextGraphic in the collection so that we can add the new field next to it.                    
    var lastFieldGraphic = reportDetailsSection.Elements.FirstOrDefault((r) =>
    {
      var gr = r as GraphicElement;
      if (gr == null) return false;
      return (gr.GetGraphic() is CIMParagraphTextGraphic ? true : false);
    });
    //Get the Envelope of the last field
    var graphicBounds = lastFieldGraphic.GetBounds();
    
    //Min and Max values of the envelope
    var xMinOfFieldEnvelope = graphicBounds.XMin;
    var yMinOfFieldEnvelope = graphicBounds.YMin;
    
    var xMaxOfFieldEnvelope = graphicBounds.XMax;
    var YMaxOfFieldEnvelope = graphicBounds.YMax;
    //create the new Envelope to be offset from the existing field
    //At 2.x
    //MapPoint newMinPoint = MapPointBuilder.CreateMapPoint(xMinOfFieldEnvelope + fieldIncrement, yMinOfFieldEnvelope);
    //MapPoint newMaxPoint = MapPointBuilder.CreateMapPoint(xMaxOfFieldEnvelope + fieldIncrement, YMaxOfFieldEnvelope);
    //Envelope newFieldEnvelope = EnvelopeBuilder.CreateEnvelope(newMinPoint, newMaxPoint);
    
    MapPoint newMinPoint = MapPointBuilderEx.CreateMapPoint(xMinOfFieldEnvelope + fieldIncrement, yMinOfFieldEnvelope);
    MapPoint newMaxPoint = MapPointBuilderEx.CreateMapPoint(xMaxOfFieldEnvelope + fieldIncrement, YMaxOfFieldEnvelope);
    Envelope newFieldEnvelope = EnvelopeBuilderEx.CreateEnvelope(newMinPoint, newMaxPoint);
    
    //Create field
    GraphicElement fieldGraphic = ReportElementFactory.Instance.CreateFieldValueTextElement(reportDetailsSection, newFieldEnvelope, newReportField);
    Requirements

    Target Platforms: Windows 11, Windows 10, Windows 8.1

    See Also