tavolo inserto Axapta / aggiornamento
Domanda
e ancora una volta un Axapta-domanda (in esecuzione su AX 2009 e SQL-Server 2008 R2): che è esattamente il punto del tempo, in cui i set di dati inserite o aggiornate sono memorizzati nel database riguardo?
l'obiettivo è quello di chiamare una stored procedure sul sql server che trasferisce dati da AX-tabelle (es inventtable) ad un altro (non generato con Axapta) tavolo. l'esecuzione della stored procedure tramite ODBC da Axapta su uno dei tavolo-metodi (anche dopo la super () chiamata) innesca la stored procedure, ma i dati che è stato appena aggiunti o modificati in ascia non è stato trovato durante la selezione tramite SMS (selezionare * da dbo.inventtable).
L'unico posto che so ancora dove i dati sono già memorizzati nel db è sui metodi sull'origine dati sul modulo riguardo, ma questo sarebbe stato tranquillo brutto, in quanto i dati potrebbero essere modificati tramite n forme di ascia.
è così c'è un modo per mettere la chiamata sul tavolo invece sulle origini dati delle forme?
grazie per osservazioni in anticipo!
Soluzione
I dati AX viene "immagazzinata" nel database al punto di chiamate doInsert()
/ doUpdate()
o super()
nei metodi insert()/update()
.
Tuttavia, come detto Jay, i record non sarà visibile ad altre operazioni (a meno che non si consente esplicitamente sporchi / seleziona non impegnati). Quindi non può essere visibile a stored procedure.
Non lo consiglio chiamare stored procedure in insert()/update()
comunque come questo ha implicazioni sulle prestazioni, e si sta ora a seconda di un altro database di essere vivi!
La strada da percorrere:
- Registro inserimento / aggiornamento in una tabella separata per tale scopo (considerare l'utilizzo di registrazione del database standard).
- Dalla altro database monitorare regolarmente il registro per i nuovi record (dire ogni 15 secondi).
- Fare il vostro inserimento / aggiornamento in altro database basato su un join del registro e la tabella AX.
layout di tabella Log (uno dei milioni):
- LogType - 1 = inserimento, 2 = aggiornamento, 3 = Elimina
- LogStatus - 0 = non trasferito, 1 = sotto trasferimento, 2 = trasferiti, 3 = errore ???
- RefRecId - recid di registrare AX
- RefTableId - TableID del tavolo AX (se devi effettuare il login più di una tabella)
- RefCompanyId - Compagnia di registrare AX (forse la tabella è condivisa praticamente)
Raccomandazioni:
- Usa recid come la chiave di join e ricordarsi di abilitare indice recid sul tavolo AX.
- Ricordate di selezionare il
DATAAREAID
(deve essere scritto in questo modo) pure. - Aggiorna il
LogStatus
a 1 prima il join e 2 dopo il join e l'aggiornamento.
Altri suggerimenti
Mettere la chiamata dopo il super () chiamata nell'inserto () o update () metodo della tabella è il posto giusto per farlo, però se non si fa una lettura commit l'istruzione SELECT nella stored procedure non vedrà la i dati fino a dopo l'operazione in AX è impegnata.
Potrebbe utilizzare la connessione ODBC da X ++ per scrivere nella tabella esterna direttamente invece di indirettamente tramite una stored procedure?