1、ERP封装数据成XML写入数据库服务器指定文件

    --指定相关文件信息
v_file_path := '/u01/test/app/fs1/EBSapps/appl/cux/12.0.0/forms';
vfilepath := 'TO_SSNC_PATH9';
vfilename := 'voucher.xml';
v_sender := '';
--封装数据
vclobpz_result := '<?xml version=''' || '1.0' || ''' encoding=''' ||
'UTF-8' || '''?><ufinterface account=''' || 'SS' ||
''' billtype=''' || 'vouchergl' ||
''' businessunitcode=''' || 'develop' ||
''' filename=''' || 'voucher.xml' || ''' groupcode=''' || 'SS' ||
''' orgcode=''' || l_orgcode || ''' receiver=''' ||
'0001A5100000000005F3' || ''' sender=''' || '' ||
'''><voucher><voucher_head><pk_voucher></pk_voucher><pk_vouchertype>01</pk_vouchertype><year>' ||
l_year ||
'</year><pk_system>GL</pk_system><voucherkind>0</voucherkind><pk_accountingbook>' ||
l_orgcode ||
'-0001</pk_accountingbook><discardflag>N</discardflag><period>' ||
l_period ||
'</period><no></no><attachment>1</attachment><prepareddate>' ||
to_char(last_day(SYSDATE) - 6,
'YYYY-MM-DD') || '</prepareddate><pk_prepared>' ||
l_prepared ||
'</pk_prepared><pk_casher></pk_casher><signflag>Y</signflag><pk_checked></pk_checked><tallydate></tallydate><pk_manager></pk_manager><memo1></memo1><memo2></memo2><reserve1></reserve1><reserve2>N</reserve2><siscardflag /><pk_org>' ||
l_orgcode || '</pk_org><pk_org_v>' || l_orgcode ||
'</pk_org_v><pk_group>SS</pk_group><details>'; --写入文件
x_msg_data := NULL;
BEGIN
v_create_file := 'A';
--打开文件 R读文本,W写文本 ,A附加文本
vmyfile := utl_file.fopen(vfilepath,
vfilename,
'W',
30000);
v_create_file := 'B';
--写入xml到指定文件
utl_file.put_line(vmyfile,
convert(vclobpz_result,
'ZHS16GBK')); --需要转换格式,否则可能会出现乱码 v_create_file := 'C';
--关闭文本
utl_file.fclose(vmyfile);
EXCEPTION
WHEN OTHERS THEN
IF (v_create_file = 'A') THEN
x_msg_data := '打开XML文件异常:' || SQLERRM;
ELSIF (v_create_file = 'B') THEN
x_msg_data := '写入数据到XML文件异常:' || SQLERRM;
ELSIF (v_create_file = 'C') THEN
x_msg_data := '关闭XML文件异常:' || SQLERRM;
END IF;
END;

传入外围系统,获取返回结果
SELECT cux_nc_ap_voucher_pkg.cux_java_sendfile(v_addr,
v_file_path,
vfilename)
INTO v_return
FROM dual;

2、读取文件,通过java流传给外围系统

create or replace and compile java source named APPS.cux_java_sendfile as
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.traversal.NodeIterator;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*; public class cux_java_sendfile { public static String xzSendFile(String addr,String filepath,String filename)throws IOException
{
System.out.println("Test1");
File vfile= new File(filepath+File.separator+filename);
String conn_flag1=null;
cux_java_sendfile sc = new cux_java_sendfile();
//验证是否已连接NC
System.out.println("Test2");
String conn_flag= sc.getConn_flag(addr); if (conn_flag!="获取连接出错!")
{
System.out.println(filepath+File.separator+filename);
if (vfile.exists()){
//sc.sendMessage(vfile,false,sc.getConn(false,addr));
try{
conn_flag1= sc.receiveResponse(vfile,sc.getConn(addr));
} catch (Exception e) { }
}else{
return "文件不存在";
}
} return conn_flag1;
} private boolean ret = false; String message = ""; String fileMessage = "";
//String returnmsg =""; /**
* 取得NC外部平台连接
*
* @param bcompress
* 是否启用压缩
* @return
* @throws IOException
*/ public HttpURLConnection getConn(String url)
throws IOException {
// 连接NC外部平台地址
try {
URL realURL = new URL(url);
HttpURLConnection connection = (HttpURLConnection) realURL
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-type", "text/xml");
connection.setRequestMethod("POST");
System.out.println("取得连接" + url);
return connection; } catch (MalformedURLException e) {
System.out.println("获取连接出错!");
return null;
}
} public static String getConn_flag(String url)
throws IOException {
// 连接NC外部平台地址
try { URL realURL = new URL(url);
HttpURLConnection connection = (HttpURLConnection) realURL
.openConnection(); connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-type", "text/xml");
return "取得连接" + url; } catch (MalformedURLException e) {
System.out.println("获取连接出错!");
//return NULL;
return "获取连接出错!";
}
} public String receiveResponse(File file,HttpURLConnection connection//,String post,String post1
) throws Exception { try{ String post = "";
System.out.println("==================BEGIN====================");
// 获取URLConnection对象对应的输出流 connection.setRequestProperty("Charset", "UTF-8"); //设置编码为utf-8
PrintWriter printWriter = new PrintWriter(connection.getOutputStream());
// 发送请求参数 BufferedInputStream input = new BufferedInputStream(
new FileInputStream(file));
int length;
int bufflength = 40960 * 1;
byte[] buffer = new byte[bufflength];
while ((length = input.read(buffer)) != -1) {
post = new String(buffer,0,length);
printWriter.write(post);//post的参数 xx=xx&yy=yy //System.out.println(post);
}
// flush输出流的缓冲
printWriter.flush();
//开始获取数据
BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while((len=bis.read(arr))!= -1){
bos.write(arr,0,len);
bos.flush();
} bos.close();
System.out.println("=======bos======="+bos.toString("UTF-8")); //解析NC返回结果集的XML
System.out.println("解析NC返回结果集的XML");
Document doc = null;
String return_msg = "";
String return_Suc = "";
//从xml文档中获取DOM的解析器...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //这里调用DOM工厂...
try { //从DOM工厂中获取DOM解析器...
DocumentBuilder db = dbf.newDocumentBuilder(); InputSource is = new InputSource(); //定义一个xml文档的输入源..
is.setCharacterStream(new StringReader(bos.toString("UTF-8"))); //设置输入源的字符流...
doc = db.parse(is); //指定输入源的内容解析成一个XML文档,并返回一个DOM对象...
System.out.println("doc:= "+ doc.getImplementation());
Element root =doc.getDocumentElement();
return_Suc = root.getAttribute("successful");
System.out.println("resSuc:="+return_Suc); //得到文档名称为sendresult的元素的节点列表
NodeList nList = doc.getElementsByTagName("sendresult");
for(int i = 0; i< nList.getLength() ; i ++){
Element node = (Element)nList.item(i);
return_msg = node.getElementsByTagName("resultdescription").item(0).getFirstChild().getNodeValue();
//System.out.println("return_msg:"+return_msg);
//System.out.println("resultdescription: "+ node.getElementsByTagName("resultdescription").item(0).getFirstChild().getNodeValue());
} } catch (ParserConfigurationException e) {
e.getMessage();
} catch (SAXException e) {
e.getMessage();
} catch (IOException e) {
e.getMessage();
}
System.out.println("==================END===================="); //System.out.println("return_Suc1:"+return_Suc);
// System.out.println("return_msg1:"+return_msg);
return "返回成功与否标记:"+return_Suc+",返回消息:"+return_msg;
}catch (IOException e) {
e.printStackTrace();
}
return "返回成功"; } /**
*
**/
/**
*初始化一个DocumentBuilder
*@return a DocumentBuilder
*@throws ParserConfigurationException
**/
public static DocumentBuilder newDocumentBuilder()
throws ParserConfigurationException{
return newDocumentBuilderFactory().newDocumentBuilder();
}
/**
*初始化一个DocumentBuilderFactory
*@return a DocumentBuilderFactory
**/
public static DocumentBuilderFactory newDocumentBuilderFactory(){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
return dbf;
} }
3、调用java程序 以文件流方式传输至用友NC系统指定地址,返回连接状态
    FUNCTION cux_java_sendfile(p_addr     VARCHAR2,
p_filepath IN VARCHAR2,
p_filename IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'cux_java_sendfile.xzSendFile(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';

ERP通过JAVA流的形式将数据传到外围系统的更多相关文章

  1. java 写 Excel(不生成实体文件,写为流的形式)

    java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...

  2. Java写Excel(不生成实体文件,写为流的形式)

    java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...

  3. Java下载文件(流的形式)

    @RequestMapping("download") @ResponseBody public void download(HttpServletResponse respons ...

  4. Java - 17 Java 流(Stream)、文件(File)和IO

    Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...

  5. java 流 文件 IO

    Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...

  6. 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  7. Java流

    流是一组有顺序的,有起点和终点的字节集合,是对传输数据的总称或抽象.即数据在两设备间的传输称为流,流的本质是传输数据,依据传输数据特性将流抽象为各种类,方便更直观的进行数据操作. 流的分类: 数据类型 ...

  8. java 流输出的一些问题

    一.java流的控制首先要先准备一个文件,例如:File f = new File(d:/lol.txt); 二.可以使用如下指令创建流,用于不同的用途 1.FileInputStream,FileO ...

  9. NPOI生成不规则Excel表格(并以流的形式下载,不将文件保存在服务器上,直接在客户端导出excel)

    //下载NPOI类库并添加引用 using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.SS.Util; public stati ...

随机推荐

  1. java接口的成员变量的修饰符

    前言:c++学的java都忘记了不少 interface(接口)可将其想象为一个"纯"抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不实现方法主体 接 ...

  2. 003-转载-keil-STM32硬件错误HardFault_Handler的处理方法

    (一)参考文献:https://blog.csdn.net/electrocrazy/article/details/78173558 在用Keil对STM32的程序进行仿真时程序有时会跑飞,停止仿真 ...

  3. 如何用okr做好目标规划

    有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...

  4. Windbg命令脚本流程控制语句详解

    在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...

  5. 在nodejs中操作数据库(MongoDB和MySQL为例)

    一.使用nodejs操作MongoDB数据库 ①使用官方的mongodb包来操作 ②使用第三方的mongoose包来操作(比较常用) // 首先必须使MongoDB数据库保持开启状态 // npm下载 ...

  6. 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛

    Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered  ...

  7. PHP strtok() 函数

    我们仅在第一次调用 strtok() 函数时使用了 string 参数.在首次调用后,该函数仅需要 split 参数,这是因为它清楚自己在当前字符串中所在的位置. 如需分割一个新的字符串,请再次调用带 ...

  8. 【POJ2996】Help Me with the Game

    题目传送门 本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下) 题意很简单,就是让我们找出白棋跟黑棋每枚棋子的位置,并要按照一定的顺序输出( K -> Q -> R -> ...

  9. ubuntu之路——day15.2 只用python的numpy在底层检验正则化对模型的影响

    首先感谢这位博主整理的Andrew Ng的deeplearning.ai的相关作业:https://blog.csdn.net/u013733326/article/details/79827273 ...

  10. Cookie和Session原理

    由于HTTP是无状态的协议,客户程序每次都去web页面,都打开到web服务器的单独的连接,并且不维护客户的上下文信息.如果需要维护上下文信息,比如用户登录系统后,每次都能够知道操作的是此登录用户,而不 ...