Question
· Mars 20

Comment comparer deux Registered Object

J'aimerai comparer deux "Registered Object" et lister chaque propriété différente

Pour le moment j'ai ce code :

ClassMethod AssertObjectEquals(object As %RegisteredObject, objectToCompare As %RegisteredObject, Output msg As %String) As %Status
{
        Set returnValue = 1
        // check if same class
        Set className = $CLASSNAME(object)
        If (className '= $CLASSNAME(objectToCompare)) {
                Set returnValue = 0
                Set difference = "not same class"
        }

        If (returnValue) {
                // Get the definition to browse properties
                Set classDef = ##class(%Library.ClassDefinition).%OpenId(className)
                Set propertiesDef = classDef.Properties
                // Check the value for each property
                Set difference = ""
                For i = 1:1:propertiesDef.Count() {
                        Set propertyName = propertiesDef.GetAt(i).Name
                        Set propertyValue = $PROPERTY(object,propertyName)
                        // if different, supply the variable difference with the name of property + value
                        If ((propertyValue '= "") && (propertyValue '= $PROPERTY(objectToCompare,propertyName)))
                        {
                                Set difference = difference _ "; " _ propertyName _ " = " _ propertyValue
                        }
                }
        }
        if difference = ""
                {Set msg = "equal"}
        else {
                Set msg = difference
        }
        Return $$$OK
}

Mais cela ne prend pas en compte les propriétés complexes telles que les listes, les tableaux ou les objets.

Quelqu’un a-t-il une idée pour compléter la méthode de classe ou une autre solution totalement différente ?

Merci d’avance !

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer