Perfect, thanks! With a bit of a mixture of typing and then of using that 
format with the accessing, it worked.. I didn't want to have to create class 
definitions for all of these various options but just using the ["RESULT_CODE"] 
notification in ActionScript means that the generated (and minified) JavaScript 
creates it as .RESULT_CODE and this then works with the dynamically recreated 
data.

Thanks for the support, one step closer as now our release builds are picking 
up the database connection (makes our customer happier as they don't like the 
slow loading time for all the .js files in a debug build...)

cheers



-----Original Message-----
From: Carlos Rovira <[email protected]> 
Sent: 22 July 2019 14:52
To: [email protected]
Subject: [EXTERNAL] Re: AMF and class aliases

Hi Andrew,

first of all if you are using ArrayCollection and not ArrayList you must 
configure that. In my code I'm using this to configure ArrayList as the type 
royale must use when send and receive java ArrayCollection:

registerClassAlias("flex.messaging.io.ArrayCollection", ArrayList);

(don't remember if Greg made it default to ArrayCollection)

about serialization/deserialization issues, maybe other could give you better 
clues than me, since all our objects are strongly typed so objects in 
collections are classes and if that classes has collections then the sub 
objects will be typed as well.

I found that when I have problems when something runs in debug mode but not in 
release mode for deserialization issues the object bracket access use to work 
always, so I think is what you need to do, so for example in you case I think 
this should work:

results[I]["outputArray"]["source"][0][RESULT_CODE]

HTH

Carlos

El lun., 22 jul. 2019 a las 11:17, Frost, Andrew (<[email protected]>)
escribió:

> Hi again
>
> One extra question here: we have the AMF connection working fine now 
> in Debug mode, but in Release mode the minifier is changing the 
> property names of our JavaScript (compiled from ActionScript), but 
> these are not being reflected in the objects that are deserialised.
>
> So for example, we are receiving an ArrayCollection, and accessing one 
> element's property directly e.g.:
> var results : ArrayCollection = resultEvt.result as ArrayCollection; 
> for (var i : uint = 0; i < results.length; i++) {
>   var resultCode : String = 
> results[i].outputArray.source[0].RESULT_CODE;
> ...
>
> There are a couple of things going on:
> (a) each element in the main ArrayCollection has an "outputArray" 
> property which is itself an ArrayCollection. We could cast it into an 
> ArrayCollection variable I guess, but instead have just added "source" 
> so that the JavaScript doesn't try adding the [] operator to the 
> ArrayCollection object directly...
> (b) the contents of this ArrayCollection, in this particular case, is 
> a simple object {RESULT_CODE: "OK"} - which I can see in the console 
> when we add some trace. The js-debug file has the same structure as 
> the ActionScript; but the js-release file has a mapping at the start 
> "nc='RESULT_CODE'" and then accesses the data with "
> a.L(c).outputData.source[0].tP" (and that's even weirder as why is it 'tP'
> rather than 'nc'?!)
>
>
> I guess the questions I have are:
>
> 1) Is there a way to prevent the Google closure compiler from 
> minifying a particular property name/string?
> or
> 2) Are we going to have to just declare classes for all of these and 
> do a typecast e.g. along the lines of:
> class ResultCode { [Bindable]public var RESULT_CODE; } and then var 
> resultCodeObj : ResultCode = results[i].outputArray.source[0]; var 
> resultCode : String = resultCodeObj.RESULT_CODE;
>
>
> thanks
>
>    Andrew
>
>
> --
> Carlos Rovira
> https://clicktime.symantec.com/3R6MVFpF7GfH9MBneA8xfU97Vc?u=http%3A%2F
> %2Fabout.me%2Fcarlosrovira
>
>
>
>

Reply via email to