User bio
404 bio not found
Member since Mar 17, 2022

Thanks Julius,

It was exactly what i needed. My goal was to copy properties from a dynamic object to a persistent object, but in dynamic object for reference, I have only id, not a ref.

So i made this : (main class)

Class Bna.Utils.DynToPersistent Extends %RegisteredObject

Property DynObject As %Library.DynamicObject;

Property PersistentObject;

Method %OnNew(dynObject As %Library.DynamicObject, persistentObject) As %Status
    Set ..DynObject = dynObject
    Set ..PersistentObject = persistentObject
    Return $$$OK

Method copyDynToPersistent()
    set pClass = ..PersistentObject.%ClassName(1)
    Set iterator = ..DynObject.%GetIterator()
    while iterator.%GetNext(.pProp, .pValue) {
        Set pType = ##class(Bna.Utils.Common).GetPersistentObjectPropertyType(pClass,pProp)
        Set isRef = ##class(Bna.Utils.Common).PersistentObjectPropertyTypeIsReference(pType)
        if isRef {
            set value = $ZOBJCLASSMETHOD(pType, "%OpenId", pValue)
        } else {
            set value = pValue
        Set $ZOBJPROPERTY(..PersistentObject, pProp) = value


(utility methods) :

ClassMethod GetPersistentObjectPropertyType(pClass As %String, pKey As %String) As %String
	set def=##class(%Dictionary.PropertyDefinition).%OpenId(pClass_"||"_pKey)
	if def Return def.Type

ClassMethod PersistentObjectPropertyTypeIsReference(pType) As %Boolean
	if $EXTRACT(pType,1,1) = "%" { Return 0 }
	else { Return 1 }

 I think my test for reference detection can be light, but enough in my context

Certifications & Credly badges:
Pierre has no Certifications & Credly badges yet.
Global Masters badges:
Pierre has not followed anybody yet.