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!

È stato utile?

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:

  1. Registro inserimento / aggiornamento in una tabella separata per tale scopo (considerare l'utilizzo di registrazione del database standard).
  2. Dalla altro database monitorare regolarmente il registro per i nuovi record (dire ogni 15 secondi).
  3. 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:

  1. Usa recid come la chiave di join e ricordarsi di abilitare indice recid sul tavolo AX.
  2. Ricordate di selezionare il DATAAREAID (deve essere scritto in questo modo) pure.
  3. 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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top