About the Updating the purge rule on a real-time temporal layer Sample
[C#]
PurgeRuleForm.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.TrackingAnalyst; using ESRI.ArcGIS.GeoDatabaseExtensions; namespace TAPurgeRuleCommand { public partial class PurgeRuleForm : Form { private IEnumLayer m_eTrackingLayers = null; public PurgeRuleForm() { InitializeComponent(); } //The collection of temporal layers in the map/globe public IEnumLayer TrackingLayers { set { m_eTrackingLayers = value; } } //Initialize all the dialog controls public void PopulateDialog() { cbTrackingLayers.SelectedIndex = -1; PopulateTrackingLayerComboBox(); LoadDialogFromFeatureClassSettings(null); } //Populate the tracking layer combo box with the names //of all the temporal layers in the map private void PopulateTrackingLayerComboBox() { ILayer lyr = null; m_eTrackingLayers.Reset(); cbTrackingLayers.Items.Clear(); while ((lyr = m_eTrackingLayers.Next()) != null) { cbTrackingLayers.Items.Add(lyr.Name); } } //Get the ILayer using the name selected in the tracking layer combo box private ILayer GetSelectedLayer() { string sLayerName = Convert.ToString(cbTrackingLayers.SelectedItem); ILayer lyr = null; m_eTrackingLayers.Reset(); while ((lyr = m_eTrackingLayers.Next()) != null) { if (lyr.Name == sLayerName) { return lyr; } } return null; } //Repopulate the dialog controls when a different layer is selected private void cbTrackingLayers_SelectionChangeCommitted(object sender, EventArgs e) { ILayer lyr = GetSelectedLayer(); if (lyr != null) { ITemporalFeatureClass temporalFC = ((IFeatureLayer)lyr).FeatureClass as ITemporalFeatureClass; LoadDialogFromFeatureClassSettings(temporalFC); } } //Set the dialog controls according to the settings of the specified temporal feature class private void LoadDialogFromFeatureClassSettings(ITemporalFeatureClass temporalFC) { //If no feature class is specified clear all the controls if (temporalFC == null) { btnApply.Enabled = false; checkAutoPurge.Checked = false; cbPurgeRule.SelectedIndex = 0; txtThreshold.Text = ""; txtPurgePercent.Text = ""; return; } btnApply.Enabled = true; checkAutoPurge.Checked = temporalFC.AutoPurge; cbPurgeRule.SelectedIndex = (int)temporalFC.PurgeRule; txtThreshold.Text = Convert.ToString(temporalFC.Threshold); txtPurgePercent.Text = Convert.ToString(temporalFC.PurgePercentage); } //Apply the new settings to the temporal feature class private void btnApply_Click(object sender, EventArgs e) { try { ILayer lyr = GetSelectedLayer(); if (lyr != null) { ITemporalFeatureClass temporalFC = (ITemporalFeatureClass)((IFeatureLayer)lyr).FeatureClass; if (temporalFC != null) { temporalFC.AutoPurge = checkAutoPurge.Checked; //only set the other properties if Auto Purge is true if (checkAutoPurge.Checked) { temporalFC.PurgeRule = (enumPurgeRule)cbPurgeRule.SelectedIndex; temporalFC.Threshold = Convert.ToInt32(txtThreshold.Text); temporalFC.PurgePercentage = Convert.ToDouble(txtPurgePercent.Text); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error"); } } //Set the appropriate text boxes enabled depending on the purge rule selected private void cbPurgeRule_SelectedIndexChanged(object sender, EventArgs e) { switch (cbPurgeRule.SelectedIndex) { case 0: default: txtThreshold.Enabled = true; txtPurgePercent.Enabled = true; break; case 1: txtThreshold.Enabled = true; txtPurgePercent.Enabled = false; break; } } private void btnCancel_Click(object sender, EventArgs e) { this.Hide(); } //Don't dispose the dialog when it's closed. Just hide it so that it can be reopened. private void PurgeRuleForm_FormClosing(object sender, FormClosingEventArgs e) { this.Hide(); e.Cancel = true; } } }
[Visual Basic .NET]
PurgeRuleForm.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Text Imports System.Windows.Forms Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.TrackingAnalyst Imports ESRI.ArcGIS.GeoDatabaseExtensions Namespace TAPurgeRuleCommand Public Partial Class PurgeRuleForm : Inherits Form Private m_eTrackingLayers As IEnumLayer = Nothing Public Sub New() InitializeComponent() End Sub 'The collection of temporal layers in the map/globe Public WriteOnly Property TrackingLayers() As IEnumLayer Set m_eTrackingLayers = Value End Set End Property 'Initialize all the dialog controls Public Sub PopulateDialog() cbTrackingLayers.SelectedIndex = -1 PopulateTrackingLayerComboBox() LoadDialogFromFeatureClassSettings(Nothing) End Sub 'Populate the tracking layer combo box with the names 'of all the temporal layers in the map Private Sub PopulateTrackingLayerComboBox() Dim lyr As ILayer = Nothing m_eTrackingLayers.Reset() cbTrackingLayers.Items.Clear() lyr = m_eTrackingLayers.Next() Do While Not lyr Is Nothing cbTrackingLayers.Items.Add(lyr.Name) lyr = m_eTrackingLayers.Next() Loop End Sub 'Get the ILayer using the name selected in the tracking layer combo box Private Function GetSelectedLayer() As ILayer Dim sLayerName As String = Convert.ToString(cbTrackingLayers.SelectedItem) Dim lyr As ILayer = Nothing m_eTrackingLayers.Reset() lyr = m_eTrackingLayers.Next() Do While Not lyr Is Nothing If lyr.Name = sLayerName Then Return lyr End If lyr = m_eTrackingLayers.Next() Loop Return Nothing End Function 'Repopulate the dialog controls when a different layer is selected Private Sub cbTrackingLayers_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs) Handles cbTrackingLayers.SelectionChangeCommitted Dim lyr As ILayer = GetSelectedLayer() If Not lyr Is Nothing Then Dim temporalFC As ITemporalFeatureClass = TryCast((CType(lyr, IFeatureLayer)).FeatureClass, ITemporalFeatureClass) LoadDialogFromFeatureClassSettings(temporalFC) End If End Sub 'Set the dialog controls according to the settings of the specified temporal feature class Private Sub LoadDialogFromFeatureClassSettings(ByVal temporalFC As ITemporalFeatureClass) 'If no feature class is specified clear all the controls If temporalFC Is Nothing Then btnApply.Enabled = False checkAutoPurge.Checked = False cbPurgeRule.SelectedIndex = 0 txtThreshold.Text = "" txtPurgePercent.Text = "" Return End If btnApply.Enabled = True checkAutoPurge.Checked = temporalFC.AutoPurge cbPurgeRule.SelectedIndex = CInt(temporalFC.PurgeRule) txtThreshold.Text = Convert.ToString(temporalFC.Threshold) txtPurgePercent.Text = Convert.ToString(temporalFC.PurgePercentage) End Sub 'Apply the new settings to the temporal feature class Private Sub btnApply_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnApply.Click Try Dim lyr As ILayer = GetSelectedLayer() If Not lyr Is Nothing Then Dim temporalFC As ITemporalFeatureClass = CType((CType(lyr, IFeatureLayer)).FeatureClass, ITemporalFeatureClass) temporalFC.AutoPurge = checkAutoPurge.Checked 'only set the other properties if Auto Purge is true If checkAutoPurge.Checked Then temporalFC.PurgeRule = CType(cbPurgeRule.SelectedIndex, enumPurgeRule) temporalFC.Threshold = Convert.ToInt32(txtThreshold.Text) temporalFC.PurgePercentage = Convert.ToDouble(txtPurgePercent.Text) End If End If Catch ex As Exception MessageBox.Show(ex.Message, "Error") End Try End Sub 'Set the appropriate text boxes enabled depending on the purge rule selected Private Sub cbPurgeRule_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cbPurgeRule.SelectedIndexChanged Select Case cbPurgeRule.SelectedIndex Case 1 txtThreshold.Enabled = True txtPurgePercent.Enabled = False Case Else txtThreshold.Enabled = True txtPurgePercent.Enabled = True End Select End Sub Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancel.Click Me.Hide() End Sub 'Don't dispose the dialog when it's closed. Just hide it so that it can be reopened. Private Sub PurgeRuleForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing Me.Hide() e.Cancel = True End Sub End Class End Namespace