在 IBM AIX + Oracle EBS 的報表通常會透過 adncnv 轉碼傳送至 RPM (Remote Print Manager)的以解決中文亂碼。參考: Oracle EBS Setup Guide
快速解讀作法
R11.5.x
在 EBS System Administrator responsibility\ Concurrent\ Install\ Printer\ Driver,將 EBS 在 Printer Drivers 註冊的印表中,將 Arguments 填入下列的參數
# 這裡 big5lp 執行檔接受5個傳入參數
big5lp -c -d$PROFILES$.PRINTER -n$PROFILES$.CONC_COPIES -t"$PROFILES$.TITLE" $PROFILES$.FILENAME
Oracle Printer Driver 的 Program method 應指定完整程式路徑;若要使用 shell pipe、adncnv、qprt 等多個命令,wrapper script 是比較穩定且容易記錄錯誤的方式。
若使用 Command method,也可以指定作業系統命令,但必須非常小心 EBS 傳入的檔名、printer name 及 copies 參數,不建議將未驗證參數直接組合成 shell command。
在 OS: AIX 的 AP 層
script location under AP Tier,
# 切換到 applmgr
[prodmgr@ebsap1 ~]$ su - applmgr
# R11.5 在 $AD_TOP/bin
[prodmgr@ebsap1 ~]$ cd $AD_TOP/bin
#查詢執行檔 big5lp 是否有執行權限, 若沒有則 chmod +x
[prodmgr@ebsap1 bin]$ ls -l big5lp
-rwxrwxr-x 1 prodmgr dba 566 Dec 13 2007 big5lp
#執行檔 big5lp 的內容, 應該要承接 EBS 傳來的5個參數
[prodmgr@ebsap1 bin]$ cat big5lp
#!/bin/ksh
## AD Character-set Conversion session
adncnv $5 UTF8 $5 ZHT16BIG5
/usr/bin/lp $1 $2 $3 $4 $5這樣就可以達成中文轉碼解決亂碼的問題
adncnv 語法說明
adncnv 是 Oracle EBS 的 AD File Character Set Converter,用途是將檔案從一個字元集轉成另一個字元集,基本語法為:
adncnv source_file source_charset destination_file destination_charset修改 EBS Printer Driver 後重啟 Concurrent Manager
Oracle 文件特別提醒,修改 Printer Type、Print Style 或 Printer Driver 後,應重新啟動目前正在執行的 Concurrent Manager。依現場標準程序執行:
$ADMIN_SCRIPTS_HOME/adcmctl.sh stop
$ADMIN_SCRIPTS_HOME/adcmctl.sh start若環境使用 adstrtal.sh / adstpall.sh 或集中式管理程序,應依既有 EBS 服務管理程序執行,不要直接混用多套啟停方式。
RPM (Remote Print Manager)的設定
英文時,Queue Type必須選擇:Pass Data Directly to Printer,這表示RPM接收到Unix的指令以後,原原本本的把資料傳到印表機,不作任何處置。

選了Pass Data Directly to Printer 以後需要進Queue Setup 裡面將Translate LF to CR/LF勾選,否則unix送出來的列印資料裡面的換行字元會被printer誤認為換頁指令。

中文報表時必須設定為:Print Text Allow font selection ,Page Setup 因為需要透過 adncnv 轉碼印中文報表,在一般的點陣印表機未必內建中文所以需要RPM負責作中文字形轉譯,調整自行大小,分頁等工作,然後再把處理的結果傳給印表機。
R12.2.x
在 R12.2.x 因為有online patching 的關係, 轉碼執行檔改放在 $FND_TOP/bin 裡。
# 切換到 applmgr
/>su - applmgr
#
$ cd $FND_TOP/bin
$ ls -l utf8win950
-rwxr-xr-x 1 applmgr dba 47 Sep 02 14:00 utf8win950
$ cat utf8win950
adncnv $4 UTF8 $4 ZHT16MSWIN950
lp -c $1 $2 $4
在 $FND_TOP/reports 目錄裡,要有 EPSON*.prt & HP*.prt等的 SRW Driver

Oracle EBS 報表運作架構
Oracle EBS Concurrent Manager 完成報表後,會呼叫作業系統的列印命令或自訂列印程式;Printer Driver 可以使用 Command、Program 或 Subroutine 方法。對需要先執行 adncnv 再送入 AIX queue 的情況,建議使用 Program + wrapper script,不要把複雜的 pipe 直接寫在 Printer Driver 的 Command 欄位中。
Oracle EBS Concurrent Request
│
│ 產生報表檔案
▼
EBS Printer Driver / Wrapper Script
│
│ adncnv:字元集轉換
▼
AIX 本機 Print Queue
│
│ LPD/LPR,TCP 515
▼
RPM Remote Print Manager
│
│ RPM Queue 的轉碼、格式與印表機動作
▼
實體印表機Running Character Mode Oracle Reports Programs

Printer Types, Print Styles, and Printer Drivers

Oracle 建議從包含來源檔案的同一個 $APPL_TOP 環境執行 adncnv。
在 OS: AIX 建立 Remote Print Queue
先確認網路與 LPD
# 在 AIX7.x 或 Linux 上確認名稱解析
$ cat /etc/hosts
192.168.x.x rpm.your_domain.com.tw rpm
#確認 RPM 的 TCP 515 可連線
$ telnet rpm 515
Trying...
Connected to rpm.tekcore.com.tw.
Escape character is '^]'.
用 SMIT 建立 Remote Print Queue
AIX 7.3 建立 print queue的 指令:
smit mkpq
或依 SMIT 選單進入:
SMIT
→ Print Spooling
→ Add a Print Queue選擇 Remote queue / LPD remote printer,填入
Queue name EBS_RPM_A4
Remote server hostname rpm.example.com
Remote queue name EBS_A4如下圖:

IBM AIX 的列印系統使用 /etc/qconfig 管理 queue。IBM 建議透過 SMIT 或 mkque、mkquedev、chque、chquedev 等命令維護,而不是在有列印工作執行時直接修改 /etc/qconfig。IBM AIX 7.3 Printing Guide
建立後確認 queue
# 查看所有的 print queue
/>lsallq
EBS_RPM-A4
EBS_RPM-132
# 查看所有的 print 狀況
/>lpstat -p
Queue Dev Status Job Files User PP % Blks Cp Rnk
------- ----- --------- --- ------------------ ---------- ---- -- ----- --- ---
EBS-1_ @rpm READY
EBS_RPM-A4: Queue EBS_RPM-A4: Enabled, Processing, Not Holding
EBS-2_ @rpm READY
EBS_RPM-132: Queue EBS_RPM-132: Enabled, Processing, Not Holding
# 查看所有的 queue 狀況
/>qchk -A
Queue Dev Status Job Files User PP % Blks Cp Rnk
------- ----- --------- --- ------------------ ---------- ---- -- ----- --- ---
EBS-1_ @rpm READY
EBS_RPM-A4: Queue EBS_RPM-A4: Enabled, Processing, Not Holding
EBS-2_ @rpm READY
EBS_RPM-132: Queue EBS_RPM-132: Enabled, Processing, Not Holding
#查看特定 queue
/>qchk -P EBS_RPM_A4
#查看 queue 設定
/>lsque -q EBS_RPM_A4
/>lsquedev -q EBS_RPM_A4
#查看 /etc/qconfig
/>grep -n '^EBS_RPM_A4:' /etc/qconfig
Queue 啟停與日常維護
啟動 queue、停止接收新工作、查看工作…等指令如下
#啟動 queue
qadm -U EBS_RPM_A4
#停止接收新工作
qadm -D EBS_RPM_A4
#查看工作
qchk -P EBS_RPM_A4
# 查看所有的 queue 狀況
qchk -A送出測試檔
#先建立測試檔:
cat > /tmp/rpm_test.txt <<'EOF'
AIX to RPM test
1234567890
中文測試
EOF
#送出:
qprt -P EBS_RPM_A4 /tmp/rpm_test.txt
#也可使用 AIX LPR:
lpr -P EBS_RPM_A4 /tmp/rpm_test.txt
#若該 remote queue 的 backend 是 AIX rembak,也可以測試:
qprt -P EBS_RPM_A4 -T ascii /tmp/rpm_test.txt取消工作
#先查詢 job number:
qchk -P EBS_RPM_A4
#取消
qcan -P EBS_RPM_A4 -J <job_number>查看 queue daemon
ps -ef | grep qdaemon
lssrc -s qdaemon重新啟動 queue daemon
stopsrc -s qdaemon
startsrc -s qdaemon通常不應在有大量 active jobs 時任意重啟或修改 queue。




