JavaScript前端和Progress4GL后端

时间:2013-10-04 17:14:08

标签: json progress-4gl openedge

我想创建一个带有前端HTML + JavaScript和后端Progress4GL的应用程序。

我找到了这个文档:http://communities.progress.com/pcom/docs/DOC-106147(请参阅AJAX简介和JSON简介)。在所描述的示例中,在请求数据时使用GET方法:

xmlhttp.open("GET", "http://localhost/cgi-bin/cgiip.exe/WService=wsbroker1/getcustomersJSON_param.p?piCustNum="+ custval, true);            
xmlhttp.send();

和使用Progress4GL获取参数的过程get-value("piCustNum")

在我的应用程序中,我想使用POST方法。所以请求将是,例如:

xmlhttp.open("POST","http://localhost/cgi-bin/cgiip.exe/WService=wsbroker1/getcustomersJSON_param.p",true);
xmlhttp.send("piCustNum=" + custval);

但我不知道如何在Progress方面获得发送的参数。其实我想发送一个stringify JSON。

任何人都可以帮我吗?谢谢!

3 个答案:

答案 0 :(得分:2)

如果您想将JSON数据发布到webspeed程序,请查看WEB-CONTEXT:FORM-INPUT或如果您发布超过32K,请查看WEB-CONTEXT:FORM-LONG-INPUT。

现在......关于阅读JSON数据,它取决于您的OpenEdge版本。在10.2B Progress开始支持JSON,但它非常有限,特别是如果你几乎无法控制如何创建JSON。由于您是创建JSON数据的人,因此它可能适合您。版本11.1有更好的支持JSON,包括SAX流实现。

我们使用的是10.2版,因此我不得不使用this C library将JSON转换为CSV文件。如果您可以在服务器上访问Python,则very easy转换为CSV文件

答案 1 :(得分:0)

对于前端,我建议您使用一些库(如jQuery)来处理ajax的请求,而不是处理使用不同浏览器的复杂性等。您可以使用jQuery的函数如$ .ajax,$ .get或$ .post来发出请求。

可以轻松地在webpeed页面上发布帖子:

var data = {
  tt_param: [ { id: 1, des: 'Description 1' } ]
}

var params = { data: JSON.stringify(data) }

$.post(
  'http://<domain>/scripts/cgiip.exe/WService=<service>/ajax.p',
  params,
  function (data) {
    alert('returned:' + data);
  },
  'text'
);

后端将使用get-value('data')接收JSON字符串:

{src/web2/wrap-cgi.i}

def temp-table tt_param no-undo
    field id  as int
    field des as char.

def var lc_param as longchar no-undo.

procedure output-header:
    output-content-type("text/text").
end.

run output-header.

assign lc_param = get-value('data').

temp-table tt_param:read-json('longchar', lc_param).

find first tt_param no-error.

{&OUT} 'Cod: ' tt_param.id ', Des: ' tt_param.des.

这是一个好的开始,希望它有所帮助。

干杯,

答案 2 :(得分:0)

Node提供了一个动态调用Progress Business Logic的库。我希望这会有所帮助。 node4progress