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
Leave a reply