RecIDs são IDs únicos, como aqueles auto-incremento que criamos quando construímos tabelas diretamente no SQL. RecIDs são únicos por tabela, uma diferença significante quando comparado com a versão 3.0 do AX, onde os RecIDs erão unicos na aplicação inteira, com essa mudança, permite ao AX guardar muito mais dados.

No AX 4.0 a tabela que guarda os detalhes dos ids é a SystemSequences. A geração deles é feita pela classe SystemSequence.

Os RecIDs são gerados no momento em que os registros são salvos. Isto é o que o sistema faz:
Baseado no tableID, ID = -1 e nome = ‘SEQNO’ o sistema pega um bloco de RecIDs para o cache e então os guarda no client. O tamanho do bloco é de 250 registros que até o AX 3.0 era possível alterar esse valor, mas desde o 4.0, a Microsoft fixou este valor.

Abaixo um código de exemplo que mostra como nós podemos pegar o proximo RecID.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void getNextRecIdAX40(Args _args)
{
	//Table that stores record ids details for tables
	SystemSequences systemSequences;
 
	//Class that handles Record id generation
	SystemSequence  systemSequence = new SystemSequence();
	;
 
	select firstonly systemSequences where systemSequences.tabId == tableNum(CustTable);
 
	systemSequence.suspendRecIds(systemSequences.tabId);
	info(strFmt('Next record id: %1', systemSequence.reserveValues(systemSequences.minVal, systemSequences.tabId)));
	systemSequence.removeRecIdSuspension(systemSequences.tabId);
}

Abaixo um script de exemplo para gerar RecIDs quando estiver usando scripts no SQL Server.

[Fonte: How to Write Data Upgrade Scripts for Microsoft Dynamics AX 4.0 white paper from MS]
(Requer partnersource login)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE PROCEDURE initFromSMMQuotationTable @DATAAREAID NVARCHAR(3 
 
AS DECLARE @NEXTVAL BIGINT, @ROWCOUNT BIGINT 
 
SELECT ......, 
RECID = IDENTITY(BIGINT,0,1) AS QUOTATIONID --Assign an IDENTITY column with a starting value of 0 incremented by 1 
INTO #TEMP 
FROM DEL_SMMQUOTATIONTABLE WHERE QUOTATIONSTATUS = 0 --SMMQuotationStatus::InProcess 
 
SELECT @NEXTVAL=NEXTVAL --Retrieve the next value for RECID for this table (by TABID) 
FROM SYSTEMSEQUENCES 
WITH(UPDLOCK, HOLDLOCK) WHERE ID = -1 AND TABID = 1967 
 
INSERT INTO SALESQUOTATIONTABLE 
(column-list) 
SELECT ......, 
RECID = QUOTATIONID+@NEXTVAL --When we insert into the permanent table, we add the temporary table?s IDENTITY column to the next value retrieved from SYSTEMSEQUENCES 
FROM #TEMP 
 
SELECT @ROWCOUNT = COUNT(*) FROM #TEMP 
 
UPDATE SYSTEMSEQUENCES             --We update SYSTEMSEQUENCES to reflect the number of rows that we have added to this table 
SET NEXTVAL=NEXTVAL + @ROWCOUNT 
WHERE ID = -1 AND TABID = 1967 
GO

[]s
Pichler

Fonte: http://sumit-theaxfactor.spaces.live.com/blog/