Search code examples
printingaxaptamicrosoft-dynamicsdynamics-ax-2009dynamics-ax-2012-r2

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


I've been trying to find where a user's last used printer is stored so that I can clear this usage data (as a few users have an issue where the remembered printer keeps defaulting to the XPS writer, despite us having KB981681 installed & the printer being available; just not defaulted on certain AX forms).

I know this data's somewhere in the Usage Data, which I can browse via AX:

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

AOT > System Documentation > Tables > SysLastValue > (right click) > Add-Ins > Table Browser

Or through 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

However so far I've not been able to guess which setting holds the last used printer information. Since the value field is of type image (i.e. a blob) I also can't search based on value.

Any advise on how to find this setting would be helpful.


Solution

  • Unfortunately there really isn't one "last used printer" stored, as much as each process packs and stores the last used print settings. Here is an example of how you can pull the last used print settings after posting a picking slip from the sales form.

    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()));
    }
    

    Edit: Ah I see you're having a specific issue. Check the pack/unpack and version of whatever object is having the issue. That is likely where the issue is. Or if it's on several things, check if they're all extended classes and you need to look at the parent class.