X ++查询String类型字段的SELECT MAX值

时间:2014-10-22 09:02:31

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

我在Dynamics AX 2012表中有一个字段,其中填写了序列号 PRE1 00162 格式,我需要返回下一个序列号,在这种情况下将是 PRE1 00163

在遗留系统上,通过运行

来实现
SELECT MAX(RIGHT(SerialNumber,5))+1 FROM Table_Serials 
WHERE SerialNumber LIKE 'PRE1%' 

针对SQL Server上的表。

如何在X ++中实现相同的结果?到目前为止我的猜测是

select maxof(right(SerialNumber,5))+1
    from tableSerials
    where tableSerials.SerialNumber 
like tableSerials;

但它显示在maxof(right(部分之后立即开始的语法错误。

谢谢!

2 个答案:

答案 0 :(得分:3)

正确的方法应该是创建Number SequenceWhitepaper)。


如果您要继续保留遗留功能,则必须使用computed column创建AOT视图。 字段ViewMethod的示例:

private static server str compSerial()
{
    str srcCol = SysComputedColumn::returnField(tableStr(TableSerialsView), identifierStr(TableSerials_1), fieldStr(TableSerials, SerialNumber));
    str result = strFmt('MAX(RIGHT(%1, 5)) + 1', srcCol);

    return result;
}

然后将计算字段添加到视图的字段中并选择。

答案 1 :(得分:2)

我的一位聪明的同事也提出了这种方法,该方法也有效:

static void CompNextSerial(Args _args)
{
    str value;
    int num;
    str 10 prefix;
    SerialsTable serialsTable;

    prefix = "PRE1 *";

    select firstOnly serialsTable
        order by SerialNumber desc
        where serialsTable.SerialNumber like prefix;

    value = subStr (serialsTable.SerialNumber, strLen(serialsTable.SerialNumber) - 4 , 5);
    num = str2int(value) + 1;
    info (strFmt('%1', num));
}