Nested $Order Loops
Using a series of nested $Order loops (one for each level within a branch of the tree) allows you to reach the leaves, which are the ID numbers. You then use the ID to go back to the data global and retrieve whatever information you desire. Here's an example, using the name index. For each last name, a new loop is called that will find all first names for that last name. And for each full name, a new loop finds all the ID numbers for that name. The ID is used to get the rest of the data from ^PersonD.
VS Code - ObjectScript
/// examples for ObjectScript Tutorial
Class ObjectScript.Examples
{
/// Loop through the name index and display the records
ClassMethod NameLoop()
{
// loop through last names
set ln = ""
for {
set ln = $order(^PersonI("Name", ln))
quit:(ln = "")
// for each last name, loop through first names
set fn = ""
for {
set fn = $order(^PersonI("Name", ln, fn))
quit:(fn = "")
// for each last name and first name, loop through id numbers
set id = ""
for {
set id = $order(^PersonI("Name", ln, fn, id))
quit:(id = "")
// once you have an id number, get the data and display it
set rec = ^PersonD(id)
write !, $list(rec, 1),
?15, $list(rec, 2),
?30, $zdate($list(rec, 3), 2)
}
}
}
}
}
Testing using the Terminal
USER>do ##class(ObjectScript.Examples).NameLoop()
Agee,Tommie 617-333-3333 09 Aug 42
Jones,Bobby 333-444-5555 10 Feb 70
Jones,Cleon 111-111-1111 04 Aug 42
Swoboda,Ron 222-222-2222 08 Jun 44
USER>