Oracle E-Business Suite中的开放接口(二)

日期: 2008-06-17 作者:李忠良 来源:TechTarget中国


  3. 定制数据源文件模板(Data.csv)


  为了让SQL*Loader程序准确上载外部文件中的数据,我们需要将外部文件的数据应与SQL*Loader文件中的字段一一对应。


  源文件数据模板 
    
  4. 开发主机并发程序(ARIMPORT.prog)


    主机并发程序使用操作系统的 Script 程序进行编写。主要目的是用来调用“数据导入程序”。“数据导入程序”的目的是将外部数据源数据(如:csv文档、txt文档)自动导入的接口表(RA_INTERFACE_LINES_ALL)中。


  Oracle中的主机程序
                  图4 Oracle中的主机程序







//主机程序代码
###################################################################################
# Filename : ARIMPORT.prog
###################################################################################
PROGRAM_NAME=`basename $0`
PROGRAM_NAME=`basename $PROGRAM_NAME .prog`
START_TIME=`date +%d-%b-%Y” “%H:%M`
echo $PROGRAM_NAME ” begin …. ” $START_TIME
DATENOW=`date +%Y%m%d`
USER_PASSWD=$1
VAR_USER_ID=$2
VAR_USER_NAME=$3
VAR_REQUEST_ID=$4
OUT_FILE=`echo $APPLCSF/$APPLOUT/o$VAR_REQUEST_ID.out`
LOCAL_PATH=$AR_TOP/data
CTL_FILE_NAME=`echo $LOCAL_PATH/”arcontrol.ctl”`
DATA_FILE_NAME=`echo $LOCAL_PATH/”data.csv”`
CTL_FILE_LOG=`echo $LOCAL_PATH”/”data”$DATENOW”.log”`
#echo $CTL_FILE_NAME
#echo $DATA_FILE_NAME
#echo $CTL_FILE_LOG
##########sqlldr##########
cd $LOCAL_PATH
#$ORACLE_HOME/bin/sqlldr $USER_PASSWD control=$CTL_FILE_NAME log=$CTL_FILE_LOG
$ORACLE_HOME/bin/sqlldr $USER_PASSWD control=arcontrol.ctl log=$CTL_FILE_LOG
cat $CTL_FILE_LOG >> $OUT_FILE
##########update interface data##########
sqlplus -s $USER_PASSWD @$AR_TOP/sql/ARIMPORT_UPD.sql
{
printf(“hello, worldn”);


  5. 开发SQL*Loader程序(ARCONTROL.ctl)
 
    开发数据导入程序的目的是,通过被主机程序调用,从而自动将外部数据(如:txt文件、CSV文件)导入至Oracle AR模块的接口表。






//SQL*Loader程序
LOAD DATA
INFILE ’data.csv’
REPLACE INTO TABLE AR.RA_INTERFACE_LINES_ALL
FIELDS TERMINATED BY ’,’ optionally enclosed by ’”’
(
TRX_NUMBER char(20) “trim(:TRX_NUMBER)”,
TRX_DATE DATE ’YYYY-MM-DD’ ,
CURRENCY_CODE char(15) “trim(:CURRENCY_CODE)”,
CUST_TRX_TYPE_NAME char(20) “trim(:CUST_TRX_TYPE_NAME)”,
GL_DATE DATE ’YYYY-MM-DD’,
ORIG_SYSTEM_BILL_CUSTOMER_REF char(240) “trim(:ORIG_SYSTEM_BILL_CUSTOMER_REF)”,
TERM_NAME char(15) “trim(:TERM_NAME)”,
LINE_NUMBER ,
DESCRIPTION char(240),
QUANTITY ,
UNIT_SELLING_PRICE ,
BATCH_SOURCE_NAME char(50),
SET_OF_BOOKS_ID ,
LINE_TYPE char(20) “trim(:LINE_TYPE)”,
CONVERSION_TYPE char(30) “trim(:CONVERSION_TYPE)”
)



  6. 开发SQL脚本(ARIMPORT_UPD.sql)
 
    为了让用户更方便地使用模板文件,我们在主机程序中,嵌入了一段SQL脚本,此段SQL的脚本目的是,通过用户输入的一些信息,自动从Oracle数据库中找到想对应的信息。比如在模块文件中,用户要输入“客户名称”,而在Oracle系统的接口表中要求填入客户的标示(orig_system_bill_customer_ref)。而对于用户来说,客户标示是透明的,故开发此段程序,以使得用户模板更加友好。   






//SQL脚本
declare
begin
update ra_interface_lines_all iall
set iall.conversion_type = substr(iall.conversion_type,1,9);
commit;
update ra_interface_lines_all iall
set iall.orig_system_bill_customer_ref = (select a.customer_id
from ar_customers_v a
where a.customer_name = iall.orig_system_bill_customer_ref
),
iall.orig_system_bill_address_ref = (select b.address_id
from ar_customers_v a ,ar_addresses_v b
where a.customer_name = iall.orig_system_bill_customer_ref
and a.customer_id = b.customer_id
);
update ra_interface_lines_all t
set t.interface_line_context = ’外部导入’,
t.interface_line_attribute1 = ’INTERFACE’,
t.interface_line_attribute2 = t.trx_number,
t.interface_line_attribute3 = t.line_number,
t.amount = t.quantity * t.unit_selling_price,
t.memo_line_name = t.description,
t.conversion_date = gl_date,
t.org_id = 81;
update ra_interface_lines_all uila
set uila.conversion_type = ’User’,
uila.conversion_date = uila.gl_date,
uila.conversion_rate = 1
where uila.currency_code = ’CNY’;
commit;
exception
when others then
rollback;
end;
/
exit; 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐