[OBD Connect Edition Update 6 C#] DgnECManagedCrudExample

Hi,

I am currently trying to adapt the 'DgnECManagedCrudExample' (https://communities.bentley.com/products/programming/microstation_programming/b/weblog/posts/ec-crud-operations-with-native-and-managed-dgnec-apis#CreateECInstancesAndRelationships) to our needs.
It works fine with the simple (custom) schema from the example.

If I try with the class 'Concrete__x0020__Column' from the 'BuildingDataGroup' schema I run into an 'EnvironmentalException' ("CreateInstanceOnElement failed with error code: 32768") when I try to create the 'IDgnECInstance'. The 'SupportsCreateInstanceOnElement' flag is also false (it´s true in case of the simple schema). I tried the other methods of creating an instance in 'DgnECInstanceEnabler' as well.

bool supportsCreateInstanceOnElement = widgetEnabler.SupportsCreateInstanceOnElement;
IDgnECInstance widgetInstance = widgetEnabler.CreateInstanceOnElement(lineElement, widgetWipInstance, false);

I have columns with that exact EC instance attached in the same model.

Am I missing something here? Is this not allowed?

Cheers

My example code:

DgnFile activeDgnFile = Session.Instance.GetActiveDgnFile();

ModelId modelId = activeDgnFile.DefaultModelId;
StatusInt statusInt;
DgnModel activeDgnModel = activeDgnFile.LoadRootModelById(out statusInt, modelId, true, true, true);

DgnECManager dgnECManager = DgnECManager.Manager;

DPoint2d startPoint = new DPoint2d(0, 0);
DPoint2d endPoint = new DPoint2d(10 * UoR, 10 * UoR);
DSegment3d segment3D = new DSegment3d(startPoint, endPoint);
LineElement lineElement = new LineElement(activeDgnModel, null, segment3D);
if (null != lineElement)
lineElement.AddToModel();

string schemaName = "BuildingDataGroup";
FindInstancesScope scope = FindInstancesScope.CreateScope(Session.Instance.GetActiveDgnFile(), new FindInstancesScopeOption(DgnECHostType.All, false));
IECSchema schema = DgnECManager.Manager.LocateSchemaInScope(scope, schemaName, 1, 0, SchemaMatchType.Latest);

string className = "Concrete__x0020__Column";
IECClass ecClass = schema.GetClass(className);

DgnECInstanceEnabler widgetEnabler = dgnECManager.ObtainInstanceEnabler(activeDgnFile, ecClass);
ECDInstance widgetWipInstance = widgetEnabler.SharedWipInstance;

bool supportsCreateInstanceOnElement = widgetEnabler.SupportsCreateInstanceOnElement;
IDgnECInstance widgetInstance = widgetEnabler.CreateInstanceOnElement(lineElement, widgetWipInstance, false);

Parents
  • Hi Tilman,

    Building products might have handlers/listeners for their own classes. Or, Concrete__x0020__Column could be an intrinsic class. Meaning, Concrete class properties may not be persisted as "ECXAttributes". Ideally, you should use Building APIs to create the concrete columns. Let me check if someone could direct you to Building development communities.

    Thanks,

    Mangesh


    This is a test

Reply
  • Hi Tilman,

    Building products might have handlers/listeners for their own classes. Or, Concrete__x0020__Column could be an intrinsic class. Meaning, Concrete class properties may not be persisted as "ECXAttributes". Ideally, you should use Building APIs to create the concrete columns. Let me check if someone could direct you to Building development communities.

    Thanks,

    Mangesh


    This is a test

Children