ERP通过JAVA流的形式将数据传到外围系统
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流的形式将数据传到外围系统的更多相关文章
- java 写 Excel(不生成实体文件,写为流的形式)
java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...
- Java写Excel(不生成实体文件,写为流的形式)
java 写 Excel(不生成实体文件,写为流的形式) public String exportReportExcel(String mediaCode, List<SimpleMediaRe ...
- Java下载文件(流的形式)
@RequestMapping("download") @ResponseBody public void download(HttpServletResponse respons ...
- Java - 17 Java 流(Stream)、文件(File)和IO
Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型. ...
- java 流 文件 IO
Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类 ...
- 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)
写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...
- Java流
流是一组有顺序的,有起点和终点的字节集合,是对传输数据的总称或抽象.即数据在两设备间的传输称为流,流的本质是传输数据,依据传输数据特性将流抽象为各种类,方便更直观的进行数据操作. 流的分类: 数据类型 ...
- java 流输出的一些问题
一.java流的控制首先要先准备一个文件,例如:File f = new File(d:/lol.txt); 二.可以使用如下指令创建流,用于不同的用途 1.FileInputStream,FileO ...
- NPOI生成不规则Excel表格(并以流的形式下载,不将文件保存在服务器上,直接在客户端导出excel)
//下载NPOI类库并添加引用 using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.SS.Util; public stati ...
随机推荐
- python - django 控制台输出 sql 语句
只需要在 settings.py 文件中加入以下配置即可. LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers ...
- JavaScript开发——文件夹的上传和下载
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...
- 51、Spark Streaming之输入DStream和Receiver详解
输入DStream代表了来自数据源的输入数据流.在之前的wordcount例子中,lines就是一个输入DStream(JavaReceiverInputDStream), 代表了从netcat(nc ...
- outlook 修改视图
- hhhhh臭不要脸//捂脸)多不好意思啊you进步惹
如题↑↑↑ 千万不要相信题目 还是看图说话吧↓↓↓ 我真的蒟蒻啊,,,准确率在70边缘徘徊,卑微☹ 不过还是侥幸地进入了前 30 名! 今天七夕欸,然鹅,,, qq空间里面弥漫着恋爱的酸臭味 香气,‘ ...
- D3.js的v5版本入门教程(第十章)
在这一章我们干点有趣的事——让我们上一章绘制的图表动起来,这样岂不是很有意思 为了让图表动起来,我们还是需要以下新的知识点 .attr(xxx) .transition() .attr(xxx),tr ...
- Artifact tlks: com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: E:\IDEAspace\tlksArtfacts\tlks.war not found for the web module.
传送门:https://www.cnblogs.com/eatkid/p/8064763.html intellij idea tomcat 启动不生成war包 intellij idea tom ...
- torch
1.从数据直接构建tensor x = torch.tensor([5.5,3]) 2.从已有的tensor构建一个tensor.这些方法会重用原来tensor的特征. x = x.new_ones( ...
- 第07组 Beta冲刺(3/5)
队名:摇光 队长:杨明哲 组长博客:求戳 作业博客:求再戳 队长:杨明哲 过去两天完成了哪些任务 文字/口头描述:代码编辑器,目前没什么进展 展示GitHub当日代码/文档签入记录:(组内共用,已询问 ...
- Java-Maven(十一):Maven 项目出现pom.xml错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin
Maven项目出现ERROR: eclipse更新了Maven插件后,让后就出现了以下错误: Description Resource Path Location Type Conflicting l ...