For example.

the A4D script “getArtikelNames.a4d”

<%      
array text($arArtikel;0)
All Records([Abfall_ABC])
order by([Abfall_ABC];[Abfall_ABC]artikelName;>)
Selection to array([Abfall_ABC]artikelName;$arArtikel)
$size:=size of array($arArtikel)

$json := a4d.json.new 
$json->add("object_type"; "getArtikelNames")
$json->startArray("data")
for ($i; 1; $size)
        $json->startObject
        $json->add("artikel";$arArtikel{$i})
        $json->endObject
end for
$json->endArray
$json->write
%>

and the URL

http://versuch.idcontor.de/getArtikelnames.a4d

> But hey, this is 4D, and with Active4D, I know this will be a piece of cake! 
> (I hope… :-)

Yes it is.

Hope this helps

Grüße/regards
Norbert
        

Norbert Pfaff
Mannheimer Str.24b
67098 Bad Dürkheim



Am 15.03.2014 um 15:16 schrieb Michael Larue <[email protected]>:

> Saturday, March 15, 2014 1:30:28 PM
> 
> So, we're having our developer's teleconference, working out the specs for an 
> app that will be pulling data from 4D. I have done similar projects, using 
> SOAP in 4D's web services (which is a fantastic implementation--works 
> beautifully and is really simple to set up and use). Then, they casually toss 
> out, "oh, we're going to be doing this project using JSON; let us know the 
> details on your end by our next meeting on Monday. Have a nice weekend."*
> 
> Gulp!
> 
> But hey, this is 4D, and with Active4D, I know this will be a piece of cake! 
> (I hope... :-)
> 
> So, just would like to go over a general overview on this, since I haven't 
> done anything using JSON, and just want to make sure I'm on the right track. 
> Again, I have extensive knowledge of 4D's SOAP implementation, so if I can 
> more or less figure out a way to get JSON working in a similar fashion, I 
> should be good to go.
> 
> With 4D's web services, it works as follows:
> 
> 1) You create a method and in the method properties, designate it as 
> available as a web service (click a checkbox).
> 
> 2) In the method you put in SOAP DECLARATION calls to designate your input 
> and output parameters (basically binding the variable names from SOAP to 4D 
> variables)
> 
> 3) Write your code.
> 
> That's it; 4D handles everything else, with I/O handled by the web server, 
> everything translated automatically to and from XML, etc. The caller requests 
> the WSDL (basically the directory of your SOAP methods and parameter lists), 
> then just calls the methods with input parameters, and gets back the output 
> parameters. 
> 
> So, to do the same sort of thing in JSON, I'm thinking Active4D will be 
> ideal, since there's a wealth of JSON commands already built, and apparently 
> these are all native plugin commands now, so should be pretty fast. Plus I 
> know Aparajita's stuff is always industrials strength and super powerful, so 
> all I need to do is figure out the right way to approach it.
> 
> What I'm thinking is to build separate A4D pages, each corresponding to a 
> function (corresponding to a SOAP method in 4D). This essentially will be the 
> API for the project. So it might be set up like:
> 
> https://www.site.com/project/getattendees.a4d
> 
> https://www.site.com/project/getmeetings.a4d
> 
> and each A4D page would return the corresponding data from 4D (ie, list of 
> attendees, list of meetings, etc.). They'll POST to these pages with perhaps 
> some parameters (password to access data, search vars, data to input, etc.).
> 
> This should make code management fairly straightforward; each page is a 
> function, and updating a function means just popping in a new page (no need 
> to take down 4D and recompile).
> 
> Now for the details. As mentioned, with 4D's implementation of SOAP, 
> everything's done for you; you don't have to muck around with XML or anything 
> with the protocol. You just declare your variables, and 4D handles the rest. 
> For JSON, I'm assuming I can do something similar in Active4D, where I can 
> get the incoming data somehow from the native JSON format into 4D vars.
> 
> I'm assuming I would use the command:
> 
> parse json(inJSON) -> <any>
> 
> somewhere at the top of the method, right?
> 
> So, where does "inJSON" come from? 
> 
> In 4D version 14, there's a new command that probably would do the trick:
> 
> WEB GET HTTP BODY ( inJSON )
> 
> However, looking through the docs for Active4D, I found under the section of 
> "Form Variables":
> 
>> Posting Raw Data
>> Normally, item values in the form variables collection are either text or 
>> text arrays. However, if a form is posted which contains raw data (such as 
>> XML) and no form variables, and the “parameter mode” configuration option is 
>> not set to “query params”, Active4D creates a single BLOB item in the form 
>> variables collection with the key “_data_”.
> 
> Although it mentions "XML", I think this would also apply to JSON, no? So, 
> I'm guessing you access it in Active4D as _form{"_data_"}. Is that right?
> 
> The ideal would be if I can simply convert JSON data into a collection; then 
> I'm home free with accessing the data. So would something like this work?
> 
> $a4d_collection := new collection
> $a4d_collection ::= parse json (BLOB to text(_form{"_data_"})) 
> 
> Then I can simply reference an item in the collection, such as:
> 
> $vValue := $a4d_collection{"key"}
> 
> Am I on the right track? Will this even work? Or is there a better way to do 
> this?
> 
> OK, once I have the data in 4D variables, then I do my code. When finished, 
> to output the data back, I assume I build a JSON object and then output it 
> using the "write json" command, correct?
> 
> So would something like this work?
> 
> $JSON_Object := new json 
> 
> add to json($JSON_Object; "Item1"; $vItem1)
> add to json($JSON_Object; "Array2"; $aArray2)
> etc.
> 
> write json ($JSON_Object) 
> 
> 
> How am I doing? Any of this make sense? (And yes, I know there are other even 
> more powerful A4D commands to add data to JSON; will be looking at these when 
> building the code.)
> 
> OK, many thanks for any help, comments, etc. As mentioned, I'm new to JSON, 
> so please forgive my ignorance on how this should work...
> 
> Cheers!
> 
> Michael Larue
> 
> *To a programmer, Friday just means there are only two working days until 
> Monday. :-)
> 
> 
> 
> 
> _______________________________________________
> Active4D-dev mailing list
> [email protected]
> http://list.aparajitaworld.com/listinfo/active4d-dev
> Archives: http://active4d-nabble.aparajitaworld.com/

_______________________________________________
Active4D-dev mailing list
[email protected]
http://list.aparajitaworld.com/listinfo/active4d-dev
Archives: http://active4d-nabble.aparajitaworld.com/

Reply via email to