跟踪代码后得知,是类PBARuleExpressionActionValue的methodName出现了问题
str methodname()
{
return ( this.parmnameRecId() ? enum2str(PBARuleValueRelation) : '')+
PBARuleExpressionActionValue::methodnameParm(PBAVar,PBARuleArrayIdx,PBARuleActionType) +
(this.parmnameRecId() ? PBARuleChecker::methodname(this.parmnameRecId()) : '');
}
我们知道enum2str的结果是标签的内容,如果在中文环境下,该函数的返回结果为中文,这样该方法执行后得到函数名类似于{
return ( this.parmnameRecId() ? enum2str(PBARuleValueRelation) : '')+
PBARuleExpressionActionValue::methodnameParm(PBAVar,PBARuleArrayIdx,PBARuleActionType) +
(this.parmnameRecId() ? PBARuleChecker::methodname(this.parmnameRecId()) : '');
}
"公式Table_0_false5637144582",由于在X++中函数名中不能出现汉字,因为汉字并不是合法的标识符的组成元素,于是就出现了不能在脚本中使用此符号的错误。
将该函数更改为如下代码即可:
str methodname()
{
SysDictEnum sysDictEnum = new SysDictEnum(EnumNum(PBARuleValueRelation));
return ( this.parmnameRecId() ? sysDictEnum.value2Symbol(PBARuleValueRelation) : '')+
PBARuleExpressionActionValue::methodnameParm(PBAVar,PBARuleArrayIdx,PBARuleActionType) +
(this.parmnameRecId() ? PBARuleChecker::methodname(this.parmnameRecId()) : '');
}
既然中文不能作为标识符,又用Enum2Str的返回结果当成函数名的一部分,不报错才怪。{
SysDictEnum sysDictEnum = new SysDictEnum(EnumNum(PBARuleValueRelation));
return ( this.parmnameRecId() ? sysDictEnum.value2Symbol(PBARuleValueRelation) : '')+
PBARuleExpressionActionValue::methodnameParm(PBAVar,PBARuleArrayIdx,PBARuleActionType) +
(this.parmnameRecId() ? PBARuleChecker::methodname(this.parmnameRecId()) : '');
}