Axapta Dynamics AX-在AX 2009中以编程方式向数据库日志添加表

Axapta Dynamics AX-在AX 2009中以编程方式向数据库日志添加表,axapta,microsoft-dynamics,x++,dynamics-ax-2009,Axapta,Microsoft Dynamics,X++,Dynamics Ax 2009,我正在寻找一种方法来为某些表启用日志记录更改 我曾尝试并测试过以编程方式将表添加到数据库日志中,但迄今为止取得了各种成功—有时有效,有时无效(大多数情况下无效)—似乎简单地将行插入DatabaseLogtable并不能完全起作用 我的尝试: 添加具有正确tableId、fieldId、logType和.域的行已被分配为“Admin”、主公司、空字段和子公司,结果相同。 我创建了一个处理插入的类,主要有两个函数: publicstaticvoidinsertbase(strtablename,d

我正在寻找一种方法来为某些表启用日志记录更改
我曾尝试并测试过以编程方式将表添加到数据库日志中,但迄今为止取得了各种成功—有时有效,有时无效(大多数情况下无效)—似乎简单地将行插入
DatabaseLog
table并不能完全起作用

我的尝试:
添加具有正确tableId、fieldId、logType和.
域的行已被分配为“Admin”、主公司、空字段和子公司,结果相同。
我创建了一个处理插入的类,主要有两个函数:

publicstaticvoidinsertbase(strtablename,domainId\u domain='Admin')
{
//在fieldid=0上插入、删除、向上升级的基本日志记录
数据库日志DBDict;
TableId _TableId;
数据库日志类型_日志类型;
fieldId _fieldId=0;
列出日志类型;
int i;
列表分子枚举器;
;
_tableId=tableName2id(tableName);
日志类型=新列表(类型::枚举);
加数(DatabaseLogType::Insert);
加数(DatabaseLogType::Update);
加数(DatabaseLogType::Delete);
加数(DatabaseLogType::EventInsert);
addEnd(DatabaseLogType::EventUpdate);
加数(DatabaseLogType::EventDelete);
枚举器=日志类型。getEnumerator();
while(枚举数.moveNext())
{
_logType=enumerator.current();
从dbdict where中选择*
dbdict.logTable==\u tableId&&dbdict.logField==\u fieldId
&&dbdict.logType==\u logType;
如果(!dbDict)//这意味着它不存在
{
dbdict.logTable=\u tableId;
dbdict.logField=\u fieldId;
dbdict.logType=\u logType;
dbdict.domainId=\u域;
dbdict.insert();
}
}
信息(“成功”);
}
以及列出每个字段并添加为logType::Update的方法

publicstaticvoidinit(strtablename,DomainId domain='Admin')
{
数据库日志类型日志类型;
int i;
货柜kk,ll;
数据库日志;
tableid _tableid;
fieldid _fieldid;
;
logtype=DatabaseLogType::Update;
//保存尚未添加到databaselog的表字段的容器
kk=BLX_AddTableToDatabaseLog::buildFieldList(日志类型,表名);

对于(i=1;i在进行设置更改后,您可能需要调用

SysFlushDatabaseLogSetup::main();
以刷新任何缓存。

这个方法在标准AX代码中也被调用,形式为method
SysDatabaseLogTableSetup\Methods\close
,在类方法中,method
SysDatabaseLogWizard\doRun

乍一看很好。我在AX 2012中做了类似的事情,效果非常好。您能检查一下
SysDatabaseLogWizard::tableAllowed(tabled)吗
在AX 2009中可用,这是您的代码和我的代码之间的一个区别。除此之外,也许可以在您的问题中添加一些附加信息,说明它对哪些表有效,哪些表无效?SysDatabaseLogWizard::tableAllowed(662))返回true。可能AOS重启是它工作所必需的?我还没有测试过。它工作的表是InventDimCombination,这是我所知道的唯一一个成功的例子。好主意。这应该适用于
dataAreaId
的所有值。似乎就是这样,工作起来很有魅力。你还必须称之为meth您安装的每个AOS实例上都有od。虽然它对InventDim不起作用,但我还没有完成修补(可能是我做错了什么)。我不想过早接受答案(因为它对InventDim不起作用),所以我将等到明天完成测试并重新启动AOS。