FluorineFx学習整理(一)
10951 ワード
サーバ側関連コード
Game.cs(エンティティクラス)コントロールアクセス
サーバ側オブジェクトと同じ構造のAS 3オブジェクトを作成して戻り値を受信したり、直接Objectで受信したりすることができます.
サーバ側のDataTableは、Flex側でArrayCollectionに変換できます.サーバ側がメソッドの前に[DataTable Type(remoteClass:String)]を宣言することに注意してください.
DataSetには複数のDataTableが含まれています.サーバ側でDataSetメソッドを返す場合は、1つのDataSet Typeと複数のDataTable Type宣言を追加する必要があります.たとえば、次のようにします.
オブジェクト配列はFlex側のArrayで直接受信できる
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