Posted on 2009-02-11 15:51
大大毛 阅读(1289)
评论(1) 编辑 收藏 所属分类:
400
問題
現在有遇到一個需求,是想直接利用TN5250來實現400端資料的下載:
1. 僅通過TN5250來完成,不要使用其他的元件;
2. 匯出資料格式為TXT檔案,應該是要能夠放到局域網路上;
3. 匯出資料的動作需要做成排程方式(例如每天匯出);
4. 需求相當的急。
使用TN5250NF可以直接抓400端資料到PC端,匯出成TXT/XLS等格式的文件。匯出功能實際由TN4002PC來完成,該功能使用起來非常方便。通過簡單設定連線/設定參數即可實現資料的下載。
如果不考慮到需要做成排程方式來自動進行,則完全可以以人工方式來實現1-2。
思考
要做直接利用程式的功能來實現自動化,首先應先弄清楚作業的方式是怎樣,先來看看手工是怎樣下載的。
1. 點選TN5250上的菜單“傳送”-> “從主電腦接收檔案”即可打開功能畫面(圖1):
2. 需要配置參數(圖2):
>> 注意紅色框部分,輸出必須要設為“檔案”,而筆數=0則表示將該檔案中全部資料都DOWN,>0則表示最大下載筆數(如設為20則僅下載20筆資料)。其他部分根據需要自行配置。
>> 檔案名稱處定義需要存放匯出檔案的名稱及路徑,如果需要在網路路徑上匯出文檔則必須先將網絡路徑映射為本地磁盤(通過“我的電腦”上右鍵“連線網路磁碟機”即可將一個網絡路徑映射成本地盤符),然後再使用,否則會提示錯誤。
3. 點選上圖的“開始接收(R)”即可以開始從400下載資料到PC,接收完成後會跳出訊息提示框(圖3):
另外,還可以利用圖2上的“檔案”菜單來實現對參數配置的保存以及載入(Default是存成.tt0檔案)。
通過查看保存配置後生成的快捷方式,可以發現其快捷方式內容實際為(圖4):
>> 紅色部分即為我保存的配置檔--配置檔實際是一個INI文件,可使用記事本打開
因此,使用“TN4002PC.EXE /f=配置檔名稱”這樣的形式即可從命令行實際對此功能的調用(先要將參數都配置好存在配置檔中)。OK,現在剩下就是要將這個命令行能夠被放在“計劃任務”中。
通過手工測試可以發現有一些問題還待解決:
1. 在匯出完成後一定會有訊息框跳出(圖3),這個是相當於MSGBOX的窗口,它會將整個程式阻塞在那裏,如果不將它消掉(回車或空格)就會造成多次處理出錯。
2. 配置參數時無法為匯出的TXT文檔指定一個動態名稱,因為是要自動將匯出資料放在一個固定路徑下,所以每回匯出的文檔名稱都應該有所不同,例如保存成帶日期格式。
解決方法
因為是需要動態生成匯出文檔名以及消掉作業完成後的MSGBOX訊息框,所以是必須要有程序來協助解決,程序使用VBS來實現(先前有想到用BAT,但是無法解決MSGBOX的問題)。
程式的處理方法:
1. 利用VBS來動態生成TTO配置文件,只要每次修改掉保存的文件名稱就好,這樣就可以每次生成的TXT都有所不同。
解析保存配置的TTO檔案,提取PC_FILENAME設定,在文件名後加上處理的日期和時間(路徑/文件類型保持不變),最後再存成一個新的TTO配置檔。
2. 利用VBS來執行CMD命令(命令格式見圖4),完成對匯出功能的調用。
為TN4002PC指定新生成的TTO配置檔,實現功能的調用。
3. 在匯出完成後發送鍵盤指令關掉MSGBOX框。
因為VBS中看似沒法能夠直接獲取TN4002PC的窗口,所以是添加處理--在程式處理過程中每間隔一段時間就去檢查生成的TXT檔案大小是否有變化,如果沒有變化則認定可能已匯出完成,卡在MSGBOX窗口,VBS程式就要激活MSGBOX窗口並發送鍵盤的空格。
4. 在“計劃任務”中設置對VBS程序的調用。
利用計劃任務精靈可以完成對VBS程序的調用,因為我這裏設計是要將配置的TTO文件名做為參數傳給VBS程序。而XP下試過幾次都無法能在計劃任務中直接將參數傳遞過去(2003卻可以),所以就只有多做一只BAT(放置對VBS程式的傳參調用)放在計劃任務中。
BAT批處理程序(藍色即為VBS程序,紅色為保存的TTO配置檔)
start RunVBS.vbs C:\FGPPOLR.tto
VBS程序
VBS程序
Dim
ws,fso
Dim
ttoFile,tmpFile,sTmpfileName,sTxtfileName
Dim
line,sDate
'
當前的日期/時間
sDate
=
Year
(
Now
())
&
Right
(
"
0
"
&
Month
(
Now
()),
2
)
&
Right
(
"
0
"
&
Day
(
Now
()),
2
)
&
Right
(
"
0
"
&
Hour
(
Now
()),
2
)
&
Right
(
"
0
"
&
Minute
(
Now
()),
2
)
&
Right
(
"
0
"
&
Second
(
Now
()),
2
)
Set
ws
=
WScript.CreateObject(
"
WScript.Shell
"
)
Set
fso
=
CreateObject
(
"
Scripting.FileSystemObject
"
)
'
新生成TTO配置檔,放在系統TEMP路徑中
sTmpfileName
=
fso.getspecialfolder(
2
)
&
"
\
"
&
sDate
&
"
.tto
"
If
WScript.Arguments.Count
>
0
Then
Set
ttoFile
=
fso.openTextFile(WScript.Arguments(
0
),
1
,
False
)
Set
tmpFile
=
fso.openTextFile(sTmpfileName,
2
,
True
)
While
Not
ttoFile.AtEndOfStream
line
=
ttoFile.ReadLine()
'
查找到PC_FILENAME參數設定,並在文件名上加入日期/時間
If
InStr
(
1
,line,
"
PC_FILENAME=
"
)
=
1
Then
If
InstrRev
(line,
"
.
"
)
>
0
Then
line
=
Mid
(line,
1
,
InstrRev
(line,
"
.
"
)
-
1
)
&
"
_
"
&
sDate
&
Right
(line,
Len
(line)
-
InstrRev
(line,
"
.
"
)
+
1
)
Else
line
=
line
&
"
_
"
&
sDate
End
If
sTxtfileName
=
Mid
(line,
13
)
End
If
tmpFile.WriteLine(line)
Wend
tmpFile.close
ttoFile.close
If
True
Then
Dim
oExec,lastSize,newSize,blnFlag1
blnFlag1
=
False
lastSize
=
-
2
'
調用TN4002PC來完成匯出操作
Set
oExec
=
ws.exec(
"
C:\TN5250NF\TN4002PC.EXE /f=
"
&
sTmpfileName)
Do
While
oExec.Status
=
0
WScript.Sleep
5000
If
blnFlag1
=
False
Then
If
fso.FileExists(sTxtfileName)
Then
newSize
=
fso.GetFile(sTxtfileName).Size
If
newSize
=
lastSize
Then
blnFlag1
=
True
Else
lastSize
=
newSize
End
If
End
If
Else
'
如果一段時間內匯出檔案大小無變化,則激活窗口並發送空格
ws.AppActivate
"
TN4002PC
"
ws.SendKeys
"
"
End
If
Loop
End
If
End
If
Set
ws
=
Nothing
WScript.quit
排程執行完後(每次都會有FDF--欄位定義和TXT--檔案內容兩個文件生成,多次RUN出文件名會不同):
下載
VBS文件