如何在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
相关产品推荐
相关产品推荐

