EnablingJSONIN

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

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

Then you will be able to communicate with ExtJS 4 using 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'
});


You will be able to send tAddProductRequest as JSON from the client side as the request parameter