SAP GUI VBScript以剪切&;在数据更改的情况下粘贴块
为了避免运行时错误,我需要在运行(SE16 | AGR_1251)查询时使用VBScript从SAP表AGR_1251中分块读取。我收到这个错误TSV_TNEW_PAGE_ALLOC_失败-没有更多的存储空间可用于扩展内部表 作为一种解决方法,我们一次手动按角色从用户复制750个角色,在以某个字符结尾的角色中添加“*”,然后将其粘贴回多选对话框,以获得AGR_1251提取结果 我不知道如何在vbscript中执行此操作。如何以编程方式将此数据分块?理想情况下,我也会进行重复数据消除,但这不是必需的 代码必须在vbscript和javascript上运行,因此我不能使用excel或其他windows工具,如wscript。到目前为止,我的最佳想法是滚动浏览角色并将其复制到文件中,将其读回阵列中,并在读取时进行重复数据消除,然后对其进行更改,然后在列表中循环以丢弃结果 这远远超过了我几乎不存在的vbscript技能。我不可能是唯一一个有这个问题的人。有人能给我指一下这样做的示例代码吗SAP GUI VBScript以剪切&;在数据更改的情况下粘贴块,vbscript,sap-gui,sap-basis,Vbscript,Sap Gui,Sap Basis,为了避免运行时错误,我需要在运行(SE16 | AGR_1251)查询时使用VBScript从SAP表AGR_1251中分块读取。我收到这个错误TSV_TNEW_PAGE_ALLOC_失败-没有更多的存储空间可用于扩展内部表 作为一种解决方法,我们一次手动按角色从用户复制750个角色,在以某个字符结尾的角色中添加“*”,然后将其粘贴回多选对话框,以获得AGR_1251提取结果 我不知道如何在vbscript中执行此操作。如何以编程方式将此数据分块?理想情况下,我也会进行重复数据消除,但这不是必需
我也愿意接受关于更好方法的建议。至少可以说,我的解决方案很糟糕。好的,这段代码中有很多不需要的变量,但它可以工作
Sub Save_AGR_1251s(Tcodes_array,Chunk_size)
Go_AGR_1251
writelog("Processing " & ubound(Tcodes_array) & " Tcodes in AGR_1251...")
k = 0
s = Chunk_size
max = ubound(Tcodes_array)
part = 0
roles_processed = 0
For i = 0 To max Step s
Go_AGR_1251
session.findById("wnd[0]/usr/txtMAX_SEL").text = ""
session.findById("wnd[0]/usr/txtMAX_SEL").setFocus
session.findById("wnd[0]/usr/txtMAX_SEL").caretPosition = 11
session.findById("wnd[0]/usr/btn%_I1_%_APP_%-VALU_PUSH").press
k = i + s
counter = 0
part = part + 1
If k > max Then k = max End If
For j = i To k-1
' writelog("Save_AGR_1251s Processing Tcode: " & Tcodes_array(j))
If (Tcodes_array(j) <> "STMS" or Tcodes_array(j) <> "SCC4") Then
'NOTE: The slow insert is used on XXXX Prod as a work around to odd UI behavior - change with caution - But SLOW!!
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").setFocus
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").text = Tcodes_array(j)
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,7]").caretPosition = 1
'VKey 13 = Shift-F1 (insert new row)
session.findById("wnd[1]").sendVKey 13
If Debug_flag = True Then
writelog("i=" & i & " j=" & j & " k=" & k & " s=" & s &" max=" & max &" counter= " & counter)
writelog("part =" & part & " roles= " & roles & "roles_processed="& roles_processed & " Tcodes_array= " & Tcodes_array(j))
End If ' Debug_flag
counter = counter + 1
roles_processed = roles_processed + 1
End If ' Tcodes_array
Next 'for j to k
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").setFocus
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1,1]").caretPosition = 13
session.findById("wnd[1]/tbar[0]/btn[8]").press
session.findById("wnd[0]").sendVKey 8
session.findById("wnd[0]").sendVKey 45
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").select
session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[1,0]").setFocus
session.findById("wnd[1]/tbar[0]/btn[0]").press
session.findById("wnd[1]/usr/ctxtDY_PATH").text = dir
file_name = AGR_1251_filename & "_Part_" & part & c_dash & postfix & Datafile_ext
session.findById("wnd[1]/usr/ctxtDY_FILENAME").text = file_name
writelog("Saving file: " & dir & file_name)
session.findById("wnd[1]/usr/ctxtDY_FILE_ENCODING").text = File_encoding
session.findById("wnd[1]/usr/ctxtDY_PATH").setFocus
session.findById("wnd[1]/usr/ctxtDY_PATH").caretPosition = 16
session.findById("wnd[1]").sendVKey 11
Go_Home
Next ' For i
End Sub
我不认为你会找到一些固定的代码来做这件事。VBScript中的SAP脚本通常非常特定于您正在运行的任何程序。这感觉像是一个问题,可以通过启用RFC的ABAP例程、ABAP将数据写入文件系统以供使用,或者通过编写SOAP服务来获取这些数据来更好地解决。此外,我无法想象在javascript中您将如何做到这一点。至少使用vbscript,您可以连接到计算机上的
SAPFEWSELib
库。我真的认为您需要一个SAP开发人员来帮助开发RESTAPI,以获得您所需要的一切。
for i = 1 to 100
session.findById("wnd[1]/usr/tabsTAB_STRIP/tabpSIVA/ssubSCREEN_HEADER:SAPLALDB:3010/tblSAPLALDBSINGLE/ctxtRSCSEL_255-SLOW_I[1," & 7 & "]").text = "Test " & i
next 'for i