Dorado 5 : 1.3.4.RPCCommand(RPC请求命令) (RF2)

简述

RPCCommand是dorado中专门用于客户端向视图模型实现类发出命令请求的轻量级命令,它与UpdateCommand的最大不同是它发送请求的时候并不会上传dataset信息,只将自身的parameters()信息上传到视图模型的实现类。
详细说明参考UpdateCommand

使用

RPCCommand调用之前,我们可以在客户端设定其中的parameters参数集合,传递必要的信息到服务器端,并在服务调用结束之后我们可以通过命令对象的outParameters得到服务器传回的值。
查看一段客户端的调用代码:

command.parameters().setValue("num1", editorNum4.value);//传入editorNum4编辑框的值
command.parameters().setValue("num2", editorNum5.value);//传入editorNum5编辑框的值
if (command.execute()){//调用服务器的远程服务,作运算
editorNum6.value = command.outParameters().getValue("num3");//通过outParameters取得服务器端的运算结果
}

Command通过method指定要调用的服务器端的方法,如commandDivide的定义如下:

<Control id="commandDivide" type="RPCCommand" method="divide" async="true"/>

该处指定调用视图模型实现类的divide方法。视图模型的实现类中的divide方法定义如下:

public void divide(ParameterSet parameters, ParameterSet outParameters)
throws Exception {
float num1 = parameters.getFloat("num1");//通过parameters获得客户端上传的参数值 float num2 = parameters.getFloat("num2");//通过parameters获得客户端上传的参数值 if (num2 == 0) { throw new IllegalArgumentException("除数不能为零!"); } float num3 = num1 / num2;
outParameters.setFloat("num3", num3);// //通过outParameters返回运算结果到客户端 outParameters.setString("text", "除数不能为零!");
}

视图模型中divide方法的设计需要注意一定要指明作用域为public,并且参数必须包含入参集合parameters以及出参集合outParameters

常用技巧

参考UpdateCommand.

动态编程

在服务器段动态生成RPCCommand

protected void initControls() throws Exception {
super.initControls();//系统默认函数,注意保留
RPCCommand cmdRpc = (RPCCommand)createControl("RPCCommand", " cmdRpc");
cmdRpc.setAsync(true);
cmdRpc.setMethod("raiseSalary");
}

使用视图模型实现类提供的createControl方法创建RPCCommand对象,注意第一个参数用以指定组件的类型,第二个参数指定新建对象的id.

在服务器段获得View(视图模型)中定义的RPCCommand,并动态它的属性

protected void initControls() throws Exception {
super.initControls();//系统默认函数,注意保留
RPCCommand cmdRpc = (RPCCommand)getControl("cmdUpdate");
cmdRpc.setAsync(true);
cmdRpc.setMethod("raiseSalary");
}

在上面的代码中可以看到通过实现类提供的getControl函数获得我们需要的组件对象,所需要的就是给它一个RPCCommand对象的id,注意开发时我们建议您直接在View的设计中添加一个空RPCCommand组件,这样我们就可以在initControls方法中通过getControl方法获得这个空的RPCCommand对象,并利用该对象提供的API进行各种设定和初始化的工作,如RPCCommand的setAsync(), setMethod()方法。

主要属性说明

参考UpdateCommand的属性说明

主要事件说明

参考UpdateCommand的事件说明