Esta é uma coleção peculiar do X++. Ela guarda linhas de uma tabela (tabela X++, não do Banco de dados), e as ordena por um ou mais campos da tabela. É útil para quando precisamos ordernar uma coleção de linhas de uma tabela e/ou quando precisamos passar um subset de uma tabela como parâmetro de um método.
Por exemplo, se quiser ordernar todos os clientes pelo seu estado e sua cidade:
CustTable custTable;
RecordSortedList clientes;
boolean more;
;
//Instanciando uma nova coleção
clientes = new RecordSortedList(tableNum(CustTable));
clientes.sortOrder(fieldNum(CustTable, State),
fieldNum(CustTable, City),
fieldNum(CustTable, RecId));
//Preenchendo a coleção
while select custTable
{
clientes.ins(custTable);
}
//Iterando a lista
more = clientes.first(custTable);
while(more)
{
print strfmt("%1 - %2", custTable.State, custTable.City);
more = clientes.next(custTable);
}
pause;
Existem alguns detalhes neste exemplo que merecem uma atenção maior. O new da coleção recebe como parâmetro o TableId da tabela cujas linhas serão os itens. Eu poderia passar o código diretamente, mas usando o método tableNum() o código fica mais legível, qualquer um lê e entende que a tabela é a CustTable, já se estivesse escrito o id: 256, ninguém saberia.
O mesmo acontece com os ids das colunas, eu utilizei o método fieldNum ao invés de digitar o código diretamente.
Além disso não se esqueça de chamar o método next() ao final do loop para não cair em um loop infinito e ter fechar o AX usando o task manager - como aconteceu comigo escrevendo este exemplo :)