ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Core.Data.DDL Namespace / SchemaBuilder Class / Modify Method / Modify(KnowledgeGraphTypeDescription) Method
Indicates the ArcGIS.Core.Data.Knowledge.KnowledgeGraphNamedObjectType to be modified.
Example

In This Topic
    Modify(KnowledgeGraphTypeDescription) Method
    In This Topic
    Enqueue the modify operation on the object referred to by the ArcGIS.Core.Data.DDL.Knowledge.KnowledgeGraphTypeDescription. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax

    Parameters

    kgTypeDescription
    Indicates the ArcGIS.Core.Data.Knowledge.KnowledgeGraphNamedObjectType to be modified.
    Exceptions
    ExceptionDescription
    kgTypeDescription is null.
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Remarks
    Properties can be added and removed from Entity and Relationship named object types only. Property definitions cannot be changedchanged. Attempting to change an existing property will result in an error (check ErrorMessages for any errors when applying the modify operation). To add new properties, add property descriptions for the new properties to be created to the ArcGIS.Core.Data.DDL.Knowledge.KnowledgeGraphTypeDescription collection of ArcGIS.Core.Data.DDL.Knowledge.KnowledgeGraphTypeDescription.PropertyDescriptions. The following property types can be added:
    Short, Long, Big Integer, Float, Double, Text, Date, Date Only, Time Only, Timestamp Offset, and GUID. To delete existing properties, omit them from (i.e. do not add them to) the collection ofvArcGIS.Core.Data.DDL.Knowledge.KnowledgeGraphTypeDescription.PropertyDescriptions. Note: Object id, global id, shape, origin id (for relationships), and destination id (also for relationships) are never deleted (whether present in the property description or not).
    Example
    Modify Entity and Relationship Type Schemas with SchemaBuilder
    await QueuedTask.Run(() =>
    {
      using (var kg = GetKnowledgeGraph())
      {
        if (kg == null)
          return;
    
        var entity_name = "PhoneCall";
        var relate_name = "WhoCalledWho";
    
        var kvp_entity = kg.GetDataModel().GetEntityTypes()
             .First(r => r.Key == entity_name);
        var kvp_relate = kg.GetDataModel().GetRelationshipTypes()
                       .First(r => r.Key == relate_name);
    
        //Let's delete one field and add a new one from each
        //A field gets deleted implicitly if it is not included in the list of
        //fields - or "properties" in this case....so we will remove the last
        //property from the list
        var entity_props = kvp_entity.Value.GetProperties().Reverse().Skip(1).Reverse();
        var prop_descs = new List<KnowledgeGraphPropertyDescription>();
    
        foreach (var prop in entity_props)
        {
          if (prop.FieldType == FieldType.Geometry)
          {
            continue;//skip shape
          }
          var prop_desc = new KnowledgeGraphPropertyDescription(prop);
          prop_descs.Add(prop_desc);
        }
        //deal with shape - we need to keep it
        //SchemaBuilder deletes any field not included in the "modify" list
        ShapeDescription shape_desc = null;
        if (kvp_entity.Value.GetIsSpatial())
        {
          var geom_def = kvp_entity.Value.GetShapeDefinition();
          var shape_name = kvp_entity.Value.GetShapeField();
          shape_desc = new ShapeDescription(
            shape_name, geom_def.geometryType, geom_def.sr);
        }
        //add the new entity property
        prop_descs.Add(
          KnowledgeGraphPropertyDescription.CreateStringProperty("foo", 10));
        //make a description for the entity type - ok if shape_desc is null
        var entityDesc = new KnowledgeGraphEntityTypeDescription(
          entity_name, prop_descs, shape_desc);
    
        //Add the entity type description to the schema builder using 'Modify'
        SchemaBuilder sb = new(kg);
        sb.Modify(entityDesc);
    
        //Repeat for the relationship - assuming we have at least one custom attribute field
        //that can be deleted on our relationship schema...
        var rel_props = kvp_relate.Value.GetProperties().Reverse().Skip(1).Reverse();
        var rel_prop_descs = new List<KnowledgeGraphPropertyDescription>();
    
        foreach (var prop in rel_props)
        {
          if (prop.FieldType == FieldType.Geometry)
          {
            continue;//skip shape
          }
          var prop_desc = new KnowledgeGraphPropertyDescription(prop);
          rel_prop_descs.Add(prop_desc);
        }
        //deal with shape - we need to keep it
        //SchemaBuilder deletes any field not included in the "modify" list
        ShapeDescription shape_desc_rel = null;
        if (kvp_relate.Value.GetIsSpatial())
        {
          var geom_def = kvp_relate.Value.GetShapeDefinition();
          var shape_name = kvp_relate.Value.GetShapeField();
          shape_desc_rel = new ShapeDescription(
            shape_name, geom_def.geometryType, geom_def.sr);
        }
        //add a new relationship property
        rel_prop_descs.Add(
          KnowledgeGraphPropertyDescription.CreateStringProperty("bar", 10));
        //make a description for the relationship type - ok if shape_desc is null
        var relDesc = new KnowledgeGraphRelationshipTypeDescription(
          relate_name, rel_prop_descs, shape_desc_rel);
    
        //Add the relationship type description to the schema builder using 'Modify'
        sb.Modify(relDesc);
    
        //Run the schema builder
        try
        {
          //Use the KnowledgeGraph extension method 'ApplySchemaEdits(...)'
          //to refresh the Pro UI
          if (!kg.ApplySchemaEdits(sb))
          {
            var err_msg = string.Join(",", sb.ErrorMessages.ToArray());
            System.Diagnostics.Debug.WriteLine($"Entity/Relate Modify error: {err_msg}");
          }
        }
        catch (Exception ex)
        {
          System.Diagnostics.Debug.WriteLine(ex.ToString());
        }
      }
    });
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.4 or higher.
    See Also