AX2012 查询后台数据库记录

AX2012 自带的数据库查询功能比较慢(特别是查询删除的情况),有些业务可能需要频繁查询删除人和删除时间等,这种情况下还是用代码来查询比较快。

例:

static void SysDataBaseLog_SalesTableDel(Args _args)
{
    SysDataBaseLog      sysDataBaseLog;
    container           tableRecord, tableRecordSel;
    container           recordInstance;
    int                 idx = 0;
    str                 fieldName,fieldValue_new,fieldValue_old;
    SalesId             salesId, salesIdDel;
    utcDateTime         beginDT, endDT;
    TableId             tableId;
    str                 delby;
    utcDateTime         delDateTime;
    ;

    // return;

    salesIdDel = "XXXXXXXX";                                        // 被删除的SalesId
    beginDT = 2021-12-20T00:00:00;                                  // 开始时间, 时间范围越精确,查询所需时间越少
    endDT = 2021-12-24T00:00:00;                                    // 结束时间
    tableId = tableName2id("SalesTable");

    // 1. 先根据【SalesId】找出被删的记录
    while select sysDataBaseLog
        where sysDataBaseLog.table == tableId                         // Table的RecordId, 自行替换
           && sysDataBaseLog.LogType == DatabaseLogType::Delete      // 要查询的数据库日志的类型, 自行替换
           && sysDataBaseLog.createdDateTime > beginDT               // 开始时间
           && sysDataBaseLog.createdDateTime < endDT                 // 结束时间
    {
        tableRecord = sysDataBaseLog.Data;
        if(tableRecordSel != conNull())
        {
            break;
        }

        for(idx = 1; idx <= conLen(tableRecord); idx++)
        {
            recordInstance =  conpeek(tableRecord, idx);

            fieldName = conpeek(recordInstance, 1);                   // container下记录的数据为为【fieldNmae】, 【字段更改前的数据】,【更改后的数据】...

            if(fieldName == "SalesId")
            {
                salesId = conpeek(recordInstance, 2);

                if(salesId == salesIdDel)
                {
                    tableRecordSel = tableRecord;
                    delby = sysDataBaseLog.createdBy;
                    delDateTime = DateTimeUtil::applyTimeZoneOffset(sysDataBaseLog.createdDateTime, DateTimeUtil::getUserPreferredTimeZone());
                    break;
                }
                else
                {

                    break;
                }
            }
        }
    }

    // 2. 循环读出记录字段
    info(strFmt("删除日期和时间: %1", delDateTime));
    info(strFmt("删除人: %1", delby));
    for(idx = 1; idx <= conLen(tableRecordSel); idx++)
    {
        recordInstance =  conpeek(tableRecordSel, idx);

        fieldName = conpeek(recordInstance, 1);
        if(fieldName == "SalesId")
        {
            salesId = conpeek(recordInstance, 2);
            info(strFmt("销售订单号:%1", salesId));
        }
        else if(fieldName == "createdBy")
        {
            info(strFmt("创建人: %1", conpeek(recordInstance, 2)));
        }
        else if(fieldName == "CreatedDateTime")
        {
            info(strFmt("创建日期和时间: %1", conpeek(recordInstance, 2)));
        }
    }
}

 

posted @ 2021-12-24 10:38  一口一个小馒头  阅读(116)  评论(0编辑  收藏  举报