如何解决为什么 X++ 编译失败,因为缺少所谓的可选参数取决于我最后保存的类?
我有两个班级:
[DataContractAttribute,SysOperationContractProcessingAttribute(classstr(CustBalanceUIBuilder)),SysOperationGroupAttribute('Date',"@ApplicationPlatform:SingleSpace",'1')]
public class CustBalanceDataContract implements SysOperationValidatable
{
NoYesId allowModifyDate;
TransDate transDate;
str packedQuery;
[DataMemberAttribute('DateTransactionDate'),SysOperationLabelAttribute(literalStr("@SYS11284")),SysOperationGroupMemberAttribute('Date'),SysOperationdisplayOrderAttribute('1')]
public TransDate parmTransDate(TransDate _transDate = transDate)
{
transDate = _transDate;
return transDate;
}
[DataMemberAttribute('DateControl'),SysOperationLabelAttribute("Enable date control"),SysOperationdisplayOrderAttribute('0')]
public NoYesId parmAllowModifyDate(NoYesId _allowModifyDate = allowModifyDate)
{
allowModifyDate = _allowModifyDate;
return allowModifyDate;
}
public boolean validate()
{
boolean ret = true;
if(!transDate && allowModifyDate)
{
ret = checkFailed('Transaction date cannot be empty');
}
return ret;
}
[DataMemberAttribute,aifQueryTypeAttribute('_packedQuery',querystr(CustTableSRS))]
public str parmQuery(str _packedQuery = packedQuery)
{
packedQuery = _packedQuery;
return packedQuery;
}
public Query getQuery()
{
return new Query(SysOperationHelper::base64Decode(packedQuery));
}
public void setQuery(Query _query)
{
packedQuery =SysOperationHelper::base64Encode(_query.pack());
}
}
和
public class CustBalanceService
{
public void processData(CustBalanceDataContract _custBalanceDataContract)
{
QueryRun queryRun = new queryRun(_custBalanceDataContract.getQuery());
while(queryRun.next())
{
CustTable custTable = queryRun.get(tableNum(custTable));
TransDate transDate = _custBalanceDataContract.parmTransDate();
Amount balance = (transDate)
? custTable.balanceMST(dateNull(),transDate)
: custTable.balanceMST();
info(strFmt('%1 - %2',custTable.AccountNum,balance));
}
}
}
当它成功编译时,它的行为符合预期。
但是,如果我保存 CustBalanceDataContract
,解决方案会重新编译,然后告诉我 CustBalanceService
中存在错误,因为 _custBalanceDataContract.parmTransDate();
缺少参数 1,您可以从签名 { {1}} 应该是一个可选参数。
但是如果我什么都不做并再次保存 public TransDate parmTransDate(TransDate _transDate = transDate)
,编译就会如预期的那样。
这是编译器中的错误吗?这是一个已知问题吗?有没有办法解决这个问题? 代码是否真的有问题,即使在成功编译和执行后也可能导致失败?
解决方法
我可以重现这个问题。
看来您有在x++ 中发现那些小特质的诀窍。要回答您的问题,是的,这可能是编译器中的问题。正如我在对您的其他问题之一的评论中所说的那样,x++ 从它不属于 .NET 语言家族的那一刻起就有了一些遗留的包袱。一般来说,我认为在保存单个对象甚至整个项目/解决方案的编译过程中进行编译更佳。根据我的经验,唯一能够可靠运行并产生有用结果的编译是完整包/模型的编译(在 Visual Studio 中,它是由 Dynamics 365 > 构建模型...菜单调用的)。
我认为您描述的问题不是已知问题。至少我不知道它,我不知道修复它。不,我不认为代码有问题。如果它通过“Build models...”编译成功编译,应该没问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。