QQ:970097556
扬鞭策马自奋蹄!

初探AS400作业自动化

为了帮助同事解放双手、提高工作效率并实现作业内容的自动化,本周稍稍研究了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分钟之内自动完成。

赞(5) 赞助
未经允许不得转载:渤海琴师 » 初探AS400作业自动化

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小额赞助琴师,让本站走得更远!

支付宝扫一扫

微信扫一扫