Stranice koje svaki pošteni IT-jevac stavlja na zadnje mjesto
RSS Icon Email-Icon Home-Icon
  • Povezivanje C# i Actionscript klasa pomoću WebORB-a

    Objavljeno: 23.05.2009. 17:27 admin Nema komentara

    WebORB for .NETNakon što ste uspješno instalirali WebORB for .NET i povezali Flex i .NET aplikaciju, trebamo vidjeti kako povezati instancu klase na klijentovom računalu (Actionscript klasa) s klasom na serveru (C# klasa). Kroz kratki tutorial ćete lako pohvatati ovo znanje. Ako dosad niste radili s WebORB-om, pogledajte raniji članak o tome: Povezivanje Flexa i .NET-a pomoću WebORB-a: Hello, World

    Idemo napraviti novi class library za WebORB u Visual Studiju. Za predložak projekta ponovno koristite ‘class library for WebORB’. U projektu možete koristiti dolje navedeni kod:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace FlexWebOrb.ZgFlex
    {
        public class UserService
        {
            public WebOrbUser getUserProperties(WebOrbUser user)
            {
                WebOrbUser WebOrbUser = new WebOrbUser();
                WebOrbUser.firstName = user.firstName.ToUpper();
                WebOrbUser.lastName = user.lastName.ToUpper();
                WebOrbUser.age = user.age;
    
                return WebOrbUser;
            }
        }
    
        public class WebOrbUser
        {
            public string firstName;
            public string lastName;
            public int age;
    
        }
    }
    

    Kao što možete vidjeti, ovaj servis unutar namespacea sadrži jednostavnu VO (value object) klasu WebOrbUser. Nju ćemo koristiti za mapiranje serverske i klijentske instance klase. U Flex Builderu napravite novi projekt i dodajte WebORB.swc library u projekt te podesite da compiler koristi xml s konfiguracijom servisa (upute možete vidjeti u prethodnom članku). Napravite sljedeću Actionscript klasu:

    package org.zgflex.vo
    {
      //[RemoteClass(alias="FleFlexWebOrb.ZgFlex.WebOrbUser")]
      public class WebOrbUser
      {
        public var firstName:String;
        public var lastName:String;
        public var age:int;
      }
    }
    

    Zakomentirana linija je vrlo bitna jer sadržni alias remote klase u C#. Na taj način će WebORB znati da je poslani objekt mapiran sa C# klasom na serveru. Pogledajte kako izgleda kod Flex aplikacije:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    
    	<mx:Script>
    	<![CDATA[
    
    	import mx.rpc.events.*;
    	import mx.collections.*;
    	import mx.controls.*;
    	import org.zgflex.vo.*;
    
    	[Bindable]
    	public var serverUser:WebOrbUser = new WebOrbUser();
    
    	private function faultHandler(event:FaultEvent):void
    	{
    		Alert.show(event.fault.faultString, "Error");
    	}
    
    	private function getUserPropertiesHandler(event:ResultEvent):void
    	{
    		serverUser.firstName = event.result.firstName;
    		serverUser.lastName = event.result.lastName;
    		serverUser.age = event.result.age;
    
    		// you can display values in another panel
    		lblFirstName.text = serverUser.firstName;
    		lblLastName.text = serverUser.lastName;
    		lblAge.text = serverUser.age.toString();
    
    		Alert.show("You successfully transfered an object to your .NET server!");
    
    	}
    
    	private function sendUserData():void
    	{
    		var myUser:WebOrbUser = new WebOrbUser();
    		myUser.firstName = txtFirstName.text;
    		myUser.lastName = txtLastName.text;
    		myUser.age = new int(txtAge.text);
    
    		WebOrbConnect.getUserProperties(myUser);
    	}
    	]]>
    	</mx:Script>
    	<mx:Panel x="23" y="19" width="289" height="200" layout="absolute" title="Sending user data">
    		<mx:Label x="10" y="10" text="First name:"/>
    		<mx:Label x="10" y="40" text="Last name:"/>
    		<mx:Label x="10" y="70" text="Age:"/>
    		<mx:TextInput x="87" y="8" width="172" id="txtFirstName"/>
    		<mx:TextInput x="87" y="38" width="172" id="txtLastName"/>
    		<mx:TextInput x="87" y="68" width="46" id="txtAge"/>
    		<mx:Button x="14" y="111" label="Send to .NET server" width="153" click="sendUserData()"/>
    	</mx:Panel>
    	<mx:Panel x="329" y="19" width="289" height="200" layout="absolute" title="Server data">
    		<mx:Label x="10" y="10" text="First name:"/>
    		<mx:Label x="10" y="40" text="Last name:"/>
    		<mx:Label x="10" y="70" text="Age:"/>
    		<mx:Label x="87" y="10" width="94" id="lblFirstName" textAlign="center"/>
    		<mx:Label x="87.5" y="40" width="94" id="lblLastName" textAlign="center"/>
    		<mx:Label x="87.5" y="70" width="94" id="lblAge" textAlign="center"/>
    	</mx:Panel>
    	<mx:RemoteObject id="WebOrbConnect" destination="GenericDestination" source="FlexWebOrb.ZgFlex.UserService" showBusyCursor="true" fault="faultHandler(event)">
    		<mx:method name="getUserProperties" result="getUserPropertiesHandler(event)"/>
    	</mx:RemoteObject>
    </mx:Application>
    

    Klasa UserService na serveru sadrži metodu getUserProperties(WebOrbUser user). Ona dohvataća Flex objekt instance klase WebOrbUser. WebORB zbog zadanog aliasa mapira Actionscript klasu u C# klasu, a metoda radi svoj posao i šalje C# instancu klase Flexu. Radi se obrnuti proces mapiranja te Flex dobiva odgovor u sebi prihvatljivom obliku Actionscript klase. Podaci se prikazuju na desnom panelu aplikacije.

    WebORB mapiranje klasa

    Source aplikacije možete dohvatiti ovdje: Mapiranje C# i Actionscript klasa.

    Ostavite komentar: