HTTP 调用 SPL

【摘要】
集算器产品中提供了 HTTP 服务,用户可以通过 url 的方式读取 SPL 的结果集
HTTP 调用 SPL

实现思路如下:

imagepng

部署服务

部署服务器操作可分为两步,首先是配置服务器参数,其次是启动服务器。

服务器配置

在集算器安装目录的 esProc\bin 路径下,找到 esprocs.exe 文件,可以直接运行它来启动或配置服务器,运行后,打开窗口如下:

imagepng

在 esprocs.exe 执行时,窗口中会显示加载初始设定的信息,这些设定实际上是由配置文件 raqsoftConfig.xml 决定的。在右侧的菜单栏中点击 Options,可以配置服务器的相关信息,点击后弹出服务器配置窗口如下:

imagepng

在该界面中,可以配置授权文件、主路径、寻址路径、日期时间格式、默认字符编码、日志等级、文件缓存区字节数等信息。

下面我们继续来了解服务器的配置,选择 Http Server ,在右侧的菜单栏中点击 Config,可以打开集算器 HTTP 端口设置窗口如下:

imagepng

在该界面中,可配置服务器的 IP 地址、端口号和最大并行数,服务器设定完成后,点击 OK,此时可以自动设定对应的配置文件 HttpServer.xml,如下:

<?xml version="1.0" encoding="UTF-8"?>

<!--Note: In order to avoid problems while the program is running, the charset of HttpServer.xml must be UTF-8 -->

<Server Version="1" host="127.0.0.1" port="8503" parallelNum="10"/>

运行服务器

服务配置完成后,在 Http Server 窗口点击 Start 即可开始运行服务器,如下:

imagepng

需要停止服务可以点击 Stop,服务器停止后可以点击 Quit 退出。如果点击 Reset,服务将初始化重新启动,清除所有的全局变量以及内存区。

在 Linux 系统中,可以运行 ServerConsole.sh 来启动服务器类,打开的服务器运行窗口和在 Windows 下是相同的。

此外,还可以在执行命令时添加 -h 参数,非图形启动服务器,此时可直接执行命令:

./ServerConsole.sh -h

HTTP 调用

HTTP 调用 SPL,原理上就是通过 url 读取 dfx 文件的结果集,被调用的 dfx 脚本中,结果要求用 return 语句返回,下面来看下具体是怎样实现的:

调用单个 dfx

比如通过 HTTP 服务读取 HSQL 数据库中的员工表,首先需要在 raqsoftConfig.xml 的 < Runtime ></ Runtime > 节点中配置数据源信息:

<DB name="HSQLDB">  <!-- 数据源名称-->

<!-- url连接-->

<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" />

<!--数据库驱动-->

                <property name="driver" value="org.hsqldb.jdbcDriver" />

                <property name="type" value="13" /> <!--数据库类型-->

                <property name="user" value="sa" /> <!-- 用户名称 -->

<property name="password" value="123456"/> <!-- 密码 -->

                <property name="batchSize" value="1000" />

                <property name="autoConnect" value="true" /> <!--是否自动连接-->

                <property name="useSchema" value="false" />

                <property name="addTilde" value="false" />

                <property name="dbCharset" value="UTF-8" />

                <property name="clientCharset" value="UTF-8" />

                <property name="needTransContent" value="false" />

                <property name="needTransSentence" value="false" />

                <property name="caseSentence" value="false" />

            </DB>

dfx 脚本内容如下:



A

1

=connect("HSQLDB")

2

=A1.query("select * from employee")

3

=A1.close()

4

return A2


dfx 文件命名为emp.dfx并保存在主目录下,HTTP 调用时 URL 写法为:

http://127.0.0.1:8503/emp.dfx

其中 127.0.0.1:8503 为前面服务器中配置的 IP 及端口号,后面连接带扩展名的 dfx 名称。

浏览器访问 URL 结果如下:

imagepng

通过浏览器访问 URL 时,返回结果显示为无格式的文本,所以浏览器常用作调试使用。日常业务中,用户可在自己的程序中调用 URL,结果集可自由使用。下面我们以 java 程序为例,访问上面的 URL:

java 代码如下:

URL url = new URL("http://127.0.0.1:8503/emp.dfx");  //传入URL串

         HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

         urlcon.connect();         //获取连接

         InputStream is = urlcon.getInputStream();

BufferedReader buffer = new BufferedReader(new InputStreamReader(is));

StringBuffer bs = new StringBuffer();

String l = null;

while((l=buffer.readLine())!=null){

             bs.append(l).append("\n");

         }

         System.out.println(bs.toString());

结果如下:

imagepng

调用带参数的 dfx

HTTP 还可以调用带有参数的 dfx 文件,比如从数据源中查询 SALES 表,过滤出 SELLERID 为 3 的员工,在 2014 年 11 月 11 号到 2014 年 12 月 12 号期间的所有订单信息。

dfx 脚本内容如下:



A

1

=connect("HSQLDB")

2

=A1.query("select * from SALES  where  SELLERID = ? and  ORDERDATE>? and ORDERDATE<?",arg1,arg2,arg3)

3

=A1.close()

4

return A2


网格参数:

imagepng

dfx 文件命名为 sales.dfx 并保存在主目录下,此时,HTTP 调用时 URL 写法为:

http://127.0.0.1:8503/sales.dfx(3,2014-11-11,2014-12-12)

其中,dfx 后括号中的内容为各个参数所对应的值,多个参数值之间用逗号分隔。

调用多个 dfx

使用 HTTP 调用 dfx 时,如果返回的结果集格式不理想,还可以通过另一个 dfx 文件格式化当前的结果集,此时可同时调用两个 dfx。

该用法中 URL 调用时格式为

http://IP:port/dfx1.dfx(...)dfx2.dfx

其中 dfx1.dfx 被 dfx2.dfx 引用,要求 dfx1 返回结果必须为单结果集,dfx2 中必须有一个参数,且参数值为 dfx1 的返回值。

比如,在 dfx1 中查询本地数据文件 Sales.txt,统计所有的 STATE 字段值:

p1.dfx脚本内容如下:


A

1

$()select * from  D:\Sales.txt

2

=A1.(STATE)

3

return A2


缺省返回由 STATE 字段值组成的序列,但是用户期望的效果是以逗号作为分隔符以字符串的形式返回,此时就可以使用 p2.fx 对 p1.dfx 的结果进行格式处理:

p2.dfx脚本内容如下:


A

1

=arg1.concat@c()

2

return A1


网格参数:

imagepng

HTTP 调用时,URL 写法:

http://127.0.0.1:8503/dfx1.dfx()dfx2.dfx()

SAP 风格

从上面的例子中可以发现,所调用的 dfx 文件皆是保存在主目录下的,如果 dfx 保存在主目录的子目录中,应该怎么调用呢?

集算器中提供了类似 SAP 的 result 风格的用法,首先,在 httpServer.xml 的 sapPath 属性中配置 dfx 相对与主目录的路径,可以是多层目录结构,也可以是空串,空串则表示位于主目录下,多个路径间用逗号隔开,比如:

<?xml version="1.0" encoding="UTF-8"?>

<Server Version="1" host="127.0.0.1" port="8503" parallelNum="10"sapPath="/sf,,/sr/pm"/>

该 xml 中,sapPath 配置了三个相对路径,分别表示 [主目录]/sf、[主目录]、[主目录]/sr/pm。

该风格调用,dfx 无参数时,URL 格式为:

http://IP:port/sapPath/dfxName

dfx 带参数时,URL 格式为:

http://IP:port/sapPath/dfxName/arg1[value1]/arg2[value2],... 

其中,sapPath 表示 httpServer.xml 中 sapPath 属性中设置过的路径;

dfxName 表示 dfx 名称,调用时不带扩展名;

arg1[value1]/arg2[value2],… 表示 dfx 中的参数名称及参数值,要求参数名称必须为纯字母组成的字符串,参数值必须为首字符为数字的字符串,调用时参数名称与参数值拼接成一个字符串使用,多个参数之间用“/”隔开。

示例一:查询本地数据文件,gy.dfx脚本内容如下


A

1

$()select * from Geography.txt

2

return A1


该 dfx 位于 [主目录]/sf 路径下,则 URL 写法如下:
http://127.0.0.1:8503/sf/gy

其中 /sf 表示 dfx 文件相对于主目录的位置,gy 则表示调用的 dfx 为 gy.dfx。

示例二:带参数的 dfx 文件,gypb.dfx脚本内容如下:


A

1

$()select * from Geography.txt where ID>? and Parent=?;id,parent

2

return A1


  网格参数:

imagepng

该 dfx 中用到了两个参数,参数名称分别为 id、parent,dfx 位于 [主目录]/sr/pm 下,调用时 URL 写法如下:

http://127.0.0.1:8503/sr/pm/gypb/id3/parent15

其中,/sr/pm 表示 dfx 相对于主目录的位置,gypb 表示调用的 dfx 为 gypb.dfx,id3/parent15 表示参数 id 的值为 3,参数 parent 的值为 15。

示例三:

当 xml 中的 sapPath 中配置了空串时,可以使用该风格的调用来访问位于主目录下的 dfx,这里依然使用前面的 emp.dfx 为例,则 URL 写法如下:

http://127.0.0.1:8503/emp

对比可以看到,URL 的区别就是这里不需要写 dfx 的扩展名。

IPV6 协议时的用法

服务器中配置的 IP 地址支持 IPV6 协议,使用 IPV6 协议时,要求的 JDK 版本最低为 1.7,HTTP 调用时 URL 写法也略有不同,需要在 IP 地址外加上“[]”。

例如服务器中配置:

imagepng

此时访问 dfx 时 URL 写法为:


http://[fe80::9c9d:a071:3abc:e207]:8503/localData.dfx

需要注意的是,把 IP 地址写入 URL 时,"%“为特殊符号,要用指定字符”%25" 来代替 ,由于 IPV6 地址末尾的 % 及其后内容是非必要的字符,所以也可以直接去掉不写。

以上就是 HTTP 调用 SPL 的全部用法了,想要更深入的学习 SPL 的小伙伴儿还可以去官网上的在线教程中查看。

其他程序调用 SPL 用法详见:
【Java 如何调用 SPL 脚本】
【Java 如何远程调用 SPL 脚本】
【BIRT 调用 SPL 脚本】
【C# 如何调用 SPL 脚本】
【JasperReport 调用 SPL 脚本】

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾