利用JBPortal做数据同步时,需要保证双方数据库表名(可不一致)、字段名、字段长度、字段类型一致,并且数据接收方不能有Nvarchar、Nvarchar2类型。
客户端代码示例:
HttpPortalClient client = new HttpPortalClient();
String service = "XXX"; // service 是交易号
String url = PORTAL_URL + "/CALL-" + service; // PORTAL_URL是portal的地址
AppRequest req = new AppRequest();
req.setHeader("TranCode", service)
// 需要在 portal_config.xml 中配置 <channel credential="000000" bankid="00101" operid="00101A01" password="000000">p2p_web</channel>
req.setHeader("channel", "p2p_web");
req.setHeader("credential", "000000");
SingleResult sr_cmuser = // cmuser表中的一条记录
String tableName = "cmuser";
for(Object k : sr_cmuser.keySet()) {
String s = (String) k; // 字段名
String v = sr_cmuser.getString(s); // 字段值
req.setField(tableName + "." + s, v); // 表名.字段名 -> 字段值
}
// 同样的,把其他表的字段放入 req
AppResponse resp = client.invokeService(url, req, null);
// 检查是否 ServiceError
if (resp instanceof ServiceError) {
ServiceError e = (ServiceError) resp;
String code = e.getCode();
String messsage = e.getMessage();
}
服务端代码示例:
Map records = new HashMap(); // 所有的记录,key 是 表名, value 是一个map(字段名 -> 字段值)
for(Map.Entry entry : request.entrySet()) {
String k = (String) entry.getKey();
String v = (String) entry.getValue();
String i = k.indexOf(".");
if (i > 0) {
String tableName = k.substring(0, i);
String fieldName = k.substring(i);
UnikMap m = (UnikMap) records.get(tableName);
if (m == null) {
m = new UnikMap();
records.put(tableName, m);
}
m.put(fieldName, v);
}
}
// 遍历record,写入数据库
进阶同步方法
客户端代码示例
SingleResult sr = querySingle(getTpl(tplName), uMap);
if (sr != null) {
for (Object k : sr.keySet()) {
String s = (String) k; // 字段名
String v = sr.getString(s); // 字段值
req.setField(tableName + "." + s, v); // 表名.字段名 -> 字段值
}
}
服务端代码示例
UnikMap uMap = new UnikMap();
String loanid = request.getField("loanid");
uMap.put("loanid", loanid);
uMap.put("tableName", "dbAppbillBook");
executeProcedure(getTpl("delTabById"), uMap);
Map records = new HashMap(); // 所有的记录,key 是 表名, value 是一个map(字段名 -> 字段值)
for(Object obj : request.entrySet()) {
Map.Entry entry= (Map.Entry)obj;
String k = (String) entry.getKey();
String v = (String) entry.getValue();
int i = k.indexOf(".");
int j = k.lastIndexOf(".");
if (i > 0 && j > 0) {
String tableName = k.substring(0, i);
String rowNo = k.substring(i+1, j);
String fieldName = k.substring(j+1);
UnikMap rows = (UnikMap) records.get(tableName);
if (rows == null) {
rows = new UnikMap();
records.put(tableName, rows);
}
UnikMap row = (UnikMap) rows.get(rowNo);
if (row == null) {
row = new UnikMap();
rows.put(rowNo, row);
}
row.put(fieldName, v);
}
}
// 遍历record,写入数据库
for (Object obj : records.keySet()) {
UnikMap rows = (UnikMap) records.get(obj);
int count = rows.size();
for(int i = 0; i < count; i++) {
UnikMap row = (UnikMap) rows.get(String.valueOf(i));
performAction(INSERT, obj.toString(), row);
}
}