想通过Ajax调用调用Progress 4GL 91.D程序

时间:2014-01-28 13:54:06

标签: progress-4gl

我想为我的Phonegap Android应用程序创建Web服务,这将进一步调用进展4GL 91.D程序。

有没有人知道如何为此创建Web服务。

2 个答案:

答案 0 :(得分:0)

那将是一场斗争。您可以创建一个侦听套接字的服务器,但您必须自己处理所有内容!

Look at this example.

但是,您可能最好用支持更好的语言编写Web服务,然后找到另一种从数据库中获取数据的方法。如果你真的遇到了一个10岁以上的版本,你真的应该考虑迁移到别的东西。

答案 1 :(得分:0)

您无需升级所有内容 - 您只需获取版本10客户端的许可证即可。 V10客户端可以连接到v9数据库(规则是客户端最多可以达到一个主要版本),因此您可以使用它来构建SOAP服务。或者你可以获得v10“webspeed”许可证。

如果你有这些技巧,你可以为一些4GL代码编写一个足够简单的CGI包装器。我偶尔会把这样的东西扔到一起:

#!/bin/bash
#

LOGFILE=/tmp/myservice.log
SVC=sample

# if a FIFO does not exist for the specified service then create it in /tmp
# 
# $1 = direction -- in or out
# $2 = unique service name
#   

pj_fifo() {

        if [ ! -p /tmp/$2.$1 ]
        then
                echo `date` "Creating FIFO $2.$1" >> ${LOGFILE}
                rm -f /tmp/$2.$1 >> ${LOGFILE} &2>&1
                /bin/mknod -m 666 /tmp/$2.$1 p >> ${LOGFILE} &2>&1
        fi

}

if [ "${REQUEST_METHOD}" = "POST" ]
then
        read QUERY_STRING
fi

# header must include a blank line
# 
# we're returning XML
# 

echo "Content-type: text/xml"                   # or text/html or text/plain
echo

# debugging echo...
#
# echo $QUERY_STRING
#
# echo "<html><head><title>Sample CGI Interface</title></head><body><pre>QUERY STRING = ${QUERY_STRING}</pre></body></html>"

# ensure that the FIFOs exist
#         

pj_fifo in $SVC
pj_fifo out $SVC

# make the request
#

echo "$QUERY_STRING" > /tmp/${SVC}.in

# send the response back to the requestor
#   

cat /tmp/${SVC}.out

# all done!
#

echo `date` "complete" >> ${LOGFILE}

然后你只安排一个后台会话来阅读/tmp/sample.in:

/* sample.p
 *
 * mbpro dbname -p sample.p > /tmp/sample.log 2>&1 &
 *
 */

define variable request as character no-undo.
define variable result  as character no-undo.

input from value( "/tmp/sample.in" ).
output to value( "/tmp/sample.out" ).

do while true:

  import unformatted request.

  /* parse it and do something with it... */

  result = '<?xml version="1.0"?>~n<status>~n'.
  result = result + "ok".   /* or whatever turns your crank... */
  result = result + "</status>~n".

end.

当输入到达时解析该行并做任何事情。将答案吐回/tmp/sample.out并循环。这不是很花哨,但如果你的需求适中,那很容易做到。如果您需要更高的可扩展性,健壮性或安全性,那么您最终可能需要更复杂的东西,但这至少可以让您开始进行原型设计。