FluorineFx学習整理(一)

10951 ワード

サーバ側関連コード
Game.cs(エンティティクラス)
namespace ServiceLibrary1
{
    [TransferObject]
    public class Game
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Country { get; set; }
    }
}
GameTask.cs(操作クラス)
namespace ServiceLibrary1
{
    [RemotingService]
    public class GameTask
    {
        public Game GetGame()
        {
            return new Game { ID = 1, Name = " ", Country = " " };
        }
        [DataTableType("ServiceLibrary1.Game")]
        public DataTable GetDataTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Country", typeof(string));
            DataRow dr = dt.NewRow();
            dr["ID"] = 1;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = 2;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
            return dt;
        }

        [DataSetType("ServiceLibrary1.DSClass")]
        [DataTableType("group1", "myTable1", "ServiceLibrary1.Game")]
        [DataTableType("group2", "myTable2", "ServiceLibrary1.Game")]
        public DataSet GetDataSet()
        {
            DataSet ds = new DataSet();
            DataTable dt = ds.Tables.Add("group1");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Country", typeof(string));
            DataRow dr = dt.NewRow();
            dr["ID"] = 3;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = 4;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
           //table2
            dt = ds.Tables.Add("group2");
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Country", typeof(string));
            dr = dt.NewRow();
            dr["ID"] = 5;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["ID"] = 6;
            dr["Name"] = "《 》";
            dr["Country"] = " ";
            dt.Rows.Add(dr);
            return ds;
        }
    }
}
1.コントロールアクセス
<mx:RemoteObject id="ro1" destination="fluorine" source="ServiceLibrary1.GameTask" fault="onFault(event)">
 <mx:method name="GetGame" result="onResult(event)"></mx:method>
 <mx:method name="GetDataTable" result="onDataTableResult(event)"></mx:method>
 <mx:method name="GetDataSet" result="onDataSetResult(event)"></mx:method>
</mx:RemoteObject>
2.コード直接アクセス
private function onCodeClick(event:MouseEvent):void
{
 var nc:NetConnection = new NetConnection();
 
 var responder:Responder = new Responder(onCodeResult,onCodeStatus);
 
 nc.objectEncoding = ObjectEncoding.AMF3;
 
 nc.connect("http://localhost:4608/Web/gateway.aspx");
 
 nc.call("ServiceLibrary1.GameTask.GetDataSet",responder);
}
private function onCodeResult(result:Object):void
{
 this.dataGrid1.dataProvider = result.myTable2  as  ArrayCollection;
}
private function onCodeStatus(event:Object):void
{
 trace("Error");
}
3.返されたオブジェクトの受信
サーバ側オブジェクトと同じ構造のAS 3オブジェクトを作成して戻り値を受信したり、直接Objectで受信したりすることができます.
private function onResult(event:ResultEvent):void
{
 var obj:Object = event.result  as  Object;
 this.lblResult.text = obj.Name;
}
4.戻ってきたデータテーブルを受信する
サーバ側のDataTableは、Flex側でArrayCollectionに変換できます.サーバ側がメソッドの前に[DataTable Type(remoteClass:String)]を宣言することに注意してください.
private function onClick(event:MouseEvent):void
{
 ro1.GetDataTable();
}
private function onDataTableResult(event:ResultEvent):void
{
 this.dataGrid1.dataProvider = event.result  as  ArrayCollection;
}
5.戻ってきたDataSetを受信する
DataSetには複数のDataTableが含まれています.サーバ側でDataSetメソッドを返す場合は、1つのDataSet Typeと複数のDataTable Type宣言を追加する必要があります.たとえば、次のようにします.
[DataSetType("ServiceLibrary1.DSClass")]
[DataTableType("group1", "myTable1", "ServiceLibrary1.Game")]
[DataTableType("group2", "myTable2", "ServiceLibrary1.Game")]
public DataSet GetDataSet()
{
        DataSet ds = new DataSet();
        DataTable dt1 = ds.Tables.Add("group1");
        //……
        DataTable dt2 = ds.Tables.Add("group2");
        //……
}
ここのDataSetTypeで定義されているDSClassは、このようなエンティティクラス対応は必要ないようで、勝手に書いても問題ありません.DataTable TypeのパラメータはDataTable Type(テーブル名、参照時の属性名、対応するクラス名)
private function onClick(event:MouseEvent):void
{
 ro1.GetDataSet();
}
private function onDataSetResult(event:ResultEvent):void
{
 this.dataGrid1.dataProvider = event.result.myTable2  as  ArrayCollection;
}
6.返されたオブジェクト配列を受信する(Object[])
オブジェクト配列はFlex側のArrayで直接受信できる
private function onCodeResult(result:Array):void
{
 this.dataGrid1.dataProvider = result;
}
7.返信を受信したList
Listは、Flex側のArrayCollectionで直接受信可能
 
private function onCodeResult(result:ArrayCollection):void
{
 this.dataGrid1.dataProvider = result;
}