EnablingJSONIN

From DataFlex Wiki
Revision as of 13:37, 15 April 2011 by Jka (talk | contribs)
Jump to navigationJump to search

EnablingJSONIN page under construction

Here's how to generate there required files for enabling JSON in your webservice.

  1. Know where your project files are.
  2. Grab DBXRay here : ftp://ftp.stureaps.dk/
  3. Choose the workspace using workspace selector
  4. 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'
});