.. _api-examples:

Examples
========

This section gathers sample scripts using :ref:`ZOO-API <api-what>`, the `ZOO-Project <http://zoo-project.org>`__ server-side JavaScript API.

ZOO-API contains many classes and functions. You can find the description list :ref:`here <api-classes>`.

ZOO.Process example
--------------------------

::

  function SampleService(conf,inputs,outputs){
     var myProcess = new ZOO.Process('http://localhost/cgi-bin-new1/zoo_loader_new1.cgi','Boundary');
     var myInputs = {InputPolygon: { type: 'complex', value: '{"type":"Polygon","coordinates":[[[-106.993853,35.998758],[-107.407233,35.997524],[-107.430525,35.997726],[-107.4824,35.99878],[-108.37013,35.999472],[-109.043633,35.996652],[-109.096265,35.997817],[-109.148763,36.001751],[-109.200981,36.008442],[-109.252775,36.017871],[-109.304,36.030014],[-109.354516,36.044835],[-106.468201,35.991497],[-106.855511,35.989504],[-106.90933,35.990676],[-106.963008,35.994743],[-106.993853,35.998758]]]}', mimeType: "application/json"} };
     var myExecuteResult=myProcess.Execute(myInputs);
     return {result: ZOO.SERVICE_SUCCEEDED, outputs: [ {name:"Result", value: myExecuteResult} ] };
  }

In this really short example you can see how to create ``ZOO.Process`` class instance and 
call the Execute method on such an instance. Then you'll just need to return a JavaScript 
object containing the attributes result and outputs, which I'm sure you already know 
what is about. The first is about the status of the process (can be ``ZOO.SERVICE_SUCEEDED``,
``ZOO.SERVICE_FAILED`` and so on), the last is obviously the resulting maps (take a 
look at the maps internal data structure used by ZOO Kernel in ``service.h``).

ZOO.UpdateStatus example
-----------------------

::

  function SampleLongService(conf,inputs,outputs){
     var my_i=0;
     while(my_i<100){
         try{
           conf["lenv"]["status"]=my_i;
         }
         catch(e){
         }
         ZOOUpdateStatus(conf,my_i);
         SampleService(conf,inputs,outputs);
         my_i+=10;
     }
     return SampleService(conf,inputs,outputs);
  }

You can see in this sample code how to use the ``ZOOUpdateStatus`` function to update the 
current status of your running process. This information will be really helpfull when the 
ZOO Kernel will run your JavaScript Service in background mode (if the user set to ``true`` 
the ``storeExecuteResponse`` parameter in his request).

