如何将SysLastValue.Value解压缩到XML文件?

时间:2015-09-23 15:21:10

标签: xml axapta dynamics-ax-2012 x++ dynamics-ax-2009

我正在寻找一种方法来提取SysLastValue表中存储的列值的值。 我试图将它存储在txt文件中,但文本文件的内容是不可读的

static void jobSettingStore(Args _args)
{
    syslastvalue sysLastValue;
    container dataContainer;
    BinData binData;        
    container blobContainer;
    ContainerClass containerClass;
    str settingsFileName = "c:\\settings.txt";       
    dataContainer = xSysLastValue::getValue(curExt(), curUserId(), UtilElementType::Usersetup, 'Mytable', 'myDesignName');        
    containerClass = new ContainerClass(dataContainer);
    blobContainer = containerClass.toBlob();        
    binData = new BinData();
    binData.setData(blobContainer);        
    binData.saveFile(settingsFileName);
}

是否有另一种方法可以将此值存储在XML文件中?

1 个答案:

答案 0 :(得分:4)

对于大多数打包类,您只需执行容器的con2str即可获得可读内容。如果容器具有嵌套容器,则无效。用户设置容器有!

可以使用递归函数解决:

static void con2xmlTest(Args _args)
{
    container con;

    str con2xml(container c, str ind = '', str sep = '  ')
    {
        int         idx = 0;
        int         len = conLen(c);
        str         tmp;
        str         retStr;
        while (idx < len)
        {
            idx += 1;
            if (typeOf(conPeek(c,idx)) == Types::Container)
                retStr += ind + sep + con2xml(conPeek(c,idx), ind+sep) + '\n';
            else
            {
                tmp = conPeek(c,idx);
                retStr += strFmt(ind + sep + '<%2>%1</%2>\n', tmp, typeOf(conPeek(c,idx)));
            }
        }
        return strFmt('<%2>\n%1</%2>', retStr + ind , Types::Container);
    }

    info(con2xml([1,2.0,["3",today()]]));
    con = xSysLastValue::getValue(curExt(), curUserId(), UtilElementType::Usersetup, 'CustTable', '');
    info(con2xml(con));
}

除人类外,输出是可读的。