<?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 get the database version from a feature layer in ArcGIS Pro SDK Questions</title>
    <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-get-the-database-version-from-a-feature/m-p/1283544#M9745</link>
    <description>&lt;P&gt;I am trying to get the version of the geodatabase of a feature layer. I couldnt figure out&lt;/P&gt;&lt;P&gt;so far I have this&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt; var featureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType&amp;lt;FeatureLayer&amp;gt;().FirstOrDefault();
                CIMDataConnection currentDataConnection = featureLayer.GetDataConnection();
                string connString = null;
                var fufu = currentDataConnection.ReadXml;
                var dd = fufu.Target;&lt;/LI-CODE&gt;&lt;P&gt;I am trying to get the conn string and create Geodatabse object but no luck. Anybody knows how to get the version?&lt;/P&gt;</description>
    <pubDate>Thu, 27 Apr 2023 19:14:33 GMT</pubDate>
    <dc:creator>Amadeus111</dc:creator>
    <dc:date>2023-04-27T19:14:33Z</dc:date>
    <item>
      <title>How to get the database version from a feature layer</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-get-the-database-version-from-a-feature/m-p/1283544#M9745</link>
      <description>&lt;P&gt;I am trying to get the version of the geodatabase of a feature layer. I couldnt figure out&lt;/P&gt;&lt;P&gt;so far I have this&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt; var featureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType&amp;lt;FeatureLayer&amp;gt;().FirstOrDefault();
                CIMDataConnection currentDataConnection = featureLayer.GetDataConnection();
                string connString = null;
                var fufu = currentDataConnection.ReadXml;
                var dd = fufu.Target;&lt;/LI-CODE&gt;&lt;P&gt;I am trying to get the conn string and create Geodatabse object but no luck. Anybody knows how to get the version?&lt;/P&gt;</description>
      <pubDate>Thu, 27 Apr 2023 19:14:33 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-get-the-database-version-from-a-feature/m-p/1283544#M9745</guid>
      <dc:creator>Amadeus111</dc:creator>
      <dc:date>2023-04-27T19:14:33Z</dc:date>
    </item>
    <item>
      <title>Re: How to get the database version from a feature layer</title>
      <link>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-get-the-database-version-from-a-feature/m-p/1283698#M9749</link>
      <description>&lt;P&gt;Probably a bit overkill but you can find what you need after line 120:&lt;/P&gt;&lt;LI-CODE lang="csharp"&gt;namespace LayerGeodatabaseVersion
{  
  /// &amp;lt;summary&amp;gt;
  /// Extension methods for feature layer
  /// &amp;lt;/summary&amp;gt;
  internal static class FeatureLayerExtensions
  {
    public static GeodatabaseType? GetGeodatabaseType(this BasicFeatureLayer layer)
    {
      if (layer.ConnectionStatus == ConnectionStatus.Broken)
        return null;
      GeodatabaseType? gdbType = GeodatabaseType.FileSystem;
      using (var dataset = layer.GetTable())
      {
        using (var gdb = dataset.GetDatastore())
        {
          //new at 2.3
          if (gdb is PluginDatastore)
          {
            return null;
          }
          //Note shapefile will be "FileSystemDatastore"
          if (gdb is Geodatabase)
          {
            gdbType = ((Geodatabase)gdb).GetGeodatabaseType();
          }
        }
      }
      return gdbType;
    }

    public static RegistrationType? GetRegistrationType(this BasicFeatureLayer layer)
    {
      if (layer.ConnectionStatus == ConnectionStatus.Broken)
        return null;

      RegistrationType? regType = null;
      using (var dataset = layer.GetTable())
      {
        regType = dataset.GetRegistrationType();
      }
      return regType;
    }

    public static EditOperationType? GetEditOperationType(this BasicFeatureLayer layer)
    {
      if (layer.ConnectionStatus == ConnectionStatus.Broken)
        return null;
      var gdbType = layer.GetGeodatabaseType();
      var regType = layer.GetRegistrationType();

      //Plugin - new at 2.3
      if (gdbType == null)
        return null;
      //FileSystem
      if (gdbType == GeodatabaseType.FileSystem)
        return EditOperationType.Long;
      //LocalDatabase
      if (gdbType == GeodatabaseType.LocalDatabase)
        return EditOperationType.Long;
      //RemoteDatabase, Versioned
      if (gdbType == GeodatabaseType.RemoteDatabase &amp;amp;&amp;amp; (
        regType == RegistrationType.Versioned || regType == RegistrationType.VersionedWithMoveToBase))
        return EditOperationType.Long;
      //RemoteDatabase, NonVersioned
      if (gdbType == GeodatabaseType.RemoteDatabase &amp;amp;&amp;amp; regType == RegistrationType.Nonversioned)
        return EditOperationType.Short;
      //Service, NonVersioned
      if (gdbType == GeodatabaseType.Service &amp;amp;&amp;amp; regType == RegistrationType.Nonversioned)
        return EditOperationType.Short;

      //Service, Versioned, Default
      EditOperationType forBranch = EditOperationType.Long;
      if (gdbType == GeodatabaseType.Service &amp;amp;&amp;amp; regType == RegistrationType.Versioned)
      {
        using (var dataset = layer.GetTable())
        using (var gdb = dataset.GetDatastore() as Geodatabase)
        using (var vmgr = gdb.GetVersionManager())
        using (var vers = vmgr.GetCurrentVersion())
        using (var parent = vers.GetParent())
        {
          //non-default supports undo/redo and save/discard. Default does not
          forBranch = parent != null ? EditOperationType.Long : EditOperationType.Short;
        }
      }
      return forBranch;
    }
  }

  internal class ShowLayerGDBVersion : Button
  {
    protected override async void OnClick()
    {
      try
      {
        await QueuedTask.Run(() =&amp;gt;
        {
          FeatureLayer theLayer = null;
          var selectedLayers = MapView.Active.GetSelectedLayers();
          if (selectedLayers.Count &amp;gt; 0)
          {
            theLayer = selectedLayers[0] as FeatureLayer;
          }
          if (theLayer == null)
          {
            theLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType&amp;lt;FeatureLayer&amp;gt;().FirstOrDefault();
          }
          if (theLayer == null)
          {
            throw new Exception("A Feature Layer is required.");
          }
          var gdbType = theLayer.GetGeodatabaseType();
          var regType = theLayer.GetRegistrationType();

          switch (gdbType.Value)
          {
            case GeodatabaseType.LocalDatabase:
              MessageBox.Show($@"Feature Layer {theLayer.Name} is a local GDB datasource");
              break;
            case GeodatabaseType.RemoteDatabase:
              using (Geodatabase geodatabase = theLayer.GetTable().GetDatastore() as Geodatabase)
              using (Table table = theLayer.GetTable())
              {
                if (geodatabase == null)
                {
                  throw new Exception($@"Feature Layer {theLayer.Name} is not stored in a Geodatabase");
                }
                var dbConnectionProps = (DatabaseConnectionProperties)geodatabase.GetConnector();
                var nl = System.Environment.NewLine;
                var dbConnectionDisp = $@"{theLayer.Name}:{nl} Database:{dbConnectionProps.Database}";
                dbConnectionDisp += $@" Instance: {dbConnectionProps.Instance}";
                dbConnectionDisp += $@" DBMS: {dbConnectionProps.DBMS}";
                dbConnectionDisp += $@" RegType: {regType}";
                dbConnectionDisp += $@" Version: {dbConnectionProps.Version}";
                MessageBox.Show(dbConnectionDisp);
              }
              break;
            case GeodatabaseType.FileSystem:
              MessageBox.Show($@"Feature Layer {theLayer.Name} is a file system datasource");
              break;
            case GeodatabaseType.Service:
              MessageBox.Show($@"Feature Layer {theLayer.Name} is a service based datasource");
              break;
            case GeodatabaseType.Memory:
              MessageBox.Show($@"Feature Layer {theLayer.Name} is a memory datasource");
              break;
            default:
              MessageBox.Show($@"Feature Layer {theLayer.Name} is a plugin datasource");
              break;
          }
        });
      }
      catch (Exception ex)
      {
        MessageBox.Show (ex.Message);
      }
    }
  }
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 28 Apr 2023 04:29:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-sdk-questions/how-to-get-the-database-version-from-a-feature/m-p/1283698#M9749</guid>
      <dc:creator>Wolf</dc:creator>
      <dc:date>2023-04-28T04:29:17Z</dc:date>
    </item>
  </channel>
</rss>

