Взаимодействие Flex с веб-службой ASP.NET - Использование кода

ОГЛАВЛЕНИЕ

Использование кода

SQL

С целью демонстрации была создана пробная база данных test и пробная таблица tblEmployee с помощью следующей схемы. Она нужна для выполнения прикрепленного примера.

CREATE TABLE [dbo].[tblEmployee](

[EmpId] [nchar](50) NULL,

[EmpName] [nchar](50) NULL,

[EmpEmail] [nchar](50) NULL

) ON [PRIMARY]      

Веб-служба ASP.NET

Веб-служба является обычным проектом веб-службы ASP.NET с двумя веб-методами: один  - для получения записей из базы данных, а второй  - для сохранения новой записи.
Предупреждение: Эти файлы были созданы только для демонстрации и не подчиняются никаким стандартам в веб-службе ASP.NET или файле Flex MXML.

public class Service : WebService
{
    SqlConnection con = new SqlConnection
    ("Data Source=localhost;Initial Catalog=test;User id=;Password=");

 
    // метод для получения всех записей из базы данных
    [WebMethod]
    public List<Employee> GetEmployees()
    {
        // метод не подчиняется никаким стандартам программирования, служит только для //демонстрации.
        var emplist = new List<Employee>();
        Employee emp;
        var da = new SqlDataAdapter("SELECT EmpId,
        EmpName, EmpEmail from tblEmployee", con);
        var dt = new DataTable();
        da.Fill(dt);
        foreach (DataRow dr in dt.Rows)
        {
            emp = new Employee
                      {
                          EmpId = dr["EmpId"].ToString(),
                          EmpName = dr["EmpName"].ToString(),
                          EmpEmail = dr["EmpEmail"].ToString()
                      };
            emplist.Add(emp);
        }      
       
        return emplist;
    }
   
    // метод для сохранения записи
    [WebMethod]
    public void SaveEmployee(string empId, string empName, string empEmail)
    {
        // метод не подчиняется никаким стандартам программирования, служит только для //демонстрации
        var cmd = new SqlCommand("INSERT INTO tblEmployee
    (EmpId, EmpName, EmpEmail) VALUES(@empid, @empname, @empemail)",con);
        cmd.Parameters.Add(new SqlParameter("@empid", empId));
        cmd.Parameters.Add(new SqlParameter("@empname", empName));
        cmd.Parameters.Add(new SqlParameter("@empemail", empEmail));
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }   
}

// класс работника
public class Employee
{
    public string EmpId = string.Empty;
    public string EmpName = string.Empty;
    public string EmpEmail = string.Empty;
}

Flex MXML

Сначала надо добавить тег <mx:WebService> в файл mxml приложения Flex следующим образом:

<mx:WebService id="ws" wsdl="http://localhost/TestWebService/Service.asmx?WSDL" 
    fault="fault(event)">
<mx:operation
name="GetEmployees"
resultFormat="object"
result="GetEmployees(event)"
/>
<mx:operation
name="SaveEmployee"
resultFormat="object"
result="SaveEmployee(event)"
/>
</mx:WebService>

Обратите внимание на вызов веб-службы с URL: http://localhost/TestWebService/Service.asmx?WSDL.

Были определены две операции:
1.    GetEmployees
2.    SaveEmployee

Также определенные в веб-службе ASP.NET. Когда инициируется вызов требуемой веб-службы, отрабатывает соответствующий обработчик события result, и извлекаются данные, отправленные веб-службой в том прикрепленном методе события. Здесь прикрепленные методы обработчика события - GetEmployees(event) и SaveEmployee(event).
Можно вызвать веб-службу динамически, не используя эти теги. Также существуют асинхронные методы Токена, выходящие за рамки данной статьи.

Потом был добавлен DataGrid, чтобы показать записи, полученные из веб-службы. Также использовалась Form для осуществления ввода данных для добавления новых записей.

<mx:Panel>, <mx:HBox> и т. д. придают приятный вид приложению. Они никак не связаны с вызовами веб-службы.

Как это работает

В теге <mx:Applicaiton> использован creationComplete="init()", чтобы метод init() вызывался при загрузке приложения Flex. Внутри init() вызывается метод веб-службы ws.GetEmployees().

Как только вызван метод ws.GetEmployees(), прикрепленный обработчик result вызывается в случае успешности вызова. Помните, что прикрепленный общий обработчик fault срабатывает при наличии ошибки, связанной с веб-службой.

Прикрепленный обработчик результата ws.GetEmployees() следующий:

private function GetEmployees(event:ResultEvent):void {
// привязать данные из веб-службы к сетке данных
datagrid.dataProvider = event.result;
}

В этом методе входящие данные привязываются к сетке данных для показа записей.

Далее сохраняются записи. Использовано три поля <mx:TextInput> и одна <mx:Button> для ввода данных новой записи. Прикреплен обработчик события AddRecord(event), инициирующий событие click.

<mx:Form x="608" y="74" width="100%" height="100%" borderStyle="solid">
<mx:FormItem label="EmpId">
<mx:TextInput width="106" id="txtEmpId"/>
</mx:FormItem>
<mx:FormItem label="EmpName">
<mx:TextInput width="106" id="txtEmpName"/>
</mx:FormItem>
<mx:FormItem label="EmpEmail">
<mx:TextInput width="106" id="txtEmpEmail"/>
</mx:FormItem>

<mx:FormItem width="156" horizontalAlign="right">
<mx:Button label="Add" id="btnAdd" click="AddRecord(event)"/>
</mx:FormItem>
</mx:Form>

Когда пользователь нажмет эту кнопку –  сработает соответствующий метод.

private function AddRecord(event:MouseEvent):void {
// сохранить запись с помощью метода веб-службы
ws.SaveEmployee(txtEmpId.text, txtEmpName.text, txtEmpEmail.text); //
}

Этот метод вызывает метод WebService ws.SaveEmployee() с параметрами, получаемыми из формы ввода данных. Снова сработает обработчик результата этого метода веб-службы, то есть:

private function SaveEmployee(event:ResultEvent):void {
// для обновления сетки данных;
ws.GetEmployees();
Alert.show("Saved Successfully");
}

При этом событии снова вызывается ws.GetEmployees() веб-службы для обновления DataGrid, чтобы она отобразила новую запись. Благодаря наличию вызова Alert.show() мгновенно поступает уведомление "Сохранено успешно", как только данные сохранены.