为了帮助同事解放双手、提高工作效率并实现作业内容的自动化,本周稍稍研究了AS400系统的软件操作。
最终实现了以下功能,大大简化了人工作业量。
1.一键登录、退出系统;
2.自动筛选含有客户承认图的产品型号,以便获得对应的商品编码;
3.通过JS号完成对商品编码、产品型号、最终客户名、图纸状态等工厂催图信息的自动提取;
4.Common Search自动连续开图。
实现方式:
第1项涉及多级菜单操作,通过录制宏自动完成;
登录:
Description =
[wait app]
[wait inp inh]
"账号
[tab field]
"密码
[enter]
[wait app]
[wait inp inh]
[enter]
[wait app]
[wait inp inh]
"18
[enter]
[wait app]
[wait inp inh]
"17
[enter]
[wait app]
[wait inp inh]
[enter]
[wait app]
[wait inp inh]
"13
[enter]
退出:
Description =
[wait app]
[wait inp inh]
[pf3]
[wait app]
[wait inp inh]
"90
[enter]
[wait app]
[wait inp inh]
[pf3]
[wait app]
[wait inp inh]
"90
[enter]
第2、3项涉及信息筛选和提取,本打算采用SQL方式,但由于缺乏数据库连接信息与数据表结构信息而放弃,最终通过VBS脚本实现;
JS查询:
[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=
[PCOMM SCRIPT SOURCE]
'功能:通过JS号查询并输出 JS号、商品编码、型号、最终客户名等
'CodeBy: 渤海琴师
'2020.07.21 VBS@AS400
autECLSession.SetConnectionByName(ThisSessionName)
subSub1_
sub subSub1_()
set wshell = CreateObject("WScript.Shell")
path_desktop = wshell.specialfolders("Desktop")
set fs = createobject("scripting.filesystemobject")
set ts = fs.opentextfile(path_desktop&"\JS查询\JS.txt", 1, true)
set td = fs.opentextfile(path_desktop&"\JS查询\Result.txt", 2, true)
do while ts.atendofstream <> true
js_num = ""
product_code = ""
model = ""
end_user = ""
dat = ""
sta = ""
line = ts.readline
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys line, 5, 37
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[enter]"
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
js_num = autECLSession.autECLPS.GetText(2, 16, 11)
product_code = autECLSession.autECLPS.GetText(4, 16, 15)
model = Trim(autECLSession.autECLPS.GetText(4, 32, 40))
dat = Trim(autECLSession.autECLPS.GetText(15, 39, 8))
sta = Trim(autECLSession.autECLPS.GetText(15, 49, 20))
autECLSession.autECLPS.SendKeys "[pf6]"
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[enter]"
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
end_user = autECLSession.autECLPS.GetText(5, 43, 16)
if InStr(end_user, "") > 0 then end_user = Left(end_user, InStr(end_user, "") – 1)
newline = js_num & VbTab & product_code & VbTab & model & VbTab & end_user & VbTab & dat & VbTab & sta
td.writeline newline
autECLSession.autECLPS.SendKeys "[pf12]"
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[pf12]"
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
autECLSession.autECLPS.SendKeys "[pf12]"
loop
td.close
ts.close
end sub
S图查询:
[PCOMM SCRIPT HEADER]
LANGUAGE=VBSCRIPT
DESCRIPTION=查询承认图
[PCOMM SCRIPT SOURCE]
'功能:依次查询标记数字“1”的型号有无S图
'CodeBy: 渤海琴师
'2020.07.21 VBS@AS400
autECLSession.SetConnectionByName(ThisSessionName)
subSub1_
sub subSub1_()
for i = 5 to 20
autECLConnMgr.autECLConnList.Refresh
autECLSession.autECLOIA.WaitForAppAvailable
autECLSession.autECLOIA.WaitForInputReady
if autECLSession.autECLPS.GetText(i, 2, 1) = "1" then
autECLSession.autECLPS.SendKeys "[enter]"
autECLSession.autECLOIA.WaitForInputReady
if (autECLSession.autECLPS.GetText(19, 71, 1) = "S") or (autECLSession.autECLPS.GetText(19, 72, 1) = "S") then
Exit Sub
end if
autECLSession.autECLPS.SendKeys "[pf12]"
else
end if
next
end sub
第4项通过VBS脚本发送模拟按键的方式实现对软件的自动化操作。
set ws = CreateObject("WScript.Shell")
num = InputBox("需要打开的数量:")
if num >=1 then
for i = 1 to num
If ws.AppActivate("Common Search") Then
WScript.Sleep 50
if i = 1 then
ws.SendKeys "{Enter}"
else
ws.SendKeys "{Down}"
WScript.Sleep 50
ws.SendKeys "{Enter}"
end if
end If
WScript.Sleep 500
next
end if
最终效果:
以前耗时40多分钟的人工作业内容,在2分钟之内自动完成。