I added those value objects to show how you would send data to the
server and receive data back in the form of objects.

At some stage in the future you will find that you need to send
multiple parameters to the server and this shows how you would do
that. If you only need to send one parameter, a string would suffice
and you don't need value objects. The same thing can be said if you
are only receiving a string back.

Generally, I receive an array of objects back (say from a MySQL query)
that I will then bind to a datagrid. It is a lot easier to understand
the code if the objects have a specific name and structure. It also
makes it a lot easier to update the code if you have to add another
parameter in your object.


--- In flexcoders@yahoogroups.com, "timgerr" <[EMAIL PROTECTED]> wrote:
>
> What are the 2 files TestNamesInVO.php and TestNamesOutVO.php for? 
> Isn't it easier to just go to the TestService.php and get the returned
> information their.  What is the functions of the 2 files.
> 
> Thanks again,
> 
> timgerr
> 
> 
> --- In flexcoders@yahoogroups.com, "valdhor" <stevedepp@> wrote:
> >
> > This seems to be a convoluted way to do this.
> > 
> > I have created a simple example to show you how I use WebOrb.
> > 
> > On my server I have the WebORB directory at the root level. In the
> > Services directory I have a MyServices directory and in this
directory I
> > have a ValueObjects directory. For this example I have two files:
> > 
> > =====================================================================
> > TestNamesInVO.php:
> > <?php
> > class TestNamesInVO
> > {
> >      public $FirstName;
> >      public $LastName;
> > 
> >      public function __construct($FirstName, $LastName)
> >      {
> >          $this->FirstName = $FirstName;
> >          $this->LastName = $LastName;
> >      }
> > }
> > ?>
> > =====================================================================
> > TestNamesOutVO.php:
> > <?php
> > class TestNamesOutVO
> > {
> >      public $FullName;
> > 
> >      public function __construct($FullName)
> >      {
> >          $this->FullName = $FullName;
> >      }
> > }
> > ?>
> > =====================================================================
> > 
> > The constructors are there just to make it easier to create a new
> > object. They are optional.
> > 
> > In the MyServices directory I have a TestService.php file. This
contains
> > all the functions available with this service.
> > 
> > =====================================================================
> > TestService.php:
> > <?php
> > class TestService
> > {
> >      function ShowMe()
> >      {
> >          return "Tom Jones";
> >      }
> > 
> >      function ShowName($name)
> >      {
> >          return 'Hello ' . $name;
> >      }
> > 
> >      function ShowNames(TestNamesInVO $namesIn)
> >      {
> >          require_once("ValueObjects/TestNamesInVO.php");
> >          require_once("ValueObjects/TestNamesOutVO.php");
> > 
> >          $fullName = new TestNamesOutVO($namesIn->FirstName . " " .
> > $namesIn->LastName);
> > 
> >          return $fullName;
> >      }
> > }
> > ?>
> > =====================================================================
> > 
> > In flex I also have a ValueObjects folder underneath my src
folder. This
> > folder contains the corresponding ActionScript files for the value
> > objects on the server:
> > 
> > =====================================================================
> > TestNamesInVO.as:
> > package ValueObjects
> > {
> >      [RemoteClass(alias="MyServices.ValueObjects.TestNamesInVO")]
> >      [Bindable]
> >      public class TestNamesInVO
> >      {
> >          //instance variables
> >          private var _FirstName:String;
> >          private var _LastName:String;
> > 
> >          //accessor methods
> >          public function get FirstName():String {return _FirstName;}
> >          public function get LastName():String {return _LastName;}
> > 
> >          //mutator methods
> >          public function set FirstName(FirstName:String):void
> {_FirstName
> > = FirstName;}
> >          public function set LastName(LastName:String):void
{_LastName =
> > LastName;}
> >      } // end class
> > }//end package
> > =====================================================================
> > TestNamesOutVO.as:
> > package ValueObjects
> > {
> >      [RemoteClass(alias="MyServices.ValueObjects.TestNamesOutVO")]
> >      [Bindable]
> >      public class TestNamesOutVO
> >      {
> >          //instance variables
> >          private var _FullName:String;
> > 
> >          //accessor methods
> >          public function get FullName():String {return _FullName;}
> > 
> >          //mutator methods
> >          public function set FullName(FullName:String):void
{_FullName =
> > FullName;}
> >      } // end class
> > }//end package
> > =====================================================================
> > 
> > Note the RemoteClass metadata. This tells flex the location of the
class
> > on the server that matches this class (In relation to the Services
> > directory).
> > 
> > Finally we have the Flex application that makes calls to functions
> > within this service.
> > 
> > =====================================================================
> > WebORBExample.mxml:
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > layout="absolute"
> >      creationComplete="onCreationComplete()">
> >      <mx:Script>
> >          <![CDATA[
> >              import mx.messaging.channels.AMFChannel;
> >              import mx.messaging.ChannelSet;
> >              import mx.rpc.events.FaultEvent;
> >              import mx.rpc.events.ResultEvent;
> >              import mx.rpc.remoting.RemoteObject;
> >              import mx.managers.CursorManager;
> >              import mx.controls.Alert;
> >              import ValueObjects.TestNamesInVO;
> >              import ValueObjects.TestNamesOutVO;
> > 
> >              private var channelSet:ChannelSet;
> >              private var amfChannel:AMFChannel;
> >              private var testService:RemoteObject;
> > 
> >              private function onCreationComplete():void
> >              {
> >                  channelSet = new ChannelSet();
> >                  amfChannel = new AMFChannel("my-amf",
> > "http://myserver/WebORB/weborb.php";);
> >                  channelSet.addChannel(amfChannel);
> > 
> >                  testService = new RemoteObject();
> >                  testService.channelSet = channelSet;
> >                  testService.destination = "MyServices.TestService";
> >                  testService.requestTimeout = 15;
> > 
> >                 
testService.ShowMe.addEventListener(ResultEvent.RESULT,
> > ShowMeHandler);
> >                 
> > testService.ShowName.addEventListener(ResultEvent.RESULT,
> > ShowNameHandler);
> >                 
> > testService.ShowNames.addEventListener(ResultEvent.RESULT,
> > ShowNamesHandler);
> >                  testService.addEventListener(FaultEvent.FAULT,
> > faultHandler);
> >              }
> > 
> > 
> >              private function runShowNames():void
> >              {
> >                  var person:TestNamesInVO = new TestNamesInVO();
> >                  person.FirstName = "Tom";
> >                  person.LastName = "Jones";
> >                  testService.ShowNames(person);
> >                  CursorManager.setBusyCursor();
> >              }
> > 
> >              private function ShowMeHandler(event:ResultEvent):void
> >              {
> >                  Alert.show(event.result.toString());
> >              }
> > 
> >              private function ShowNameHandler(event:ResultEvent):void
> >              {
> >                  Alert.show(event.result.toString());
> >              }
> > 
> >              private function ShowNamesHandler(event:ResultEvent):void
> >              {
> >                  CursorManager.removeBusyCursor();
> >                  var personReturned:TestNamesOutVO = event.result as
> > TestNamesOutVO;
> >                  Alert.show(personReturned.FullName);
> >              }
> > 
> >              private function faultHandler(fault:FaultEvent):void
> >              {
> >                  CursorManager.removeBusyCursor();
> >                  switch(fault.fault.faultCode.toString())
> >                  {
> >                      case "Client.Error.RequestTimeout":
> >                           Alert.show("The server is not responding.
> > Please check that you are connected and the server is running.",
"Server
> > Timeout");
> >                         break;
> >                      default:
> >                          Alert.show(fault.fault.faultString,
> > fault.fault.faultCode.toString());
> >                      break;
> >                  }
> >              }
> > 
> >          ]]>
> >      </mx:Script>
> >      <mx:HBox horizontalAlign="center">
> >          <mx:Button label="ShowMe" click="{testService.ShowMe()}"/>
> >          <mx:Button label="ShowName" click="{testService.ShowName('Tom
> > Jones')}"/>
> >          <mx:Button label="ShowNames" click="runShowNames()"/>
> >      </mx:HBox>
> > </mx:Application>
> > =====================================================================
> > 
> > If you have any more questions, please don't hesitate to ask.
> > 
> > 
> > 
> > --- In flexcoders@yahoogroups.com, "timgerr" <tim.gallagher@> wrote:
> > >
> > > OK, so I have created this hello world service and then had WebOrb
> > > create the code I see in the actionscript comments This:
> > >
> > > (If using Model-View-Controller)
> > > - Modify the constructor of the class below to accept the controller
> > > object
> > > - Modify response handlers to pass return values to the controller
> > >
> > > (if not using MVC)
> > > - Modify the constructor of the class below to accept your View
object
> > > - Modify response handlers to display the result directly in the
View
> > >
> > > I am not useing MVC so I have to use the 2nd commented option.  the
> > > problem is I am not sure what to do, someone help me?
> > >
> > > Here is my PHP code:
> > > <?php
> > > class HelloWorld {
> > >  function ShowMe()
> > >  {
> > >   return "Tom Jones";
> > >  }
> > >  function ShowName($name)
> > >  {
> > >   return 'Hello ' . $name;
> > >  }
> > > }
> > > ?>
> > > So I have 2 methods, ShowMe and ShowName.
> > >
> > > Here is my as code:
> > >    package comp.HelloWorld
> > >    {
> > >    import mx.rpc.remoting.RemoteObject;
> > >    import mx.controls.Alert;
> > >    import mx.rpc.events.ResultEvent;
> > >    import mx.rpc.events.FaultEvent;
> > >    import mx.rpc.AsyncToken;
> > >        import mx.rpc.IResponder;
> > >
> > >    import comp.HelloWorld.vo.*;
> > >
> > >    public class HelloWorld
> > >    {
> > >    private var remoteObject:RemoteObject;
> > >    private var model:HelloWorldModel;
> > >
> > >    public function HelloWorld( model:HelloWorldModel = null )
> > >    {
> > >     remoteObject  = new RemoteObject("GenericDestination");
> > >     remoteObject.source = "comp.HelloWorld.HelloWorld";
> > >
> > >     remoteObject.ShowMe.addEventListener("result",ShowMeHandler);
> > >    
remoteObject.ShowName.addEventListener("result",ShowNameHandler);
> > >     remoteObject.addEventListener("fault", onFault);
> > >
> > >      if( model == null )
> > >      model = new HelloWorldModel();
> > >
> > >     this.model = model;
> > >
> > >    }
> > >
> > >       public function setCredentials( userid:String, password:String
> > > ):void
> > >       {
> > >         remoteObject.setCredentials( userid, password );
> > >       }
> > >
> > >       public function GetModel():HelloWorldModel
> > >       {
> > >         return this.model;
> > >       }
> > >
> > >    public function ShowMe(  responder:IResponder = null):void
> > >   {
> > >     var asyncToken:AsyncToken = remoteObject.ShowMe();
> > >
> > >    if( responder != null )
> > >     asyncToken.addResponder( responder );
> > >   }
> > >
> > >    public function ShowName( name:String, responder:IResponder =
> > > null):void
> > >   {
> > >     var asyncToken:AsyncToken = remoteObject.ShowName( name);
> > >
> > >    if( responder != null )
> > >     asyncToken.addResponder( responder );
> > >   }
> > >    public virtual function ShowMeHandler(event:ResultEvent):void
> > >    {
> > >     var returnValue:Object = event.result as Object;
> > >     model.ShowMe = event.result as Object;
> > >    }
> > >
> > >    public virtual function ShowNameHandler(event:ResultEvent):void
> > >    {
> > >     var returnValue:Object = event.result as Object;
> > >     model.ShowName = event.result as Object;
> > >    }
> > >
> > >   public function onFault (event:FaultEvent):void
> > >    {
> > >     Alert.show(event.fault.faultString, "Error");
> > >    }
> > >   }
> > >
> > >   }
> > >
> > > I get an error on: import comp.HelloWorld.vo.* (not sure what
this is
> > > or how to create it)
> > >
> > >
> > > And here is another chunck of code that I have to modify
> > >
> > >  public virtual function ShowMeHandler(event:ResultEvent):void
> > > {
> > >      var returnValue:Object = event.result as Object;
> > >      model.ShowMe = event.result as Object;
> > > }
> > >
> > > public virtual function ShowNameHandler(event:ResultEvent):void
> > > {
> > >      var returnValue:Object = event.result as Object;
> > >      model.ShowName = event.result as Object;
> > > }
> > >
> > > I get an error:
> > > (Severity and Description Path Resource Location Creation Time Id
> > > 1119: Access of possibly undefined property ShowMe through a
reference
> > > with static type comp.HelloWorld:HelloWorldModel.
> > > WeborbHelloworld/src/comp/HelloWorld HelloWorld.as line 95
> > > 1222790567712 8938)
> > >
> > > On these 2 lines of code:
> > > model.ShowMe = event.result as Object;
> > > model.ShowName = event.result as Object;
> > >
> > > I just want to return that stuff, what do I have to do in order
to fix
> > > the errors.
> > >
> > > Thanks,
> > > timgerr
> > >
> >
>


Reply via email to