Axapta 背景色行
我在表单的数据源上创建了一个display方法来检查某个字段是否匹配,如果有两个相同的值,那么表单中的特定行应该有一个背景色 下面代码的问题是表单中的所有行都被赋予了背景色,如果只有一行记录匹配也是如此 我做错了什么Axapta 背景色行,axapta,dynamics-ax-2012,x++,Axapta,Dynamics Ax 2012,X++,我在表单的数据源上创建了一个display方法来检查某个字段是否匹配,如果有两个相同的值,那么表单中的特定行应该有一个背景色 下面代码的问题是表单中的所有行都被赋予了背景色,如果只有一行记录匹配也是如此 我做错了什么 public void displayOption(Common _record, FormRowDisplayOption _options) { SalesLine salesLineLocal; ; salesLin
public void displayOption(Common _record, FormRowDisplayOption _options)
{
SalesLine salesLineLocal;
;
salesLineLocal = _record;
while select salesLineLocal
where salesLineLocal.SerialId == salesLine.SerialId
if(salesLineLocal.RecId != SalesLine.RecId)
{
_options.backColor(Winapi::RGB2int(251,181,251));
}
}
按以下方式修改您的方法,这将正常工作:
public void displayOption(Common _record, FormRowDisplayOption _options)
{
SalesLine salesLineCurrent;
SalesLine salesLineLocal;
;
salesLineCurrent = _record;
select firstOnly RecId from salesLineLocal
where salesLineLocal.SerialId == salesLineCurrent.SerialId
&& salesLineLocal.RecId != salesLineCurrent.RecId;
if (salesLineLocal.RecId)
{
_options.backColor(Winapi::RGB2int(251,181,251));
}
super(_record, _options);
}
但是,如果您想改进它,您可以在表级别移动验证逻辑。在SalesLine
表创建方法中
public boolean hasDupplicate()
{
SalesLine salesLine;
;
select firstOnly RecId from salesLine
where salesLine.SerialId == this.SerialId
&& salesLine.RecId != this.RecId;
return salesLine.RecId != 0
}
然后您的displayOption
方法如下所示
public void displayOption(Common _record, FormRowDisplayOption _options)
{
SalesLine salesLineLocal;
;
salesLineLocal = _record;
if (salesLineLocal.hasDupplicate())
{
_options.backColor(Winapi::RGB2int(251,181,251));
}
super(_record, _options);
}
按以下方式修改您的方法,这将正常工作:
public void displayOption(Common _record, FormRowDisplayOption _options)
{
SalesLine salesLineCurrent;
SalesLine salesLineLocal;
;
salesLineCurrent = _record;
select firstOnly RecId from salesLineLocal
where salesLineLocal.SerialId == salesLineCurrent.SerialId
&& salesLineLocal.RecId != salesLineCurrent.RecId;
if (salesLineLocal.RecId)
{
_options.backColor(Winapi::RGB2int(251,181,251));
}
super(_record, _options);
}
但是,如果您想改进它,您可以在表级别移动验证逻辑。在SalesLine
表创建方法中
public boolean hasDupplicate()
{
SalesLine salesLine;
;
select firstOnly RecId from salesLine
where salesLine.SerialId == this.SerialId
&& salesLine.RecId != this.RecId;
return salesLine.RecId != 0
}
然后您的displayOption
方法如下所示
public void displayOption(Common _record, FormRowDisplayOption _options)
{
SalesLine salesLineLocal;
;
salesLineLocal = _record;
if (salesLineLocal.hasDupplicate())
{
_options.backColor(Winapi::RGB2int(251,181,251));
}
super(_record, _options);
}
谢谢你清晰的回答,阿利雅克桑德!它工作完美!我只将select FIRSTRONLY RecId更改为select FIRSTRONLY SerialId,因此它不选择空的序列id行。再次感谢。谢谢你清晰的回答,阿利亚克桑德!它工作完美!我只将select FIRSTRONLY RecId更改为select FIRSTRONLY SerialId,因此它不选择空的序列id行。再次感谢。