EnablingJSONIN
From DataFlex Wiki
EnablingJSONIN page under construction
Here's how to generate there required files for enabling JSON in your webservice.
- Know where your project files are.
- Grab DBXRay here : ftp://ftp.stureaps.dk/
- Choose the workspace using workspace selector
- select Functions|Generate Struct Packages for project
Now you can write code like the following:
... Use StructPkg\Struct_tReview.pkg Use StructPkg\Struct_tProduct.pkg Use StructPkg\Struct_tAddProductRequest.pkg Use Product.wo Use Structures.pkg Object oProductJSON is a cWebService ... Procedure CreateProduct String Request tAddProductRequest stRequest tJsonNode stJson If (StringToDoc(oJsonFunctions, &request, &stJson)) Begin Send JsonToStruct of oStructHandler_tAddProductRequest stJson (&stRequest) Function_Return (CreateProduct(oProduct, stRequest)) End Else Begin Error 666 "String parameter does not contain a valid JSON object" End End_Procedure
oProduct is a traditional webservice using SOAP.
Now . Given the following structure definitions:
Struct meta Boolean success String msg End_Struct Struct tReview Integer id Integer productId String comment String author End_Struct Struct tProduct Integer id String name String company tReview[] reviews End_Struct Struct tAddProductRequest String token tProduct product End_Struct Struct tGetProductResponse Meta meta tProduct product End_Struct Struct tRequest String token Integer identifier End_Struct Struct tResponse Meta meta Integer id End_Struct
You will be able to send tAddProductRequest as JSON from the client side as the request parameter
To parse the incoming request from ExtJS 4 you could use the following model definition:
Ext.regModel('Acme.Product', { idProperty: 'id', successProperty: 'meta.success', fields: [ {name:'id', type:'int'}, {name: "name", type:"string"}, {name: "company", type:"string"} ], hasMany: {model:'Acme.Review', name: 'reviews', associationKey: 'reviews'} }); Ext.regModel('Acme.Review', { idProperty: 'id', fields: [ 'id', 'product_id', 'comment', 'author' ], belongsTo:'Acme.Product' });