Question

et encore une fois une question Axapta-(en cours d'exécution sur la hache 2009 et sql-server 2008 R2): ce qui est exactement le point de temps, lorsque les ensembles de données insérées ou mises à jour sont stockés dans la base de données en ce qui concerne?

le but est d'appeler une procédure stockée sur le serveur SQL qui transfère des données à partir des tables de hache (par exemple inventtable) à une autre (pas généré avec axapta) table. l'exécution de la procédure stockée via odbc de Axapta sur l'une des tables-méthodes (même après appel super ()) déclenche la procédure stockée, mais les données qui vient d'être ajoutés ou modifiés dans la hache ne se trouve pas lors de la sélection par l'intermédiaire smss (select * de dbo.inventtable).

le seul endroit que je sais encore où les données sont déjà stockées dans db est sur les méthodes sur la source de données sur la forme en ce qui concerne, mais ce serait calme laid, car les données peuvent être modifiées via des formulaires n de hache.

est-il un moyen de mettre l'appel sur la table plutôt sur les sources de données des formulaires?

merci pour des notes à l'avance!

Était-ce utile?

La solution

Les données AX est « stocké » dans la base de données au point d'appels doInsert() / ou doUpdate() super() dans les méthodes de insert()/update().

Cependant, comme mentionné Jay, les dossiers ne sera pas visible à d'autres transactions (sauf si vous autorisez explicitement sélectionne sales / non engagés). Donc, il ne peut pas être visible à votre procédure stockée.

Je ne recommande pas d'appeler des procédures stockées dans insert()/update() de toute façon, car cela a des répercussions sur la performance, et vous êtes maintenant en fonction sur une autre base de données étant en vie!

Le chemin à parcourir:

  1. insérer journal / mise à jour dans une table distincte à cette fin (pensez à utiliser l'enregistrement de base de données standard).
  2. De l'autre base de données vérifie régulièrement le journal pour les nouveaux enregistrements (disons toutes les 15 secondes).
  3. Faites votre insertion / mise à jour dans l'autre base de données basée sur une jointure du journal et la table AX.

mise en page de table Log (un des millions):

  • LogType - 1 = insert, 2 = mise à jour, 3 = supprimer
  • logstatus - 0 = pas transféré, 1 = moins de transfert, 2 = transféré, 3 = erreur ???
  • RefRecId - RECID d'enregistrement AX
  • RefTableId - tableid de table AX (si vous devez vous connecter plus d'une table)
  • RefCompanyId - Société de l'enregistrement AX (peut-être le tableau est partagé virtuellement)

Recommandations:

  1. Utilisez RECID comme la clé de jointure et rappelez-vous pour permettre l'indice RECID sur la table AX.
  2. Souvenez-vous de sélectionner le DATAAREAID (doit être orthographié de cette façon) ainsi.
  3. Mise à jour du LogStatus à 1 avant la jonction et à 2 après la jonction et la mise à jour.

Autres conseils

Mettre l'appel après le super appel () dans la méthode de la table d'insertion () ou mise à jour () est le bon endroit pour le faire, mais à moins que vous effectuez une lecture non validée de l'instruction select dans votre procédure stockée ne verra pas la les données jusqu'à ce que après la transaction AX est engagée.

Pouvez-vous utiliser la connexion ODBC de X ++ pour écrire à la table externe directement au lieu de indirectement par le biais d'une procédure stockée?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top