Considerations When Populating a Rowset From a Message
Suppose your message had two rowsets, one at level zero, a second at level one. In the message, only the level zero rowset contains any data. When you use GetRowset to create a rowset for the entire message, the rowset at level one will contain an empty row, even if there isn’t any data in it. (This is standard behavior for all rowsets.) However, you can use the IsChanged property on the record object to determine the status of the data.
The following notification PeopleCode example traverse the rowset. (Notice the use of ChildCount, ActiveRowCount, and IsChanged properties).
‘. . .’ is where application specific code would go.
&MSG_ROWSET = &MSG.GetRowset();
For &A0 = 1 To &MSG_ROWSET.ActiveRowCount
/***************************/
/* Process Level 1 Records */
/*-------------------------*/
If &MSG_ROWSET(&A0).ChildCount > 0 Then
For &B1 = 1 To &MSG_ROWSET(&A0).ChildCount
&LEVEL1_ROWSET = &MSG_ROWSET(&A0).GetRowset(&B1);
For &A1 = 1 To &LEVEL1_ROWSET.ActiveRowCount
If &LEVEL1_ROWSET(&A1).GetRecord(1).IsChanged Then
. . .
/***************************/
/* Process Level 2 Records */
/*-------------------------*/
If &LEVEL1_ROWSET(&A1).ChildCount > 0 Then
For &B2 = 1 To &LEVEL1_ROWSET(&A1).ChildCount
&LEVEL2_ROWSET = &LEVEL1_ROWSET(&A1).GetRowset(&B2);
For &A2 = 1 To &LEVEL2_ROWSET.ActiveRowCount
If &LEVEL2_ROWSET(&A2).GetRecord(1).IsChanged Then
. . .
/***************************/
/* Process Level 3 Records */
/*-------------------------*/
If &LEVEL2_ROWSET(&A2).ChildCount > 0 Then
For &B3 = 1 To &LEVEL1_ROWSET(&A2).ChildCount
&LEVEL3_ROWSET = &LEVEL2_ROWSET(&A2).GetRowset(&B3);
For &A3 = 1 To &LEVEL3_ROWSET.ActiveRowCount
If &LEVEL3_ROWSET(&A3).GetRecord(1).IsChanged Then
. . .
End-If; /* A3 - IsChanged */
End-For; /* A3 - Loop */
End-For; /* B3 - Loop */
End-If; /* A2 - ChildCount > 0 */
/*--------------------------------*/
/* End of Process Level 3 Records */
/**********************************/
End-If; /* A2 - IsChanged */
End-For; /* A2 - Loop */
End-For; /* B2 - Loop */
End-If; /* A1 - ChildCount > 0 */
/*--------------------------------*/
/* End of Process Level 2 Records */
/**********************************/
End-If; /* A1 - IsChanged */
End-For; /* A1 - Loop */
End-For; /* B1 - Loop */
End-If; /* A0 - ChildCount > 0 */
/*--------------------------------*/
/* End of Process Level 1 Records */
/**********************************/
End-For; /* A0 - Loop */