NC文档
json数据处理
JSONObject jsonObject = JSONObject.parseObject(json);//json字符串获得json对象
jsonObject.put(key, value);//添加json数据的值
getJSONObject("");//获得json数据的值
Iterator<String> it = jsonObject.keySet().iterator();//获取json数据的键
jsonArray.getJSONObject(i);//jsonArray转JSONObject
JSONObject jsonObject2 = jsonObject.discard("name1");//删除一个字段
SuperVO
//所有VO都要继承他,用于保存数据,其中的数据放在valueIndex变量
private transient Map<String, Object> valueIndex = new HashMap();
//分别用setAttributeValue/getAttributeValue方法去添加获取
public void setAttributeValue(String name, Object value);
public void getAttributeValue(String name, Object value);
//SuperVO就是一个Map结构的对象
//getAttributeNames获取Map的中的name
public String[] getAttributeNames();
注意事项:对于一些特殊数据,如时间,其他对象等等,valueIndex中保存的是NC内部的时间对象,在获取转换成文本时要toString();
如果自动获取要用instanceof判断,先判断String再判断Object
getAttributeValue(string) instanceof String?getAttributeValue(string):(getAttributeValue(string) instanceof Object ? getAttributeValue(string).toString():getAttributeValue(string))
AggVO
//所有AggVO都要继承AbstractBill,他主要由ISuperVO,实现其中SuperVO就实现了ISuperVO
//AggVO存在于主子表关系中,他的作用存放主子表的VO,所以一个AggVO对应一张单据(一个表头和一个或多个表头)
//AggVO中分别用parent接收表头children接收表体,
private ISuperVO[][] children;
private ISuperVO parent;
//获取表体的数据,返回一个ISuperVO[]数组对象
getAllChildrenVO();//要强转
//获取表头的数据,返回一个ISuperVO对象
getParentVO();//这个是AggVO帮我们实习的,本质是调用AbstractBill的getParent()然后强转
关于Aggvo规则前后理解
//以新增为例
//其中有这几行代码
InsertBPTemplate<AggDocumentnoeHVO> bp = new InsertBPTemplate<AggDocumentnoeHVO>(DagPluginPoint.INSERT);
this.addBeforeRule(bp.getAroundProcesser());
this.addAfterRule(bp.getAroundProcesser());
return bp.insert(bills);
//以规则后为例,下面的图是规则前,两个只是调用的方法不同
//在图中可以看出,不管是规则前,还是规则后,都有一个IRule对象的参数,而且规则只接收IRule
IRule<AggDocumentnoeHVO> rule = null;//在addBeforeRule()\addAfterRule()两个方法中都有他,那他是干嘛的
//结合图片
addBeforeRule(bp.getAroundProcesser());//在这个方法中的参数是AroundProcesser对象
//在这个对象当中有两个RuleCollection<Object>变量,分别是before、after,对应规则前和规则后;
//我们只需要调用不同规则就好,调用时要在对应的方法中如this.addBeforeRule()、this.addAfterRule()
//我们写一个我们自己的规则
......
public class Test implements IRule{
@Override
public void process(Object[] bills) {
// TODO 自动生成的方法存根
String bill= bills[0].toString();
System.out.println(bill);
}
}
......
//再添规则
rule=new Test()//这样我们就得到了IRule的子类
processer.addAfterRule(rule);//添加规则,这里的addAfterRule()和上面的this.addAfterRule()完全不同,只是名字相同
//这里的addAfterRule()是AroundProcesser对象的,这个是规则后的
//到这了一个规则就添加好了
//继续深入学习
//其实我们添加的规则都在RuleCollection中的List集合中
//从代码顺序来看是添加规则在调用
//最后是调用用了CommonOperatorTempale对象的operatr()方法
//在operatr()方法中,调用了三个方法分别为processer.before(vos)、operaor.operate(returnVOs)、processer.after(returnVOs)。
//我们只看第一个和第三个
//这两个都是调用AroundProcesser中的方法,这俩个方法的实现几乎是一模一样的,唯一不同的是取不同的RuleCollection实例第一个取before
//
IArapPayableBillPubService
IArapPayableBillPubService ia = NCLocator.getInstance().lookup(IArapPayableBillPubService.class);//获取数据库操作的对象
// IArapPayableBillPubService可以直接操作VO对象,不需要写sql语句