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

在方法外部使用WinMessage调用变量时出现错误求助

问题原因与解决方案

这个报错的核心原因很明确:在PeopleSoft应用包的类定义中,可执行语句(比如WinMessage)只能放在方法内部,不能直接写在方法外部或者类定义的顶层区域。

你现在的代码里,WinMessage(&description);写在了所有方法定义的外面,这违反了PeopleSoft类的语法规则——类的顶层(end-class之后的方法实现区域,或类声明区域)只能包含方法的定义/实现框架,不能直接放置执行逻辑代码。系统提示“需要语句”,就是因为它在这个位置只能识别方法声明、属性声明这类结构,而不是WinMessage这种执行命令。

修正示例

你需要把WinMessage移动到某个方法内部,比如如果想在设置description后立即显示,可以把它放到getDesc方法里:

class CopyFromProg
    method CopyFromProg();
    method getProg(&acad_prog As string);
    method getDesc(&desc As string);
    property string program;
    property string description;
end-class;

method CopyFromProg
end-method;

method getProg /+ &acad_prog as String +/
    &program = &acad_prog;
end-method;

method getDesc /+ &desc as String +/
    &description = &desc;
    // 把WinMessage移到方法内部,设置description后执行
    WinMessage(&description);
end-method;

或者如果你想在类实例化时显示,可以放到构造方法CopyFromProg里(注意要确保&description已经被赋值,否则会显示空内容):

method CopyFromProg
    // 确保description有值后调用WinMessage
    WinMessage(&description);
end-method;

补充说明

PeopleSoft的应用包类遵循典型的面向对象类结构规则:

  • 类声明区域(class到end-class之间)只能定义类的成员:方法签名、属性、构造器声明。
  • 方法实现区域(每个method到end-method之间)才是放置可执行代码的地方,所有逻辑操作都必须封装在方法内部。

这样的设计是为了保证类的结构清晰,所有行为都通过方法触发,符合面向对象的封装原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:20:01