Java使用xml-rpc直接调用workflow操作,可用于模拟订单confirm等按钮动作
-
继上一个帖子使用xml rpc访问object对象后,研究了下,xml rpc也可以直接用来调用workflow动作。
原文是gooogle了一个外国的帖子,链接如下:<br / http://selvam4u.wordpress.com/2010/12/09/openerp-xml-rpc-java/ br />国内貌似被墙....
我测试的例子步骤如下,由于是测试,所以中间有查db的步骤。
1. 在系统上面建立一个purchase order,状态为draft
2. 使用下面的sql查找出这个新建的purchase order的id:
select * from "purchase_order" where create_date > current_date -1;
3. 使用下面代码,替换掉里面的id字段,然后直接运行
4. 执行完以后,重新查系统,查刚才新建的po单,可以看到,po的状态为已经confirm了。
有了这个例子,结合前面对象创建的例子,可以做简单的 对象创建->confirm 动作了。<br /> public static void callWorkflow() throws MalformedURLException {<br /><br /> XmlRpcClient xmlrpc = new XmlRpcClient();<br /><br /> XmlRpcClientConfigImpl xmlrpcConfgDb = new XmlRpcClientConfigImpl();<br /> xmlrpcConfgDb.setEnabledForExceptions(true);<br /> xmlrpcConfgDb.setServerURL(new URL(<br /> "http://localhost:8069/xmlrpc/object")); // 服务器链接<br /><br /> xmlrpc.setConfig(xmlrpcConfgDb);<br /><br /> /*<br /> Object r2[] = new Object[5];<br /> r2[0] = "openerp";<br /> r2[1] = 1;<br /> r2[2] = "000000";<br /> r2[3] = "purchase.order";<br /> r2[4] = "purchase_confirm";<br /> r2[5] = 75;<br /> */<br /> <br /> // 以下函数调用直接调用了workflow,其中,purchase.order为对象。<br /> // purchase_confirm为该对象绑定的workflow中的signal,75为该对象的ID,在此例子中即为PO的id值<br /> // 测试发现,执行完该操作以后,PO的状态由draft变为approved.<br /> // 6个变量说明<br /> // 1. "openerp" db名<br /> // 2. 1 登录用户的id,登录后获取用户id,这里直接写1,默认admin账户<br /> // 3. 用户密码<br /> // 4. 对象model 名称<br /> // 5. workflow的signal,就是点按钮的那个signal,具体是叫啥忘了<br /> // 6. 对象id,这里就是po的id<br /> Object[] params = new Object[] { "openerp", 1, "000000", "purchase.order",<br /> "purchase_confirm", 75 };<br /> <br /><br /> Object po_data;<br /><br /> try {<br /><br /> po_data = xmlrpc.execute("exec_workflow", params);<br /><br /> System.out.println("finished");<br /> // System.out.println(o.length);<br /><br /> } catch (Exception e) {<br /> e.printStackTrace();<br /><br /> }<br /> }<br />