AX Dev Warehouse

Um blog dedicado ao desenvolvimento de soluções em Microsoft Dynamics AX
posts - 41, comments - 18, trackbacks - 1

Coleções do X++: RecordSortedList

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 :)

Print | posted on Friday, April 06, 2007 2:19 PM | Filed Under [ X++ ]

Feedback

Gravatar

# concentrations open period available joint

retreat early precipitation oscillation shop 20th societies

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 4 and 5 and type the answer here:

Powered by: