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'
 });