Determining if an object is a subclass
From Axaptapedia
It can sometimes be useful to determine if an object is a instance of a subclass of some specified parent class.
While over-use of this probably suggests a class framework which has not been well designed, it is valuable in specific instances.
There are two static methods on the SysDictClass which can be used for this purpose:
static boolean isSuperclass(classId _id, classId _potentialAncestorId)
This method checks if the classId passed in _id is a subclass of the _potentialAncestorId
static boolean isEqualOrSuperclass(classId _id, classId _potentialAncestorId)
This method checks if the classId passed in _id is a subclass of the _potentialAncestorId, and will also return true if _id equals _potentialAncestorId
The following code uses the SalesTableType heirarchy as an example.
SalesTableType stt; SalesTableType_Journal stt_j; ; // This is true as stt is an ''instance'' of SalesTableType if (SysDictClass::isEqualOrSuperclass(classidget(stt), classnum(SalesTableType))) { // Code here will be run } // This is true as stt_j is a ''subclass'' of SalesTableType if (SysDictClass::isEqualOrSuperclass(classidget(stt_j), classnum(SalesTableType))) { // Code here will be run } // This is true as stt_j is an ''instance'' of SalesTableType_Journal if (SysDictClass::isEqualOrSuperclass(classidget(stt_j), classnum(SalesTableType_Journal))) { // Code here will be run } // This is FALSE as stt is NOT an instance or subclass of SalesTableType_Journal if (SysDictClass::isEqualOrSuperclass(classidget(stt), classnum(SalesTableType_Journal))) { // Code here will NOT be run }