/// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
                }
            });
        }