Parameters
- name
- The name of the description.
- fieldType
- The ArcGIS.Core.Data.FieldType of the description.
- minValue
- The minimum value for the range.
- maxValue
- The maximum value for the range.
| Exception | Description |
|---|---|
| System.ArgumentException | name is invalid. -or- fieldType is invalid. The only valid types are ArcGIS.Core.Data.FieldType.SmallInteger, ArcGIS.Core.Data.FieldType.Integer, ArcGIS.Core.Data.FieldType.Single, ArcGIS.Core.Data.FieldType.Double, and ArcGIS.Core.Data.FieldType.Date. -or- The type of minValue and/or maxValue is invalid. The expected type for ArcGIS.Core.Data.FieldType.Date is System.DateTime. The expected type for ArcGIS.Core.Data.FieldType.SmallInteger and ArcGIS.Core.Data.FieldType.Integer is an integer. The expected type for ArcGIS.Core.Data.FieldType.Single and ArcGIS.Core.Data.FieldType.Double is a float. -or- |
| System.ArgumentNullException | minValue and/or maxValue are null. |
| System.ArgumentOutOfRangeException | The System.DateTime object is representing a year earlier than the year 100 AD. |
public void CreateRangeDomainSnippet(Geodatabase geodatabase) { // Create a range description with minimum value = 0 and maximum value = 1000 RangeDomainDescription rangeDomainDescriptionMinMax = new RangeDomainDescription("RangeDomain_0_1000", FieldType.Integer, 0, 1000) { Description = "Domain value ranges from 0 to 1000" }; SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase); // Create a range domain schemaBuilder.Create(rangeDomainDescriptionMinMax); schemaBuilder.Build(); }
await QueuedTask.Run(() =>
{
using (var kg = GetKnowledgeGraph())
{
if (kg == null)
return;
var entity_name = "Fruit";
//Domains are managed on the GDB objects...
var fruit_fc = kg.OpenDataset<FeatureClass>(entity_name);
var fruit_fc_def = fruit_fc.GetDefinition();
var fieldFruitTypes = fruit_fc_def.GetFields()
.FirstOrDefault(f => f.Name == "FruitTypes");
var fieldShelfLife = fruit_fc_def.GetFields()
.FirstOrDefault(f => f.Name == "ShelfLife");
//Create a coded value domain and add it to a new field
var fruit_cvd_desc = new CodedValueDomainDescription(
"FruitTypes", FieldType.String,
new SortedList<object, string> {
{ "A", "Apple" },
{ "B", "Banana" },
{ "C", "Coconut" }
}) {
SplitPolicy = SplitPolicy.Duplicate,
MergePolicy = MergePolicy.DefaultValue
};
//Create a Range Domain and add the domain to a new field description also
var shelf_life_rd_desc = new RangeDomainDescription(
"ShelfLife", FieldType.Integer, 0, 14);
var sb = new SchemaBuilder(kg);
sb.Create(fruit_cvd_desc);
sb.Create(shelf_life_rd_desc);
//Create the new field descriptions that will be associated with the
//"new" FruitTypes coded value domain and the ShelfLife range domain
var fruit_types_fld = new ArcGIS.Core.Data.DDL.FieldDescription(
"FruitTypes", FieldType.String);
fruit_types_fld.SetDomainDescription(fruit_cvd_desc);
//ShelfLife will use the range domain
var shelf_life_fld = new ArcGIS.Core.Data.DDL.FieldDescription(
"ShelfLife", FieldType.Integer);
shelf_life_fld.SetDomainDescription(shelf_life_rd_desc);
//Add the descriptions to the list of field descriptions for the
//fruit feature class - Modify schema needs _all_ fields to be included
//in the schema, not just the new ones to be added.
var fruit_fc_desc = new FeatureClassDescription(fruit_fc_def);
var modified_fld_descs = new List<ArcGIS.Core.Data.DDL.FieldDescription>(
fruit_fc_desc.FieldDescriptions);
modified_fld_descs.Add(fruit_types_fld);
modified_fld_descs.Add(shelf_life_fld);
//Create a feature class description to modify the fruit entity
//with the new fields and their associated domains
var updated_fruit_fc =
new FeatureClassDescription(entity_name, modified_fld_descs,
fruit_fc_desc.ShapeDescription);
//Add the modified fruit fc desc to the schema builder
sb.Modify(updated_fruit_fc);
//Run the schema builder
try
{
if (!kg.ApplySchemaEdits(sb))
{
var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
System.Diagnostics.Debug.WriteLine($"Create domains error: {err_msg}");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
}
});
Target Platforms: Windows 11, Windows 10