Need help to retrieve the .SDE file path from the FeatureLayer using ArcGIS Pro.NET SDK..

1451
5
06-16-2021 08:30 AM
LakshmiAlaparthi
New Contributor II

Hi

I wrote this function bellow and it is getting me the path like the bellow from the temp folder and I am not able to connect to the enterprise geodatabase using this path --

-C:/Users//AppData/Local/Temp/ArcGISProTemp19324/a8b12d344fb5de85c96517857bcf6e6e.sde

Public Function GetConnectionPathoftheSDE(ByVal thelayer As String) As Task(Of String)
Return QueuedTask.Run(Function()
Dim featureLayer = TryCast(MapView.Active.Map.FindLayers(thelayer).First(), BasicFeatureLayer)
Dim inTable = featureLayer.Name
Dim table = featureLayer.GetTable()
Dim dataStore = table.GetDatastore()
Dim connectionString = dataStore.GetPath.ToString()
Dim layerAlias = featureLayer.Name
Return connectionString
End Function)
End Function

I need to retrieve the catalog path like this -- C:\Users\username\Documents\ArcGIS\Projects\testmap\server111.sde -- this path shows up when I hover the mouse on the layer under the catalog pane -> .SDE connection node. How to retrieve this path using Pro .NET SDK?

Thanks

Lakshmi

0Kudos
5 Replies
Wolf
by 金宝搏吧
金宝搏吧

In ArcGIS Pro the .sde path is not persisted anywhere after you create a layer by adding a feature class to a map. Instead all relevant connection properties are extracted from the .SDE file, if needed the user is prompted for the password, and the individual connection properties are then kept to reconnect the layer. You can utilize a layer’s connection information in code as shown in the sample snippet below. The snippet is taken from a button's OnClick method and uses the database connection from an existing SDE layer to retrieve all feature classes from the layer’s geodatabase.

Wolf_0-1623885423665.png

protected override async void OnClick() { var selectedLayer = MapView.Active.GetSelectedLayers().FirstOrDefault(); // set the sketch layer property (in order to obtain Zs, Ms as appropriate) if (!(selectedLayer is BasicFeatureLayer theLayer)) { MessageBox.Show("Select a feature layer on the TOC first"); return; } var lst = await QueuedTask.Run>(() => { var lstFcs = new List(); var fc = theLayer.GetTable() as FeatureClass; // use the layer's Datastore to access the Geodatabase using (var gdb = fc.GetDatastore() as Geodatabase) { var fcDefs = gdb.GetDefinitions(); foreach (var tableDef in fcDefs) { lstFcs.Add(tableDef.GetName()); } } return lstFcs; }); MessageBox.Show(string.Join(Environment.NewLine, lst.ToArray())); }

0Kudos
LakshmiAlaparthi
New Contributor II

Got it.. Is there any way to find out from the API?

If (Not layer.FeatureClass Is Nothing) Then
.Alias = layer.FeatureClass.AliasName
.ConnectionPath = CType(layer.FeatureClass, IDataset).Workspace.PathName

End if

0Kudos
LakshmiAlaparthi
New Contributor II

This is the code that I was using in ArcObjects .NET

If (Not layer.FeatureClass Is Nothing) Then
.Alias = layer.FeatureClass.AliasName
.ConnectionPath = CType(layer.FeatureClass, IDataset).Workspace.PathName

0Kudos
LakshmiAlaparthi
New Contributor II

Hi,

Thank you for the response. I am looking for the solution to retrieve the path of the .sde file that the feature layer belongs to. Once I have the sde file path my code is working fine to open the geodatabase. I am looking for the solution on how to retrieve the .sde file path from the ArcGIS Pro UI -> layer that is loaded in the Table of Contents.

0Kudos
Wolf
by 金宝搏吧
金宝搏吧

It's not possible to retrieve the .sde file path from a layer, since only the connection properties are used by the layer not the original .sde file. You can verify this by deleting or renaming the .sde file and you will still be able to view your sde data on the map. But you can use this code to open the Geodatabase instead:

// theLayer is the Mapmember from the TOC var fc = theLayer.GetTable() as FeatureClass; // use the layer's Datastore to access the Geodatabase using (var gdb = fc.GetDatastore() as Geodatabase) { // use the open geodatabase "gdb" here (same a theLayer's datasource) }

0Kudos