· Jun 24, 2022

Accessing Property within a Property

Hey Community,

I have an scenario, please advise or suggest possible ways to solve it.
So i have a persistent class to test results of a diagnostic laboratory. The properties are 

  • Patient name
  • Type of Test
  • Order ID

Type of test will values for Sugar, Urine and Thyroid. But for Thyroid which is a Profile test, should hold multiple properties like Tsh, T4, T5. 
How can i design my class to be able to fetch all results in query by passing order id(proably using where clause)

Product version: Caché 2018.1
Discussion (4)1
Log in or sign up to continue


I would suggest you do the following.

I understand you have a class something like:

Class My.Test extends %Persistent
Property PatientName;
Property TypeOfTest as My.TestType;
Property OrderID;

Make TypeOfTest an instance of another class My.TestType:

Class My.TestType extends %SerialObject
Property Name As %String(VALUELIST = ",Sugar,Urine,Thyroid");
Property Tsh;

In this case, as Robert has mentioned, you will be able to write a query like 

select PatientName, TypeOfTest_Name, TypeOfTest_Tsh
  from My.Test

Another way to do it would be the following. Make TypeOfTest an array:

Class My.Test extends %Persistent
Property PatientName;
Property TypeOfTest as array of %String; //%Numeric maybe?
Property OrderID;

In the array, each element is a pair of key and value. In this case, you add a key with the name of type of test and with value the result of test. And if the "Name" is "Thyroid", then you add the rest of the elements. For example:

  do test.TypeOfTest.SetAt("10", "Thyriod")
  do test.TypefTest.SetAt("148", Tsh)

This way, for your array in SQL you will get a separate table, the name of it will be a combination of class name and property name.

You can actually write a select just to query results of the tests and then find the name of the order using the primary key (which is a link to the main table My.Test)