When iterating over properties in ActionScript there is no guarantee of the order unfortunately. I can't think of a front-end solution that would solve this problem. I believe the only solution would be on the server's side.
Kyle Kyle McKnight Senior UI Engineer - Accesso 602.515.1444 (M) On Tue, Jul 4, 2017 at 10:55 AM, Jeffry Houser <[email protected]> wrote: > Hi Everyone, > > I'm updating a Point of Sale system that was built with Flex and AIR > using the Cairngorm framework. > > The code integrates with a custom server provided by my client's payment > processor vendor. Part of their requirement is that parameters be form > posted to their server in a specific order. The Apache Flex framework does > not appear to retain the parameter order of the object's parameters. Has > anyone run into this before? > > More specifics, with code: > > 1) Service object set up in the Cairngorm Services.mxml: > > <mx:HTTPService id="service" > showBusyCursor="false" > requestTimeout="240" > method="post" contentType="application/x-www > -form-urlencoded" > url="http://localhost.:16448/" resultFormat="e4x" > /> > > 2) Create Parameter object and call service method; this is done in a > Cairngorm Delegate: > > var parameters : Object = new Object(); > parameters.firstParameter = "firstOne"; > parameters .amount = 100; > parameters .otherParameters = "Other Random Misc Data"; > parameters.lastParameter = "LastOne"; > > Then make the call: > > var call : Object = this.service.send(parameters); > call.addResponder( this.responder ); > > 3) Flex Framework class mx.rpc.httpAbstractOperation, starting around line > 862. This appears to loop over properties using classinfo.properties . > This seems to get an alphabetical list of properties from my object and add > them to the paramsToSend object: > > > else if (ctype == CONTENT_TYPE_FORM) > { > paramsToSend = {}; > var val:Object; > > if (typeof(parameters) == "object") > { > //get all dynamic and all concrete properties from the > parameters object > var classinfo:Object = ObjectUtil.getClassInfo(parame > ters); > > for each (var p:* in classinfo.properties) > { > val = parameters[p]; > if (val != null) > { > if (val is Array) > paramsToSend[p] = val; > else > paramsToSend[p] = val.toString(); > } > } > } > else > { > paramsToSend = parameters; > } > } > > 4) Looking at the raw data in the Flash Builder Network Monitor; the final > request doesn't have the parameters in alphabetical order. > > otherParameters=Other%20Random%20Misc%20Data&lastParameter= > LastOne&firstParameter=firstOne&amount=100 > > With this small sample it appears that the parameters are in reverse > alphabetical order, but with the actual request data they are in a > seemingly random--but always consistent--order. > > > ------- > > Thanks for reading this far. My first attempt at a solution was to > create the POST parameter string manually and use that as the parameter > object. However in that case the body of the POST request was blank when > reviewing it in the service monitor. > > So, has anyone run into this before? What was your solution? > > > > -- > > Jeffry Houser > Technical Entrepreneur > http://www.dot-com-it.com > http://www.jeffryhouser.com > 203-379-0773 > >
