因业务需求要求数据以XML格式导出:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
上面是需要导入DocumentBuilderFactory类;
//获取需要导入选择的数据
Object[] aggs = getModel().getSelectedOperaData();
if(aggvos == null || aggvos.length == 0){
MessageDialog.showHintDlg(editor, "提示", "至少选择一条数据!");
return;
}
List errorList = new ArrayList();//保存上传失败数据号码
//上传成功的数据
Map successInfo = new HashMap();
for(int i = 0 ; i < aggs.length ; i++){
Orderagg = (Order)aggs[i];
String setDef6 = agg.getDef6();
//这里判断是否到出过xml,setDef6 导出标识字段
if(setDef6 != null && setDef6.equals("Y")){
errorList.add(aggvo.getCode());
continue;
}
// 拼接xml字符串
DocumentBuilderFactory fct = DocumentBuilderFactory.newInstance();
DocumentBuilder buil = null;
Document doc = null;
buil = fct.newDocumentBuilder();
doc = buil.newDocument();
Element ps = doc.createElement("ufinterface"); // 根目录
Element bill = doc.createElement("bill"); // 一级目录
Element billhead = doc.createElement("billhead"); // 二级目录
Attr id = doc.createAttribute("id");
Attr billtype = doc.createAttribute("billtype");
Attr groupcode = doc.createAttribute("groupcode");
Attr orgcode = doc.createAttribute("orgcode");
Attr sender = doc.createAttribute("sender");
String url = "";
StringBuffer fileBuffer = new StringBuffer();
if (buil != null) {
doc.appendChild(ps);
ps.appendChild(bill);
ps.setAttributeNode(billtype);
ps.setAttributeNode(sender);
ps.setAttributeNode(orgcode);
ps.setAttributeNode(groupcode);
Text billtype_v = doc.createTextNode("Item");
Text sender_v = doc.createTextNode("TOOL");
Text groupcode_v = doc.createTextNode("0001");
Text orgcode_v = doc.createTextNode("1126060-2");//业务号码
billtype.appendChild(billtype_v);
groupcode.appendChild(groupcode_v);
orgcode.appendChild(orgcode_v);
sender.appendChild(sender_v);
bill.appendChild(billhead);
bill.setAttributeNode(id);
// 流水号
Element ItemID = doc.createElement("ItemID");
Text code_v = doc.createTextNode(equalNull(agg.getCode()));
toXML(billhead, ItemID, code_v);
// 名称
Element ItemName = doc.createElement("ItemName");
Text name_v = doc.createTextNode(equalNull(agg.getName()));
toXML(billhead, ItemName, name_v);
......
//(拼接各种字段toXML,模式一样)
// 获取发送地址,自定义项获取url
url = SysInitQuery.getParaString(equalNull(OrgSettingAccessor.getDefaultOrgUnit()),"IC139");
// 拼装请求参数
String time = ""; // 时间戳
String signature = ""; // MD5加密后的参数
String account = SysInitQuery.getParaString(equalNull(OrgSettingAccessor.getDefaultOrgUnit()), "IC137");//用户名
String password = SysInitQuery.getParaString(equalNull(OrgSettingAccessor.getDefaultOrgUnit()),"IC138");//密码
String clocation2 = "qt";
// 获取系统UNIX时间戳
time = Long.toString(System.currentTimeMillis() / 1000L);
//md5加密
signature = md5.Md5(md5.Md5(password) + time).toLowerCase();
String parameter = "";
parameter = url + "?account=" + account + "&time=" + time+ "&signature=" + signature + "&billtype="+ BILLTYPE;
url = url + "?account=" + account + "&time=" + time + "&signature="+ signature + "&billtype=" + BILLTYPE;
// httpurl 记录请求地址及参数
Element httpURL = doc.createElement("httpURL");
Text httpURL_v = doc.createTextNode(parameter);
toXML(billhead, httpURL, httpURL_v);
XML_VoucherTranslator.writeXMLFormatString(fileBuffer, doc, -2);
String filename = name + ".xml";
String str = fileBuffer.toString();
// 生产XML文件
pi.writeXMLNew(filename, str, pk_org_id);
successInfo.put(agg.getCode(), agg);
}
}
上面是拼接主要步骤,然后获取用户自定义的url,用户名密码等数据,加密后进行连接,将xml导出至客户指定的位置。
/**
* 判断字符串是否为null,如果为null,为其赋值"", 如果字符串不为null,直接返回。
* @date 2018年5月11日11:49:41
* @author zhuaizhuaihenguai
* @param obj
* @return
*/
public static String equalNull(Object data) {
if (data == null) {
return "";
}
return data.toString();
}
上面代码就是判断字段是否为空,空值就返回“”;
if(errorList.size() > 0){
message = message.append("编码:");
for(int i = 0; i < errorList.size(); i++){
message = message.append(errorList.get(i));
if(i + 1 < errorList.size()){
message = message.append(",");
}
}
message = message.append("已经上传,不能再次上传!\n");
}
if(successInfo.size() > 0){
message = message.append("编码:");
}
Iterator it = successInfo.keySet().iterator();
Order agg;
while(it.hasNext()){
agg = successInfo.get((String) it.next());
message = message.append(agg.getCode()+",");
agg.setDef6("Y");
//更新方法
odel.directlyUpdate(agg);//更新上传成功标志
}
String messages = "";
if(successInfo.size() > 0){
messages = message.toString().substring(0, message.toString().length() - 1) + "上传成功!";
}else{
messages = message.toString();
}
//提示
MessageDialog.showHintDlg(editor, "提示", messages);
上面代码是写相关提示,是否上传成功提示给用户。
/**
* 拼接XML字符串
* @param e父节点
* @param e1 子节点
* @param text 子节点内容
* @date 2018年5月11日15:24:13
* @author zhuaizhuaihenguai
*
@return
*/
public static void toXML(Element e, Element e1, Text text) {
e.appendChild(e1);
e1.appendChild(text);
}
这段代码是拼接xml字段,用的比较多就提出来个方法。