首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >axapta表格插入/更新

axapta表格插入/更新
EN

Stack Overflow用户
提问于 2010-09-01 22:16:01
回答 2查看 2.9K关注 0票数 0

再问一次axapta问题(在AX2009和sql-server 2008 r2上运行):当插入或更新的数据集存储在相关数据库中时,确切的时间点是什么?

其目的是调用sql-server上的一个存储过程,该过程将数据从ax表(例如inventtable )传输到另一个表(不是用axapta生成)。通过odbc从axapta对一个表方法执行存储过程(即使在超级( )调用之后)也会触发存储过程,但是在通过smss ( select * from dbo.inventtable )进行选择时,不会找到刚刚在ax中添加或修改的数据。

据我所知,数据已经存储在数据库中的唯一地方是关于表单的数据源上的方法,但这将是非常丑陋的,因为数据可以通过ax中的n个表单进行编辑。

那么,有没有一种方法可以将调用放在表上,而不是放在表单的数据源上?

感谢您的提前提示!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-02 18:57:43

AX数据在insert()/update()方法中的doInsert()/doUpdate()super()调用点“存储”在数据库中。

然而,正如Jay所提到的,这些记录对其他事务是不可见的(除非您显式地允许脏/未提交的选择)。因此它可能对您的存储过程不可见。

我不建议在insert()/update()中调用存储过程,因为这会影响性能,而您现在又依赖于另一个活动的数据库!

要走的路:

出于此目的,

  1. 日志在单独的表中插入/更新(请考虑使用标准数据库日志记录)。来自其他数据库的
  2. 会定期监视日志中是否有新记录(例如每隔15秒)。
  3. 根据日志和AX表的联接在其他数据库中执行插入/更新。

日志表布局(百万中的一个):

AX表的3=delete

  • LogStatus - 3=error???

  • RefRecId -

  • -LogType- 1=insert (如果您需要记录多条AX记录的3=error???

  • RefRecId-

  • -LogType(可能该表是虚拟共享的))

建议:

  1. 使用RecId作为连接键,并记住在AX table.
  2. Remember上启用RecId索引以选择DATAAREAID (必须以这种方式拼写)。
  3. 在连接之前将LogStatus更新为1,在连接和更新之后将其更新为2。
票数 1
EN

Stack Overflow用户

发布于 2010-09-01 23:58:31

将调用放在insert()或update()表方法中的super()调用之后是正确的做法,但是,除非执行未提交的读操作,否则在AX中的事务提交之前,存储过程中的select语句将看不到数据。

您是否可以使用来自X++的ODBC连接直接写入外部表,而不是通过存储过程间接写入?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3618997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档