如何在 SysLastValue 中找到用户上次使用的打印机

How do you find a user's last used printer in SysLastValue

我一直在尝试查找用户上次使用的打印机的存储位置,以便我可以清除此使用数据(因为一些用户有一个问题,即尽管我们有KB981681 已安装并且打印机可用;只是在某些 AX 表单上没有默认设置。

我知道这个数据在使用数据中的某处,我可以通过 AX 浏览它:

Microsoft Dynamics AX > Tools > Development Tools > Application Objects > Usage Data

AOT > System Documentation > Tables > SysLastValue >(右击)> Add-Ins > Table Browser

或通过SQL:

use AXDB
go

select *
from SysLastValue 
where userid in 
(
    select id 
    from userinfo 
    where networkalias in ('userid1','userid2')
)
and elementname like '%print%'
and iskernel = 1

但是到目前为止,我还无法猜出哪个设置包含上次使用的打印机信息。由于 value 字段是图像类型(即 blob),我也无法根据值进行搜索。

有关如何找到此设置的任何建议都会有所帮助。

不幸的是,实际上没有 "last used printer" 存储,因为每个进程都打包并存储了上次使用的打印设置。这是一个示例,说明如何在从销售表单发布取货单后提取上次使用的打印设置。

static void JobGetPrinterSettingsPickList(Args _args)
{
    container                       lastValues;
    SalesFormLetter_PickingList     pickList = new SalesFormLetter_PickingList();
    SRSPrintDestinationSettings     printSettings;

    lastValues = xSysLastValue::getValue(curext(), curUserId(), UtilElementType::Class, classStr(SalesFormLetter_PickingList), formStr(SalesTable));

    pickList.unpack(lastValues);

    printSettings = new SRSPrintDestinationSettings(pickList.printerSettingsFormletter());
    info(strFmt("%1", printSettings.printerName()));
    info(strFmt("%1", printSettings.printerType()));
}

编辑: 啊,我看到你有一个具体的问题。检查出现问题的任何对象的 pack/unpack 和版本。这可能是问题所在。或者,如果它在几件事上,请检查它们是否都已扩展 classes 并且您需要查看父 class.