我在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(
部分之后立即开始的语法错误。
谢谢!
答案 0 :(得分:3)
正确的方法应该是创建Number Sequence(Whitepaper)。
如果您要继续保留遗留功能,则必须使用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));
}