2009-06-23 3 views
1

J'ai une classe que je veux utiliser tout au long de mes projets. Cela me permettrait essentiellement de travailler facilement avec un RemoteObject afin de ne pas avoir à le définir dans tous mes projets. Cela fonctionne quand ne pas passer "args" à sendRequest (..). Mais quand je veux appeler la fonction cfc avec des paramètres et essayez passer "args" dans je reçois l'erreur suivante:Flex 3 Dynamic RemoteObject Classe

The parameter USERNAME to function getAllPreferences is required but was not passed in.

Heres mon code:

package Actionscript 
{ 
    import mx.collections.ArrayCollection; 
    import mx.rpc.AbstractOperation; 
    import mx.rpc.events.FaultEvent; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.remoting.mxml.RemoteObject; 

    public class CFCRemote 
    { 
     private var ro:RemoteObject; 
     private var roSource:ArrayCollection; 
     private var appPointer:Object; 

     // constructor 
     public function CFCRemote(appMain:Object):void 
     { 
      appPointer = appMain; 
      roSource = new ArrayCollection(); 
     } 

     public function addSource(alias:String, source:String, thisObj:Object):void 
     { 
      roSource.addItem({alias:alias, source:source, thisObj:thisObj}); 
     } 

     public function sendRequest(roAlias:String, funcName:String, args:Object = null):void 
     { 
      var roCaller:Object; 

      ro = new RemoteObject("ColdFusion"); 
      ro.showBusyCursor = true;   

      for(var i:int = 0; i < roSource.length; i++) 
      { 
       if(roSource.getItemAt(i).alias == roAlias) 
       { 
        ro.source = roSource.getItemAt(i).source; 
        roCaller = roSource.getItemAt(i).thisObj; 
        break; 
       } 
      } 

      var ao:AbstractOperation = ro.getOperation(funcName); 
      ao.arguments = args; 
      ao.addEventListener(ResultEvent.RESULT, function(e:ResultEvent):void{roCaller.handleROF(e,funcName)}); 
      ao.addEventListener(FaultEvent.FAULT, function(e:FaultEvent):void{appPointer.server_fault(e,funcName,"unknown")}); 
      ao.send(); 

     } 
    } 
} 

Quand je trace (args.username) Je vois que c'est passé correctement. J'ai essayé ceci dans un autre script, cependant, le RemoteObject dans ce script a été défini avec mxml. Je ne vois pas comment cela serait très différent.

à court d'idées :(

Edit: Il travaille pour nous maintenant, si quelqu'un veut utiliser cette solution et ayant un problème mise en œuvre de cette classe je vais heureux de vous aider

Répondre

1

Essayant de passer les arguments à AbstractOperation.send() plutôt que de les définir dans AbstractOperation. Je n'ai pas encore essayé ce dernier mais je les ai passés à la méthode send() plus de fois que je peux compter sans problèmes. Vous pouvez envisager de passer les arguments en utilisant "... args" ou en tant que Array/ArrayCollection pour vous assurer de maintenir l'ordre.

+0

merci, en utilisant ao.send (args) travaillé. –

0

Eh bien, je peux » Je dis que je connais terriblement bien Flex, mais le fait que vous instanciez une classe abstraite me donne des drapeaux rouges: en général, vous n'instanciez jamais directement les classes abstraites - elles sont plutôt utilisées comme classes de base pour les classes que vous instanciez Dans ce cas, je pense vous recherchez la classe Operation. Si tel est le cas, vous devrez peut-être également lui fournir un tableau "argumentNames" - cela semble fournir l'ordre dans lequel vos arguments doivent être passés.