GregoryR
20.08.2010, 09:42
Столкнулся с такой вот проблемой:
Есть Flex4, он соединяется посредством php (и Zend) с MySQL. Чтение базы происходит корректно, а вот операции с изменением данных нет, т.е. попытка удалить запись выполняется без ошибок (правда мы не получаем событие ответа от респондера), но данные не изменяются.
Самое интересное, что в режиме "Тестовая операция" данные в MySQL изменяются! В режиме же запуска из AS3 - нет.
Вот пример AS3 обработчика отправки данных по нажатию кнопки:
var vehicles:Vehicles = new Vehicles();
vehicles.id_userowner = parseInt(id_userownerTextInput.text);
vehicles.name = nameTextInput.text;
vehicles.registration_number= registrationNumber.text;
createVehiclesResult.token = vehiclesService.createVehicles(vehicles);
Есть так же теги:
<valueObjects:Vehicles id="vehicles"/>
<s:CallResponder id="createVehiclesResult" result="createVehiclesResult_resultHandler(event)"/>
но функция "createVehiclesResult_resultHandler" так и не вызывается.
Особая засада с тем, что тестовая операция создания записи с подключенным сервисом и следующими входными данными
{
name:Mersedes,
id_userowner:5,
registration_number:x545x96
}
срабатывает перкрасно и запись в MySQL базе данных появляется, а вот из AS3 - нет.
----
Буду рад за любые идеи и советы. Спасибо.
--------------------------------------------------------------------------------------------------
UDP: решение найдено
Похоже это внутренний глюк Flash Builder 4.
Решается изменением типов функции и переменных:
Было
public function createUsers(item:valueObjects.Users) : mx.data.ItemReference
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;
return _internal_token;
}
Стало
public function createUsers(item:valueObjects.Users) : mx.rpc.AsyncToken
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(item) as mx.rpc.AsyncToken;
return _internal_token;
}
Кроме того выявлен еще один баг, функция удаления записей то же не работала.
Решается так: ищем файл php с описанием сервиса, в нем в изменяем наименование функции вида
public function delete<table> (например deleteUsers)
на
public function delete<table>_test (например deleteUsers_test)
после этого меняем название в AS-файле вида _Super_<table>Service (например _Super_UsersSerivice)
в строке
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers");
на
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers_test");
функции public function delete<table>(itemID:Object) : mx.rpc.AsyncToken
после этого всё начинает работать как надо, потом можно поменять названия функций на исходные, но все продолжит работать корректно.
--------------------------------------------------------------------------------------------------
Есть Flex4, он соединяется посредством php (и Zend) с MySQL. Чтение базы происходит корректно, а вот операции с изменением данных нет, т.е. попытка удалить запись выполняется без ошибок (правда мы не получаем событие ответа от респондера), но данные не изменяются.
Самое интересное, что в режиме "Тестовая операция" данные в MySQL изменяются! В режиме же запуска из AS3 - нет.
Вот пример AS3 обработчика отправки данных по нажатию кнопки:
var vehicles:Vehicles = new Vehicles();
vehicles.id_userowner = parseInt(id_userownerTextInput.text);
vehicles.name = nameTextInput.text;
vehicles.registration_number= registrationNumber.text;
createVehiclesResult.token = vehiclesService.createVehicles(vehicles);
Есть так же теги:
<valueObjects:Vehicles id="vehicles"/>
<s:CallResponder id="createVehiclesResult" result="createVehiclesResult_resultHandler(event)"/>
но функция "createVehiclesResult_resultHandler" так и не вызывается.
Особая засада с тем, что тестовая операция создания записи с подключенным сервисом и следующими входными данными
{
name:Mersedes,
id_userowner:5,
registration_number:x545x96
}
срабатывает перкрасно и запись в MySQL базе данных появляется, а вот из AS3 - нет.
----
Буду рад за любые идеи и советы. Спасибо.
--------------------------------------------------------------------------------------------------
UDP: решение найдено
Похоже это внутренний глюк Flash Builder 4.
Решается изменением типов функции и переменных:
Было
public function createUsers(item:valueObjects.Users) : mx.data.ItemReference
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.data.ItemReference = _internal_operation.send(item) as mx.data.ItemReference;
return _internal_token;
}
Стало
public function createUsers(item:valueObjects.Users) : mx.rpc.AsyncToken
{
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("createUsers");
var _internal_token:mx.rpc.AsyncToken = _internal_operation.send(item) as mx.rpc.AsyncToken;
return _internal_token;
}
Кроме того выявлен еще один баг, функция удаления записей то же не работала.
Решается так: ищем файл php с описанием сервиса, в нем в изменяем наименование функции вида
public function delete<table> (например deleteUsers)
на
public function delete<table>_test (например deleteUsers_test)
после этого меняем название в AS-файле вида _Super_<table>Service (например _Super_UsersSerivice)
в строке
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers");
на
var _internal_operation:mx.rpc.AbstractOperation = _serviceControl.getOperation("deleteUsers_test");
функции public function delete<table>(itemID:Object) : mx.rpc.AsyncToken
после этого всё начинает работать как надо, потом можно поменять названия функций на исходные, но все продолжит работать корректно.
--------------------------------------------------------------------------------------------------