增强 SAP GUI 脚本
以下步骤描述如何增强 SAP GUI 协议脚本。
![Closed](../../Skins/Default/Stylesheets/Images/transparent.gif)
录制后,您可以在编辑器或步骤导航器中将步骤手动添加到脚本中。除手动添加新函数以外,也可以直接从快照中以互动方式为 SAP GUI Vuser 添加新步骤。使用快捷菜单可以添加与对象相关的步骤。
从快照中添加步骤时,VuGen 使用活动屏幕功能,并确定 SAP GUI 客户端窗口中每个对象的 ID(除非已在 SAPGUI > 常规录制选项中禁用活动屏幕快照)。以下步骤说明了如何为特定对象以互动方式插入步骤。
-
验证当选中“录制选项”的“SAPGUI 常规”节点中的“ActiveScreen snapshots”(默认情况下启用)时,是否录制了脚本。
-
在“快照”窗格中单击。
-
将鼠标移动到要添加函数的对象上方。确保 VuGen 可识别该对象并用框将其围住。
-
右键单击对象,单击插入新步骤,然后从对象可用的步骤列表中选择一个步骤。
该步骤的“属性”对话框将打开,并带有该对象的控件 ID(如适用)。例如,如果添加了“按下按钮”步骤,对于上文所示的正常中心按钮,“属性”框将显示以下 ID:
-
在描述框中输入对象的名称。单击确定。VuGen 将新步骤插入到选定的步骤之后。
注: 可以获取对象的控件 ID,以便将其粘贴到特定位置。要执行此操作,请从快捷菜单中选择复制控件 ID。您可以将它粘贴到“属性”框中,或直接粘贴到脚本视图的代码中。
![](../Resources/_TopNav/Images/_TopNav_mt-back-to-top.png)
![Closed](../../Skins/Default/Stylesheets/Images/transparent.gif)
操作可选或动态窗口或框架时,可以使用验证函数确定该窗口或对象是否可用。可选窗口是 SAP 会话期间不持续打开的窗口。此函数使 Vuser 脚本即使在可选窗口打开或发生异常的情况下,也可以继续运行。
第一个示例检查窗口是否可用。如果窗口可用,Vuser 在继续之前将其关闭。
if (!sapgui_is_object_available("wnd[1]")) sapgui_call_method("{ButtonID}", "press", LAST, AdditionalInfo=info1011"); sapgui_press_button(.....)
下一个示例说明 ME51N 事务中的动态对象。“文档概述”框架是可选的,可通过文档概述开/关按钮打开/关闭。
这些代码检查“文档概述”按钮上的文本。如果按钮上的文本显示“文档概述开”,则单击按钮关闭“文档概述”框架。
if(sapgui_is_object_available("tbar[1]/btn[9]")) { sapgui_get_text("Document overview on/off button", "tbar[1]/btn[9]", "paramButtonText", LAST); if(0 == strcmp("Document overview off", lr_eval_string("{paramButtonText}"))) sapgui_press_button("Document overview off", "tbar[1]/btn[9]", BEGIN_OPTIONAL, "AdditionalInfo=sapgui1013", END_OPTIONAL); }
![](../Resources/_TopNav/Images/_TopNav_mt-back-to-top.png)
![Closed](../../Skins/Default/Stylesheets/Images/transparent.gif)
使用 SAGUI Vuser 时,可以使用 sapgui_get_<xxx> 函数检索 SAP GUI 对象的当前值。可以将此值用作其他业务流程的输入,或将其在显示输出日志中。
下例说明了如何保存部分状态栏消息以便检索订单号。
-
导航到要检查状态栏文本的点,然后选择插入新步骤。选择 sapgui_status_bar_get_type 函数。这将验证 Vuser 是否能够成功从状态栏检索文本。
-
插入检查先前语句是否成功的 if 语句。如果成功,使用 sapgui_status_bar_get_param 保存参数的值。
此 sapgui_status_bar_get_param 函数将订单号保存到用户定义的参数中。在此例中,订单号是状态栏字符串的第二个索引。
sapgui_press_button("Save (Ctrl+S)", "tbar[0]/btn[11]", BEGIN_OPTIONAL, "AdditionalInfo=sapgui1038", END_OPTIONAL); sapgui_status_bar_get_type("Status"); if(0==strcmp(lr_eval_string("{Status}"),"Success")) sapgui_status_bar_get_param("2", " Order_Number ");
测试执行期间,执行日志将表明值和参数名称:
Action.c(240): 已按下按钮“保存(Ctrl+S)” Action.c(248): 状态栏的类型为“成功” Action.c(251): 状态栏中的参数 2 的值为“33232”
![Closed](../../Skins/Default/Stylesheets/Images/transparent.gif)
创建使用日期的日志时,您的脚本可能无法正常运行。例如,如果您在 6 月 2 日录制脚本,并在 6 月 3 日回放脚本,那么日期字段将不正确。因此,在文本执行期间,需要将日期保存到参数中,并将存储的值用作其他日期字段的输入。要在脚本执行期间保存当前日期或时间,请使用 lr_save_datetime 函数。在需要日期信息的函数之前插入此函数。请注意,日期的格式特定于您的语言环境。使用 lr_save_datetime 函数中的相关格式。例如,对于 month.day.year,指定“%m.%d.%Y
”。
在下例中,lr_save_datetime 保存当前日期。sapgui_set_text 函数使用此值将交货日期设置为两天以后。
lr_save_datetime("%d.%m.%Y", DATE_NOW + (2 * ONE_DAY), "paramDateTodayPlus2");
sapgui_set_text("Req. deliv.date", "{paramDateTodayPlus2}",
"usr/ctxtRV45A-KETDAT", BEGIN_OPTIONAL, "AdditionalInfo=sapgui1025", END_OPTIONAL);