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

LoadRunner脚本在SAP GUI VA01填充100行条目失败的解决问询

在SAP GUI VA01中批量填充超过界面显示行数的商品条目

问题描述

我需要在SAP GUI的VA01事务码中填充100行商品条目,编写了如下LoadRunner循环脚本:

for(n=0;n<=99;n++)
{
    lr_save_int(n,"lineitem");
    
    sapgui_table_set_text("({lineitem}, 'Article')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "1", 
        "{P_Article}", 
        BEGIN_OPTIONAL, 
//          originalid1, 
//          "AdditionalInfo=sapgui1036", 
        END_OPTIONAL);
    
    sapgui_table_set_text("({lineitem}, 'Order Quantity')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "2", 
        "{P_Qty}", 
        BEGIN_OPTIONAL, 
//          originalid2, 
//          "AdditionalInfo=sapgui1037", 
        END_OPTIONAL);

    sapgui_table_set_text("({lineitem}, 'Un')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "3", 
        "{P_Unit}", 
        BEGIN_OPTIONAL, 
//          originalid3, 
//          "AdditionalInfo=sapgui1038", 
        END_OPTIONAL);

    lr_output_message("xbf order type is %s ",lr_eval_string("{P_Article}"));
    fprintf(file,"xbf order type is %s ",lr_eval_string("{P_Article}"));
        
}

但SAP GUI界面仅显示16行可编辑条目,脚本填充完这16行后就失败,请问如何在到达界面最后一行时继续填充后续条目?

解决方案

核心逻辑

SAP VA01的商品条目表格默认只加载固定数量的可见行,当需要填充超过可见行数的条目时,必须在填充到当前可见最后一行后,触发新增行操作,让界面加载出下一批可编辑行。VA01中新增行的标准操作是点击表格区域的"+"按钮,或使用快捷键F6。

修改后的脚本示例

在循环中加入判断逻辑,当填充到当前可见最后一行时触发新增操作,确保界面始终有可编辑的空行:

// 定义界面可见的最大行索引(16行对应索引0-15)
#define MAX_VISIBLE_ROW_INDEX 15

for(n=0;n<=99;n++)
{
    lr_save_int(n,"lineitem");
    
    // 填充商品信息的代码(保留原逻辑)
    sapgui_table_set_text("({lineitem}, 'Article')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "1", 
        "{P_Article}", 
        BEGIN_OPTIONAL, 
//          originalid1, 
//          "AdditionalInfo=sapgui1036", 
        END_OPTIONAL);
    
    sapgui_table_set_text("({lineitem}, 'Order Quantity')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "2", 
        "{P_Qty}", 
        BEGIN_OPTIONAL, 
//          originalid2, 
//          "AdditionalInfo=sapgui1037", 
        END_OPTIONAL);

    sapgui_table_set_text("({lineitem}, 'Un')", 
        "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
        ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
        "tblSAPMV45ATCTRL_U_ERF_AUFTRAG", 
        "{lineitem}", 
        "3", 
        "{P_Unit}", 
        BEGIN_OPTIONAL, 
//          originalid3, 
//          "AdditionalInfo=sapgui1038", 
        END_OPTIONAL);

    lr_output_message("xbf order type is %s ",lr_eval_string("{P_Article}"));
    fprintf(file,"xbf order type is %s ",lr_eval_string("{P_Article}"));
    
    // 触发新增行的判断逻辑
    if(n == MAX_VISIBLE_ROW_INDEX || (n > MAX_VISIBLE_ROW_INDEX && (n - MAX_VISIBLE_ROW_INDEX) % 16 == 0))
    {
        // 方式1:点击新增按钮(需确保对象ID正确,可通过LoadRunner录制获取)
        sapgui_press_button("Add Item", 
            "usr/tabsTAXI_TABSTRIP_OVERVIEW/tabpT\01/ssubSUBSCREEN_BODY"
            ":SAPMV45A:4400/subSUBSCREEN_TC:SAPMV45A:4900/"
            "btnBTN_ADD", 
            BEGIN_OPTIONAL, 
            END_OPTIONAL);
        
        // 方式2:使用快捷键F6(如果按钮ID难以获取,优先用此方式)
        // sapgui_send_key("F6", BEGIN_OPTIONAL, END_OPTIONAL);
        
        // 等待界面加载新行,可根据实际系统响应速度调整时间
        lr_think_time(1);
    }
}

关键说明

  1. 判断逻辑:当n等于当前可见最后一行的索引(MAX_VISIBLE_ROW_INDEX=15),或者后续每填充16行时,触发新增操作,保证界面始终提供可编辑的空行。
  2. 新增行操作:
    • 若能通过录制获取到新增按钮的对象ID,使用sapgui_press_button更稳定;
    • 若按钮ID难以定位,直接调用快捷键F6兼容性更强。
  3. 等待时间:添加lr_think_time(1)确保界面有足够时间加载新行,避免因界面未就绪导致脚本执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:32:08