Hi, Would someone help me troubleshoot the following code. I seeing some behaviors I can not figure out.
I start by building a custom component in a scheduling application, one that contains a calendar selection and 2 HTTPRequests, one to obtain the locations that need to be filled on a given day and the other to obtain the people who are already scheduled on that day. When I return this information, I dynamically add another component to the panal. This second component is used to display the name of the location as well the name of the person, if there is one scheduled for the selected day. Then using drag and drop, I am able to add or update who is scheduled on the given day. Since I am dynamically adding the locations based on what is returned from the database, I am using an array to hold each of the custom components that I add to the panal. I use this so I can keep track of which component is added and then be able to update the properties of that component when I return the data about the people who are scheduled in the location. When I run the application for the first time, I am able to do what I want to do with the app, however, this is where the problem comes in. When I close the app and rerun it, I am no longer able to access data in the array from the callScheduleHandler method. As I trace this out in debug mode, the callLabel array is built as data is returned to the callLocationHandler but then it disappears. I can not find why this runs fine the first time, but then I am unable to construct the custom component on subsequent runs. Any thoughts on this would be greatly appreciated. Thanks Don <?xml version="1.0" encoding="utf-8"?> <mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:comp="components.*" layout="vertical" title="{selectedDisplayDate}" creationComplete="initComp()" horizontalAlign="center" width="350" height="800"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Label; import mx.rpc.events.ResultEvent; import mx.controls.Alert; [Bindable] private var selectedDisplayDate:String; [Bindable] private var selectedDate:Date = new Date(); [Bindable] private var locationData:XMLList; [Bindable] private var callScheduleData:XMLList; private var callLabel:Array= new Array; private var callAssignment:Array = new Array; [Bindable] private var callUserXML:XMLList; private function initComp():void { callLocations.send(); selectedDisplayDate = displayDate.format(calendarSelector.selectedDate) + " Call Schedule"; dailyCallSchedule.send(); } private function dateSelected(event:Event):void { selectedDisplayDate = displayDate.format(calendarSelector.selectedDate) + " Call Schedule"; selectedDate = calendarSelector.selectedDate; } private function callLocationHandler(event:ResultEvent):void { var locationXML:XML = event.result as XML; locationData = locationXML.row as XMLList; for each (var item:XML in locationData){ callLabel[item..callLocation_id] = new formField(); callLabel[item..callLocation_id].labelText = item..callLocation_DisplayName; callLabel[item..callLocation_id].callLocationId = item..callLocation_id; callLabel[item..callLocation_id].allowableDataFlag = item..deptCategory; callLabel[item..callLocation_id].callSelectedDate = mysqlDate.format(calendarSelector.selectedDate); addChild(callLabel[item..callLocation_id]); } } private function resetCallLocations():void { //remove all children } private function callScheduleHandler(event:ResultEvent):void { var callScheduleXML:XML = event.result as XML; callScheduleData = callScheduleXML.row as XMLList; for each (var item:XML in callScheduleData){ callLabel[item..callLocation_id].inputText = item..last_name; callLabel[item..callLocation_id].hasData = true; //Alert.show(callLabel[item..callLocation_id].labelText); } } private function callUsersHandler(event:ResultEvent):void { var callXML:XML = event.result as XML; callUserXML = callXML.row as XMLList; } ]]> </mx:Script> <mx:DateFormatter id="displayDate" formatString="EEEE MMMM DD YYYY"/> <mx:DateFormatter id="mysqlDate" formatString="YYYY-MM-DD"/> <mx:HTTPService id="callLocations" url="http://localhost/flex/html/callLocationsXML.php" useProxy="false" method="POST" resultFormat="e4x" result="callLocationHandler(event)"/> <mx:HTTPService id="dailyCallSchedule" url="http://localhost/flex/html/callScheduleDaily.php" useProxy="false" method="GET" resultFormat="e4x" result="callScheduleHandler(event)"> <mx:request xmlns=""> <callDate>{mysqlDate.format(calendarSelector.selectedDate)}</callDate> </mx:request> </mx:HTTPService> <mx:HTTPService id="callUsers" url="http://localhost/flex/html/callUsers.php" useProxy="false" method="POST" resultFormat="e4x" result="callUsersHandler(event)"/> <mx:DateChooser id="calendarSelector" click="dateSelected(event)" selectedDate="{selectedDate}" fontFamily="Georgia"/> </mx:Panel> <?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initComp()"> <mx:Metadata> [Event(name="formChange", type="events.FormChangeEvent")] </mx:Metadata> <mx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.charts.chartClasses.DataDescription; import events.FormChangeEvent; import mx.controls.Alert; import flash.events.Event; import mx.core.DragSource; import mx.managers.DragManager; import mx.events.DragEvent; import mx.core.IUIComponent; import mx.controls.Alert; import classes.UserLogin; import classes.UserInformation; [Bindable] public var labelText:String = "Label"; [Bindable] public var inputText:String = "Input"; [Bindable] public var imageSource:String = ""; [Bindable] private var hasContentChanged:Boolean = false; [Bindable] public var callLocationId:int = 0; [Bindable] public var callAssignedUserId:int = 0; [Bindable] public var callSelectedDate:String; public var hasData:Boolean; //flagged true if record set already exists in callTable. This will trip either insert or update mysql query [Bindable] private var currentUser:UserInformation = UserLogin.getInstance().UserInfo; [Bindable] public var allowableDataFlag:String = ''; //place to store user category that is allowed to take this call private function initComp():void { parent.addEventListener('formChange',formChangeEventHandler); } private function formChangeEventHandler(event:FormChangeEvent):void { Alert.show('field has been changed, id of field is = ' + hasData); } private function formDataChangeHandler():void { //need to send event in this function updating data if hasContentChaned == true } private function doDragEnter(event:DragEvent, format:String):void { if(event.dragSource.hasFormat(format)){ DragManager.acceptDragDrop(IUIComponent(event.target)); } } private function doDragDrop(event:DragEvent, format:String):void { var dragData:Object = new Object(); dragData=event.dragSource.dataForFormat(format); event.currentTarget.text = String(dragData.lastname + ', ' + dragData.firstname); callAssignedUserId = int(dragData.id); //Alert.show('user id = ' + dragData.id); //need to send data change back to server for update addUpdateCallAssignment.send(); } private function confirmTableEntry(event:ResultEvent):void { var updateResultsXML:XML = event.result as XML; if (updateResultsXML..success == '1'){ imageSource = "icons/accept.png"; } //trace(event); //trigger icon //update user list // } private function errorTableEntry(event:FaultEvent):void { trace(event); imageSource = "icons/cancel.png"; Alert.show('Error in updating the database'); } ]]> </mx:Script> <mx:HTTPService id="addUpdateCallAssignment" url="http://localhost/flex/callScheduleEntry.php" method="POST" resultFormat="e4x" result="confirmTableEntry(event)" fault="errorTableEntry(event)"> <mx:request xmlns=""> <userid>{callAssignedUserId}</userid> <calldate>{callSelectedDate}</calldate> <calllocation>{callLocationId}</calllocation> <enteredby>{currentUser.userID}</enteredby> </mx:request> </mx:HTTPService> <mx:Label text="{labelText}" toolTip="{callSelectedDate}"/> <mx:TextInput id="inputData" text="{inputText}" editable="false" focusOut="formDataChangeHandler()" dragDrop="doDragDrop(event, allowableDataFlag)" dragEnter="doDragEnter(event, allowableDataFlag)"/> <mx:Image id="imageID" source="{imageSource}" enabled="false"/> </mx:HBox>

