Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > потеря данных


Автор: FataList 9.4.2012, 10:41
Здравствуйте!

БД (база даных) <----> CF(ColdFusion 9) <-----> Приложение (main.swf)

Флешка (main.swf) лежит на сервере. Запускаю ее удаленно http://192.168.111.1/dev/main.swf с локальной машины.

1) Флешка открывается, в ней есть форма. Данные формы сохраняются и записываются в БД. Закрыли форму.
2) Открыли ее вновь и данные (которые сейчас заполняли) должны были загрузиться и отобразиться в форме.
Но этого не случилось.
Тест показал, что после запроса(на получение данных для формы из БД) данные получены CF и отправлены во флешку, но во флешку уже приходит пустой запрос, т.е. данные потерялись на этапе 
CF(ColdFusion 9) -----> Приложение (main.swf)
есть данные нет данных 

Локально все хорошо.

Видимо проблема с серваком, но если напрямую указать путь, например к фото на серваке (которое было загружено ранее), то она отобразится в форме, т.е. не приходят именно данные почему-то...

Из-за чего они могут не доходить до адресата?

на серваке: IIS 6.0, Windows 2003 
C:\Inetpub\wwwroot\dev\main.swf


Причем ответ приходит в виде ac:ArrayCollection. 
ac[0] - Object с кучей подданных, если можно так выразиться.
Так вот, когда все хорошо, то данные в Object есть.
А когда все плохо, то именно ДАННЫХ в Object нет. 
А ас[0] приходит, но без данных.
Грешил, что сервак данные /"не отдает/", но ведь пользователь проверку (логин/пароль) проходит. 
А уже потом заполняет форму.

Автор: Maksys 11.4.2012, 06:47
Проблема решается хорошим сном, и профилированием кода с утра. На стороне сервера. А за тем на стороне флешки. Яб для начала заменил флешку простым реквестером и смотрел что уходит от сервака. И так далее.

Автор: FataList 11.4.2012, 14:36
Тут стало веселее... 

Добавил в форму, для теста, DataGrid и привязал к нему напрямую вызов этого метода, который с пустыми данными приходит.
И что вы думаете? В таблице они отображаются!
relative.cfc (здесь хранятся методы для работы с БД).


Код


public var relatives:Relatives = new Relatives();


protected function init():void
{
      relatives.addEventListener(ResultEvent.RESULT, onResult_relatives);
      relatives.addEventListener(FaultEvent.FAULT, onFault_relatives);
}

protected function getRelativeById(IdRelative:Number):void
{
      relatives.getRelativeById(IdRelative); 
}

private function onResult_relatives(event:ResultEvent):void
{
      // здесь ловлю данные 
      var ac:ArrayCollection = new ArrayCollection();
      ac = event.currentTarget.operations.getRelativeById.lastResult;
      var obj:Object = ac.getItemAt(0);

      // и уже из obj получаю локально данные, а на серваке приходят "undefined"
      // локально: obj.name = "Иван"; на серваке obj.name = "undefined"
}





К тому же так же решил прослушать и DataGrid... результат тоже "undefined", но данные в таблице!
Что за "мистика"!?

Автор: FataList 12.4.2012, 09:51
У меня ощущение, что проблема с типами данных...

Автор: Maksys 12.4.2012, 10:07
Да скорее всего отсутствует серилизация данных.
я просто не могу понять, каким видом соединения происходит коммуникация между сервером и флешем?
http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cfd.html

Автор: FataList 12.4.2012, 13:14
Коммуникация между сервером и флешем происходит благодаря ColdFusion.
В частности к файлу relative.cfc, который привязан к приложению. 
Как сделано здесь:
http://help.adobe.com/ru_RU/Flex/4.0/FlexTutorials/WSbde04e3d3e6474c475a1e181210cb830d1-8000.html

Вот через это (Данные/службы в Flash Builder 4)
user posted image

А отсюда сделал у себя DataGrid для теста в форме
http://help.adobe.com/ru_RU/Flex/4.0/FlexTutorials/WSbde04e3d3e6474c44e9f0a921210cbd7a14-8000.html



Кстати, сделал тип данных : RelativeDataType (как видно из картинки)
И после этого данные в DataGrid перестали правильно отображаться (приходят только нули в столбцы (idrelative:int и iduser:int), 
т.е. там где тип данных int - приходит ноль. А в остальные пусто(null) ).

Здесь возвращаемый тип данных RelativeDataType  у метода (relatives.getRelativeById(IdRelative))
Стало так: 
user posted image


Здесь возвращаемый тип данных Object  у метода (relatives.getRelativeById(IdRelative))
А было так:
user posted image

Вот поэтому и грешу на типы данных.

А то что описано  в вашей ссылке: этого у меня нет, по крайней мере я не писал. Есть только то, что создалось само при настройке Данные/службы в Flash Builder 4.

Вот в чем может быть беда? По ощущением какая-то фигня, может разрешение где приписать надо, видимо на серверной стороне не знают, что такое за тип данных RelativeDataType. Как серверу об этом узнать? Или может в чем-то другом беда...

Автор: FataList 12.4.2012, 16:32

Код

<cffunction name="getRelativeByIdFirstname" output="false" access="remote" returntype="any" >
    <cfargument name="IdRelative" required="yes" type="numeric"/>    
          
    <cfset var qGetRelativeByIdFirstname="">
    <cfquery name="qGetRelativeByIdFirstname" datasource="familytreeSource">
        SELECT IdRelative,FirstName,IdUser
        FROM relatives
        WHERE IdRelative = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#IdRelative#">    
    </cfquery>
    <cfreturn qGetRelativeByIdFirstname.FirstName>
</cffunction>


Вот метод, который забирает простой тип данных. В данном случае получаю Имя.
А когда я пытаюсь передать свой тип данных - пользовательский (RelativeDataType) , то беда. 
Надо разобраться, каким образом сервер должен узнавать о пользовательских типах данных.

Автор: FataList 13.4.2012, 09:22
Цитата

Проблема решается хорошим сном, и профилированием кода с утра. 


Проблема решилась  профилированием кода с 1 ночи и до 8 утра. 
В результате метод, который работал, дома после правки кода, стал неадекватно работать - перестал доходить до места, где заполнял таблицу данными. Это первое.
А второе, что могло быть... на локалке сервер C:\ColdFusion9\wwwroot и cfc файлы там же, а  на серваке это C:\Inetpub\wwwroot
может и из-за этого что пути разные были, но вряд ли.
А третье, это Данные/службы в Flash Builder : сначала тестовый пример, который билдер предлагает сделать, через RDS. А уже потом в получившейся cfc файл добавил свои методы. И скорее всего из-за этого была проблема.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)