/// <summary> /// This method creates a new version for the workspace corresponding to the table using the version manager /// </summary> /// <param name="table">Table name</param> /// <returns>Newly created version <see cref="Version"/></returns> private async Task <Version> CreateVersionAsync(Table table) { Version version = null; await QueuedTask.Run(() => { try { using (VersionManager versionManager = (table.GetDatastore() as Geodatabase).GetVersionManager()) using (Version defaultVersion = versionManager.GetVersions().FirstOrDefault(version => { string name = version.GetName(); return(name.ToLowerInvariant().Equals("dbo.default") || name.ToLowerInvariant().Equals("sde.default")); })) { if (defaultVersion is null) { version = null; } string versionName = $"Version_{DateTime.UtcNow.Ticks}"; version = versionManager.CreateVersion(new VersionDescription(versionName, $"Description of {versionName}", VersionAccessType.Public)); } } catch (Exception e) { Console.WriteLine(e); } }); return(version); }
/// <summary> /// This method calls Geoprocessing to create a new version for the Workspace corresponding to the table /// </summary> /// <param name="table"></param> /// <returns></returns> private async Task <string> CreateVersion(Table table) { try { Version defaultVersion = (table.GetDatastore() as Geodatabase).GetVersionManager().GetVersions().FirstOrDefault(version => { string name = version.GetName(); return(name.ToLowerInvariant().Equals("dbo.default") || name.ToLowerInvariant().Equals("sde.default")); }); if (defaultVersion == null) { return(null); } using (defaultVersion) { IReadOnlyList <string> valueArray = Geoprocessing.MakeValueArray(new object[] { table, defaultVersion.GetName(), string.Format("NewVersion{0}", random.Next()), "private" }); List <string> values = new List <String> { valueArray[0].Remove(valueArray[0].LastIndexOf("\\", StringComparison.Ordinal)), valueArray[1], valueArray[2], valueArray[3] }; await Geoprocessing.ExecuteToolAsync("management.CreateVersion", values); return(valueArray[2]); } } catch (Exception e) { Console.WriteLine(e); } return(null); }
/// <summary> /// This method makes sure /// 1. The Mapview is Active /// 2. There is at least one Layer selected /// 3. The selected Layer is a FeatureLayer /// 4. The selected Layer is backed by an Enterprise Sql Server Geodatabase FeatureClass /// /// If all of these hold good, the DatabaseClient is used to execute a query which creates /// a Database Table containing the gdb_items records corresponding to all domains. The Table is /// then opened using the API and the domains combobox populated. Finally, the Table is deleted /// </summary> /// <param name="mapViewEventArgs"></param> private async void UpdateDomainList(MapViewEventArgs mapViewEventArgs) { if (MapView.Active == null || mapViewEventArgs.MapView.GetSelectedLayers().Count < 1 || !(mapViewEventArgs.MapView.GetSelectedLayers()[0] is FeatureLayer)) { Enabled = false; return; } EnterpriseDatabaseType enterpriseDatabaseType = EnterpriseDatabaseType.Unknown; await QueuedTask.Run(() => { using (Table table = (mapViewEventArgs.MapView.GetSelectedLayers()[0] as FeatureLayer).GetTable()) { if (!(table.GetDatastore() is Geodatabase)) { return; } try { enterpriseDatabaseType = (table.GetDatastore() as Geodatabase).GetEnterpriseDatabaseType(); } catch (InvalidOperationException e) { } } }); if (enterpriseDatabaseType != EnterpriseDatabaseType.SQLServer) { Enabled = false; return; } Enabled = true; Clear(); QueuedTask.Run(() => { using (Table table = (mapViewEventArgs.MapView.GetSelectedLayers()[0] as FeatureLayer).GetTable()) { var geodatabase = table.GetDatastore() as Geodatabase; Version defaultVersion = geodatabase.GetVersionManager().GetVersions().FirstOrDefault(version => { string name = version.GetName(); return(name.ToLowerInvariant().Equals("dbo.default") || name.ToLowerInvariant().Equals("sde.default")); }); if (defaultVersion == null) { return; } string tableName = String.Format("NewTable{0}{1}{2}{3}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond); gdbItemsOwner = defaultVersion.GetName().Split('.')[0]; string statement = String.Format( @"select {1}.GDB_ITEMTYPES.Name as Type, {1}.GDB_ITEMS.Name into {0} from {1}.GDB_ITEMS JOIN {1}.GDB_ITEMTYPES ON {1}.GDB_ITEMS.Type = {1}.GDB_ITEMTYPES.UUID where {1}.GDB_ITEMTYPES.Name = 'Domain' OR {1}.GDB_ITEMTYPES.Name = 'Coded Value Domain' OR {1}.GDB_ITEMTYPES.Name = 'Range Domain'", tableName, gdbItemsOwner); try { DatabaseClient.ExecuteStatement(geodatabase, statement); } catch (GeodatabaseTableException exception) { MessageBox.Show(exception.Message); return; } var newTable = geodatabase.OpenDataset <Table>(tableName); using (RowCursor rowCursor = newTable.Search(null, false)) { while (rowCursor.MoveNext()) { using (Row row = rowCursor.Current) { Add(new ComboBoxItem(row["Name"].ToString())); } } } statement = String.Format(@"DROP TABLE {0}", tableName); DatabaseClient.ExecuteStatement(geodatabase, statement); } }); }