EnablingJSONIN

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