<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Prevent specific field editing for specific users in ArcMap in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230735#M6008</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Some kind of pseudo&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;in some static part of extension preffetch all featureClass ObjectClassID that you need to filter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public/private static List&amp;lt;int&amp;gt; watchedFeatureClass = new List&amp;lt;int&amp;gt;();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// for each FC you should add field indexes that you need to watch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public/private Dictionary&amp;lt;int, List&amp;lt;int&amp;gt;&amp;gt; watchedFields = new Dictionary&amp;lt;int, List&amp;lt;int&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I rather prefer Object approach to create some class that will do this with some descriptive methods:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;private static List&amp;lt;int&amp;gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;private static Dictionary...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public bool IsChanged(IFeature pFeature)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public void RestoreOriginalValue()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// in changed event&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IObject feature;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IFeature pFeature = feature as IFeature;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// use target ObjectClassID to determine if this is watched FC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;watchedFeatureClass .Contains(pFeature.Class.ObjectClassID)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;IRowChanges pRowChanges = pFeature as IRowChange;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(pRowChanges.ValueChanged)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;... do some stuf like looping through Fields and test if &lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges_ValueChanged.htm"&gt;http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges_ValueChanged.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this hints will help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Or you can combine my method with yours.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 09 Aug 2011 09:54:26 GMT</pubDate>
    <dc:creator>DubravkoAntonic</dc:creator>
    <dc:date>2011-08-09T09:54:26Z</dc:date>
    <item>
      <title>Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230732#M6005</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi, I have a task to lock fields editing for specific users. I started to check &lt;/SPAN&gt;&lt;STRONG&gt;IEditEvents_Event&lt;/STRONG&gt;&lt;SPAN&gt; with it's &lt;/SPAN&gt;&lt;STRONG&gt;OnChangeFeature&lt;/STRONG&gt;&lt;SPAN&gt; event, but I can't understand what exactly was changed and what was the original value. Also I failed all my attempts to undo changes. If I use &lt;/SPAN&gt;&lt;STRONG&gt;IEditor.AbortOperation()&lt;/STRONG&gt;&lt;SPAN&gt; it breaks ArcMap, if I use &lt;/SPAN&gt;&lt;STRONG&gt;throw new COMException(msg, (int)0x80004005L)&lt;/STRONG&gt;&lt;SPAN&gt; it does nothing.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As workaround for detecting field changes I came up with:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[PHP]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; private void FeatureChanged(IObject feature)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var editor = _editor as IEditor;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (editor != null)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var workspaceEdit = (editor.EditWorkspace as IWorkspaceEdit2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var changes = workspaceEdit.get_EditDataChanges(esriEditDataChangesType.esriEditDataChangesWithinOperation);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var classes = changes.ModifiedClasses;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var @class = classes.Next();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var cursor = changes.ExtractEx(@class, esriDifferenceType.esriDifferenceTypeUpdateNoChange);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Prepare the output parameters.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int featureID = -1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRow sourceRow = null;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IRow differenceRow = null;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ILongArray fieldIndexes = null;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Iterate through the cursor.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.Next(out featureID, out sourceRow, out differenceRow, out fieldIndexes);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (featureID != -1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; fieldIndexes.Count; i++)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var index = fieldIndexes.get_Element(i);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (index &amp;gt;= 3) // Stub&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cursor.Next(out featureID, out sourceRow, out differenceRow, out fieldIndexes);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/PHP]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;But the logic is very disgusting as I don't work with feature which came in handler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So the question is - how to detect feature attribute changes for concrete columns, and undo it in some cases correctly?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 07:58:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230732#M6005</guid>
      <dc:creator>DmitrySharov</dc:creator>
      <dc:date>2011-08-09T07:58:01Z</dc:date>
    </item>
    <item>
      <title>Re: Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230733#M6006</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;What if you extension is not active and ArcMap is connected to the database? User can edit data in the DB with no restriction except DB permission.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Maybe faster way is on the DB side.&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://www.mssqltips.com/tip.asp?tip=2124"&gt;http://www.mssqltips.com/tip.asp?tip=2124&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;For row values, changes use IRowChanges&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges.htm"&gt;http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges.htm&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 08:31:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230733#M6006</guid>
      <dc:creator>DubravkoAntonic</dc:creator>
      <dc:date>2011-08-09T08:31:37Z</dc:date>
    </item>
    <item>
      <title>Re: Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230734#M6007</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;BR /&gt;Maybe faster way is on the DB side.&lt;BR /&gt;&lt;A href="http://www.mssqltips.com/tip.asp?tip=2124"&gt;http://www.mssqltips.com/tip.asp?tip=2124&lt;/A&gt;&lt;BR /&gt;&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes it will help with ArcSDE users, but I need to check local shape and gdb file changes. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is not to allow changes, which are made by mistake.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 09:20:24 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230734#M6007</guid>
      <dc:creator>DmitrySharov</dc:creator>
      <dc:date>2011-08-09T09:20:24Z</dc:date>
    </item>
    <item>
      <title>Re: Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230735#M6008</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Some kind of pseudo&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;in some static part of extension preffetch all featureClass ObjectClassID that you need to filter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public/private static List&amp;lt;int&amp;gt; watchedFeatureClass = new List&amp;lt;int&amp;gt;();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// for each FC you should add field indexes that you need to watch&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public/private Dictionary&amp;lt;int, List&amp;lt;int&amp;gt;&amp;gt; watchedFields = new Dictionary&amp;lt;int, List&amp;lt;int&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I rather prefer Object approach to create some class that will do this with some descriptive methods:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;private static List&amp;lt;int&amp;gt;...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;private static Dictionary...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public bool IsChanged(IFeature pFeature)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;public void RestoreOriginalValue()&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// in changed event&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IObject feature;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IFeature pFeature = feature as IFeature;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// use target ObjectClassID to determine if this is watched FC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;watchedFeatureClass .Contains(pFeature.Class.ObjectClassID)&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;IRowChanges pRowChanges = pFeature as IRowChange;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(pRowChanges.ValueChanged)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;... do some stuf like looping through Fields and test if &lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges_ValueChanged.htm"&gt;http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esrigeodatabase/IRowChanges_ValueChanged.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I hope this hints will help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Or you can combine my method with yours.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 09:54:26 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230735#M6008</guid>
      <dc:creator>DubravkoAntonic</dc:creator>
      <dc:date>2011-08-09T09:54:26Z</dc:date>
    </item>
    <item>
      <title>Re: Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230736#M6009</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Dubravko Antoni�?, thank you a lot. IRowChanges solved almost all my problems. Do you know if there is a good way of aborting edit operation or there is only a way of restoring field data?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 10:48:27 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230736#M6009</guid>
      <dc:creator>DmitrySharov</dc:creator>
      <dc:date>2011-08-09T10:48:27Z</dc:date>
    </item>
    <item>
      <title>Re: Prevent specific field editing for specific users in ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230737#M6010</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;No I don't know for this kind of event but you can listen OnSaveEdits and OnStopEditing to prevent saving edits to base.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 09 Aug 2011 21:47:05 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/prevent-specific-field-editing-for-specific-users/m-p/230737#M6010</guid>
      <dc:creator>DubravkoAntonic</dc:creator>
      <dc:date>2011-08-09T21:47:05Z</dc:date>
    </item>
  </channel>
</rss>

