You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Progress Procedure/.W文件中定义可选输入参数以兼容旧代码?

问题

我此前调研过相关内容,但结果都是几年前的。想请教是否可以在调用Procedure或.W文件时定义可选输入参数?我现有一个通过SMTP发送邮件的外部Procedure,包含多个输入参数(如主题、收件人等),现在需要新增一个用于添加邮件附件的输入参数。为避免修改并编译旧代码,能否将该新参数设为可选,未传入值时程序将其视为空值?

原参数定义代码:

DEFINE INPUT PARAMETER p_tipo_alerta AS CHAR.
DEFINE INPUT PARAMETER p_grupo_email AS CHAR.
DEFINE INPUT PARAMETER p_obs         AS CHAR.
DEFINE INPUT PARAMETER p_site        AS CHAR.
DEFINE INPUT PARAMETER p_CodeRequest AS CHAR.
DEFINE INPUT PARAMETER p_DescRequest AS CHAR.

// New-Optional
DEFINE INPUT PARAMETER p_AttachPath  AS CHAR.
回答

完全可以实现你的需求,在Progress OpenEdge中,只需给新增参数加上OPTIONAL关键字,还能通过DEFAULT指定未传参时的默认值(比如空字符串),这样旧代码无需修改即可正常调用,未传入该参数时程序会自动使用默认值。

具体修改方式

将新增的参数定义修改为:

DEFINE INPUT PARAMETER OPTIONAL p_AttachPath AS CHAR DEFAULT "".

关键注意事项

  • 可选参数必须放在参数列表的最后:旧代码调用时按位置传递参数,若把可选参数插在现有参数中间,旧调用会把原本给后续参数的值错误传给新增参数,导致逻辑出错。放在最后,旧调用不传该参数就不会影响原有参数的传递逻辑。
  • DEFAULT关键字可选:若不指定,未传参时该参数会被初始化为对应数据类型的默认值(CHAR类型默认是空字符串),但显式指定能让代码逻辑更清晰。

修改完成后,旧代码无需任何改动,新代码可根据需求选择是否传入p_AttachPath参数,完全满足你的要求。

内容的提问来源于stack exchange,提问作者Raphael Frei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:50:39