<?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 How to define OID field for layer based on Oracle View? in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-define-oid-field-for-layer-based-on-oracle/m-p/241127#M6230</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Sirs,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm in trouble on trying to programmatically change connection properties for all layers on a map. I can do manually, but not by coding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All layers are based on Oracle views not registered into SDE. All these Oracle views have not a defined key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My approach is to get new feature class from a workspace based on my new connection and set this resulting feature class to original&amp;nbsp;feature layer. The problem is that I loose definition for Unique Identifier Field&amp;nbsp;(or OID): after setting new feature class, hasOID = false. But if I do manually, all works properly:&lt;/P&gt;&lt;P&gt;1) I press "Change Query",&lt;/P&gt;&lt;P&gt;2) I choose Oracle view from my new sde connection&lt;/P&gt;&lt;P&gt;3) ArcMap show me window for choosing Unique Identifier Field: I set it&lt;/P&gt;&lt;P&gt;..and all is ok.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here you are my code, the&amp;nbsp;part in bold is where I try to set OID: it gives no errors, but if I try to open data window I get an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, my question is: how can I define OID field name to a feature class got from IFeatureWorkspace:OpenFeatureClass?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;foreach(IFeatureLayer featureLayer in featureLayers)&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//check connection properties&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IDataset dataSet = (IDataset)featureLayer;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IDatabaseConnectionInfo4 databaseConnectionInfo = (IDatabaseConnectionInfo4)dataSet.Workspace;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;string connectedUser = databaseConnectionInfo.ConnectedUser;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;//create workspace&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(@"C:\test\mySdeFile.sde", 0);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//set new feature class by opening on new workspace &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IFeatureClass oldFestureClass = featureLayer.FeatureClass;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(featureLayer.FeatureClass.AliasName);&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;//set old spatial reference to new feature class&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IGeoDatasetSchemaEdit geoDatasetSchemaEdit = (IGeoDatasetSchemaEdit)featureLayer.FeatureClass;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;geoDatasetSchemaEdit.AlterSpatialReference(oldSpatialreference);&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&lt;STRONG&gt;//set old OID to new feature class&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;int idx = featureLayer.FeatureClass.Fields.FindFieldByAliasName(oldOIDFieldName);&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;IFieldEdit field = (IFieldEdit)featureLayer.FeatureClass.Fields.Field[idx];&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt;&lt;STRONG&gt;&amp;nbsp;field.Type_2 = esriFieldType.esriFieldTypeOID;&amp;nbsp;&lt;/STRONG&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; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//refresh&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;((IMapAdmin)mxDocument.FocusMap).FireChangeFeatureClass(oldFestureClass, featureLayer.FeatureClass);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;mxDocument.CurrentContentsView.Refresh(null);&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;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anybody has any idea on what I can do to set OID field?..&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 20 Sep 2016 14:59:05 GMT</pubDate>
    <dc:creator>FrancescoSozzi1</dc:creator>
    <dc:date>2016-09-20T14:59:05Z</dc:date>
    <item>
      <title>How to define OID field for layer based on Oracle View?</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-define-oid-field-for-layer-based-on-oracle/m-p/241127#M6230</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Sirs,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm in trouble on trying to programmatically change connection properties for all layers on a map. I can do manually, but not by coding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All layers are based on Oracle views not registered into SDE. All these Oracle views have not a defined key.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My approach is to get new feature class from a workspace based on my new connection and set this resulting feature class to original&amp;nbsp;feature layer. The problem is that I loose definition for Unique Identifier Field&amp;nbsp;(or OID): after setting new feature class, hasOID = false. But if I do manually, all works properly:&lt;/P&gt;&lt;P&gt;1) I press "Change Query",&lt;/P&gt;&lt;P&gt;2) I choose Oracle view from my new sde connection&lt;/P&gt;&lt;P&gt;3) ArcMap show me window for choosing Unique Identifier Field: I set it&lt;/P&gt;&lt;P&gt;..and all is ok.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here you are my code, the&amp;nbsp;part in bold is where I try to set OID: it gives no errors, but if I try to open data window I get an error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, my question is: how can I define OID field name to a feature class got from IFeatureWorkspace:OpenFeatureClass?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;foreach(IFeatureLayer featureLayer in featureLayers)&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//check connection properties&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IDataset dataSet = (IDataset)featureLayer;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IDatabaseConnectionInfo4 databaseConnectionInfo = (IDatabaseConnectionInfo4)dataSet.Workspace;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;string connectedUser = databaseConnectionInfo.ConnectedUser;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;//create workspace&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(@"C:\test\mySdeFile.sde", 0);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//set new feature class by opening on new workspace &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IFeatureClass oldFestureClass = featureLayer.FeatureClass;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;featureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(featureLayer.FeatureClass.AliasName);&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;//set old spatial reference to new feature class&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;IGeoDatasetSchemaEdit geoDatasetSchemaEdit = (IGeoDatasetSchemaEdit)featureLayer.FeatureClass;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;geoDatasetSchemaEdit.AlterSpatialReference(oldSpatialreference);&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp;&lt;STRONG&gt;//set old OID to new feature class&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;int idx = featureLayer.FeatureClass.Fields.FindFieldByAliasName(oldOIDFieldName);&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&lt;EM&gt;&amp;nbsp;IFieldEdit field = (IFieldEdit)featureLayer.FeatureClass.Fields.Field[idx];&lt;/EM&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt;&lt;STRONG&gt;&amp;nbsp;field.Type_2 = esriFieldType.esriFieldTypeOID;&amp;nbsp;&lt;/STRONG&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; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;//refresh&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;((IMapAdmin)mxDocument.FocusMap).FireChangeFeatureClass(oldFestureClass, featureLayer.FeatureClass);&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;mxDocument.CurrentContentsView.Refresh(null);&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;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anybody has any idea on what I can do to set OID field?..&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 Sep 2016 14:59:05 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/how-to-define-oid-field-for-layer-based-on-oracle/m-p/241127#M6230</guid>
      <dc:creator>FrancescoSozzi1</dc:creator>
      <dc:date>2016-09-20T14:59:05Z</dc:date>
    </item>
  </channel>
</rss>

