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