gpt4 book ai didi

axapta - Dynamics AX - 在 AX 2009 中以编程方式将表添加到数据库日志

转载 作者:行者123 更新时间:2023-12-02 09:12:10 27 4
gpt4 key购买 nike

我正在寻找一种方法来启用某些表的日志记录更改。
我已经尝试并测试了以编程方式将表添加到数据库日志中,但到目前为止取得了各种成功 - 有时它有效,有时它不起作用(大多数情况下它不起作用) - 似乎只是将行插入到 DatabaseLog 表中并不可行不太成功。

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

public static void InsertBase(STR tableName, domainId _domain='Admin')
{
//base logging for insert, delete, uptade on fieldid=0
DatabaseLog DBDict;
TableId _tableId;
DatabaseLogType _logType;
fieldId _fieldId =0;
List logTypes;
int i;
ListEnumerator enumerator;
;

_tableId= tableName2id(tableName);

logTypes = new List(Types::Enum);

logTypes.addEnd(DatabaseLogType::Insert);
logTypes.addEnd(DatabaseLogType::Update);
logTypes.addEnd(DatabaseLogType::Delete);
logTypes.addEnd(DatabaseLogType::EventInsert);
logTypes.addEnd(DatabaseLogType::EventUpdate);
logTypes.addEnd(DatabaseLogType::EventDelete);

enumerator = logTypes.getEnumerator();
while(enumerator.moveNext())
{
_logType = enumerator.current();

select * from dbdict where
dbdict.logTable==_tableId && dbdict.logField==_fieldId
&& dbdict.logType==_logType;
if(!dbDict) //that means it doesnt exist
{
dbdict.logTable=_tableId;
dbdict.logField=_fieldId;
dbdict.logType=_logType;
dbdict.domainId=_domain;
dbdict.insert();
}
}
info("Success");
}

以及列出每个字段并添加为 logType::Update 的方法

public static void init(str TableName, DomainId domain='Admin')
{
DatabaseLogType logtype;
int i;
container kk, ll;
DatabaseLog dblog;
tableid _tableId;
fieldid _fieldid;
;

logtype = DatabaseLogType::Update;
//holds a container of not yet added table fields to databaselog
kk = BLX_AddTableToDatabaseLog::buildFieldList(logtype,TableName);
for(i=1; i <= conlen(kk);i++)
{
ll = conpeek(kk,i);
_tableid = tableName2id(tableName);
_fieldid = conpeek(ll,1);
info(strfmt("%1 %2", conpeek(ll,1),conpeek(ll,2)));

dblog.logType=logType;
dblog.logTable = _tableId;
dblog.domainId = domain;
dblog.logField =_fieldid;
dblog.insert();
}
}

结果: Select * from databaselog where logtable=662

我错过了什么?

@编辑一些附加信息
不适用于 SalesTableSalesLineWMSBillOfLading
我无法使用管理面板中的向导为 SalesTableSalesLine 添加日志,但我的同事以某种方式做到了(她做了与我完全相同的事情)。我们还尝试向其他各种表添加日志,我们经常发现她可以,而我不能,反之亦然(有时没有人能够像 WMSBillOfLading 表那样做到这一点)。

这种机制的不一致促使我编写了这段代码,我希望它能解决所有问题。

最佳答案

完成设置更改后,您可能需要调用

SysFlushDatabaseLogSetup::main();

为了刷新所有缓存。
在标准 AX 代码中,也会以表单方法 SysDatabaseLogTableSetup\Methods\close 和类方法 SysDatabaseLogWizard\doRun 的形式调用此方法。

关于axapta - Dynamics AX - 在 AX 2009 中以编程方式将表添加到数据库日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923841/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com