Thank you for reaching out to us. It is unfortunately extremely hard to answer your question concretely as the information provided by you is very general.
I assume you are implementing your own nodes UI from scratch; you are neither using the
GraphView (i.e., Xpresso), nor Nodes API? But the entities in your graph are instances of
ActiveObjectManager_RegisterMode allows you to register your own mode for the Attribute Manager (Fig. 1) which in turn allows you to shield yourself from a displayed node from being replaced when you do not want to.
Fig 1: The Attribute Manager separates its displayed entities into bins called Modes.
So, when you set a
BaseObject in your code with
ActiveObjectManager_SetObject as the entity to be displayed in the
ACTIVEOBJECTMODE::OBJECT mode, the user then changing for example the Object Manager selection will overwrite that "set object". When you register your own mode, you can prevent that, because it is only you who sets the displayed entities there.
Registering your own mode also allows you to pass a
MessageData hook which streamlines
setting the displayed object via
ActiveObjectManager_SetObject, but in the end you still must call this method every time you want to change the displayed entity. Because how should Cinema 4D otherwise know what you are doing in your dialog?
In case this is all old news for you, and you are only struggling with objects not updating correctly their parameter GUIs and/or values when you have changed a value, the instruction
SpecialEventAdd(COREMSG_CINEMA_FORCE_AM_UPDATE) will be the solution. In some cases the Attribute Manager needs a little nudge to get over the finish line.