Amy,

I don't know if I understand you problem. When one operation fault, I
guess this
operation is finished, therefore there is no way receive many faults
with the same
operation. I think you have other problem...

If even so you want do cancel this operation I will do this:

At then end of execute function, put this line:
   taken.operation = _ro.getOperation('getServices');

In line with ??? replace for it:
   var operation:Operation=token.operation;

I don't know if it will run, I don't test it...

--
Marco Catunda


On Mon, Dec 29, 2008 at 4:33 PM, Amy <amyblankens...@bellsouth.net> wrote:
> I have a situation where a single remoteobject call is triggering
> multiple faults. In my fault handler, I want to cancel the operation
> on the first one. However, I'm not sure how to get from the token to
> the operation that was called.
>
> Here's my code:
>
> package com.rw.adBlankenship.remoting
> {
> import com.rw.adBlankenship.vo.GraphicProfile;
>
> import flash.events.Event;
>
> import mx.collections.ArrayCollection;
> import mx.events.CollectionEvent;
> import mx.messaging.Channel;
> import mx.messaging.ChannelSet;
> import mx.messaging.channels.AMFChannel;
> import mx.rpc.AsyncToken;
> import mx.rpc.Responder;
> import mx.rpc.events.FaultEvent;
> import mx.rpc.events.ResultEvent;
> import mx.rpc.remoting.RemoteObject;
>
> public class GetProfiles
> {
> //-------> shared variables:
> //remote object to use:
> private static var _ro:RemoteObject=new RemoteObject
> ();
> private static var
> _channels:ChannelSet=defaultChannelSet();
>
> /**
> * Set the profiles collection to the ArrayCollection
> that
> * is being used to page through the graphic profiles.
> * More profiles will be added to it as they are
> loaded
> */
> public static var profiles:ArrayCollection = new
> ArrayCollection();
>
> //ensures GraphicProfile gets compiled into this class
> private static var dummy:GraphicProfile;
>
> //sets up default channel set
> private static function defaultChannelSet():ChannelSet
> {
> /* Once we know the settings logic
> works, this will return a
> channelset with a default channel
> that can be used if none
> is specified. */
> return new ChannelSet;
> }
> //allows the endpoint to be set from anywhere in the
> application
> public static function set endpoint
> (gateway:String):void {
> var channel:AMFChannel;
> //look to see if the channel is already there
> for (var i:int=0;
> i<_channels.channels.length; i++){
> channel=_channels.channels[i];
> if (channel.endpoint==gateway) return;
> }
> //add channel
> channel = new AMFChannel('gpChannel'+i,
> gateway);
> _channels.addChannel(channel);
> }
> public static function get endpoint():String{
> return Channel(_channels.channels
> [_channels.channels.length-1]).endpoint;
> }
> /**
> * Executes the getServices service.
> * Takes a parameters "object" with the following
> properties.
> * @param categoryID:int-Category to display profiles
> for (use -1 for string search)
> * @param searchString:String-Search string to
> retrieve profiles for (use null for category search)
> * @param page:int-page number of results to retrieve
> (defaults to 0)
> * @param pageSize:int-size of a "page" of results
> (how many to ask for) (defaults to 0)
> */
> public static function execute(categoryID:int=-
> 1,searchString:String=null, page:int=0, pageSize:int=24):void{
> if (_channels.channels.length==0) {
> throw new Error('No endpoint
> specified for GetCategories command Remote Object');
> }
> _ro.channelSet=_channels;
> _ro.destination = 'AMF_Category';
> _ro.source = 'AMF_Category';
> var token:AsyncToken=_ro.getServices
> (categoryID=-1?null:categoryID, searchString, page, pageSize);
> token.addResponder(new Responder
> (profilesLoaded, profileLoadFailed));
> }
>
> /* Populate current ArrayCollection with the
> result.
> This will generate a CollectionChange
> wherever the
> other end of the reference is so it will know
> the
> categories have arrived. */
> private static function profilesLoaded
> (e:ResultEvent):void{
> //keep from sending tons of collection events
> profiles.disableAutoUpdate();
> for (var i:int=0; i<e.result.length; i++) {
> profiles.addItem(e.result[i] as
> GraphicProfile);
> }
> //send the collection event
> profiles.enableAutoUpdate();
> }
> private static function profileLoadFailed
> (e:FaultEvent):void{
> trace(e.fault);
> //dispatch a collection change event so that
> the SearchProfiles can react
> profiles.dispatchEvent(new CollectionEvent
> (CollectionEvent.COLLECTION_CHANGE));
> //keep from tying up resources responding to
> more faults on this call
> var operation:Operation=???;
> operation.cancel();
>
> }
>
> }
> }
>
> I'd really appreciate it if someone could help me out with what goes
> in place of ??? above.
>
> Thanks;
>
> Amy
>
> 

Reply via email to