-1

I have an xml file which has employee details who have registered with the company. I am populating the xml using a local server. I have a login page and have a registration page. I have successfully populated my xml data into a datagrid and can not update or add new employee through text input field. Kindly help me with the required process to be followed to update my xml file in my hard drive.

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:s="library://ns.adobe.com/flex/spark"
           xmlns:mx="library://ns.adobe.com/flex/mx"
           xmlns:registration="services.registration.*"
           creationComplete="employeeService.send()" currentState="login"
           minWidth.registration="955" minHeight.registration="600">

    <s:layout>
        <s:BasicLayout/>
    </s:layout>
    <fx:Style source="assgpart2.css"/>


    <s:states>
         <s:State name="registration"/>
         <s:State name="login"/>
         <s:State name="home"/>
    </s:states>


    <fx:Script>

    <![CDATA[
        import events.Task;
        import mx.controls.Alert;
        import mx.events.FlexEvent;
        import mx.events.ValidationResultEvent;
        import mx.messaging.messages.ErrorMessage;
        import mx.rpc.events.ResultEvent;
        import mx.utils.ObjectUtil;

        private var indexCounter:Number = 0;

        private function validateForm():void
        {
            var vreName:ValidationResultEvent= un.validate();
            var vrepass:ValidationResultEvent= ps.validate();
            var vrecnfpass:ValidationResultEvent= cp.validate();
            var vrefName:ValidationResultEvent= fn.validate();
            var vrelName:ValidationResultEvent= ln.validate();
            var vreemail:ValidationResultEvent= em.validate();
            var vredate:ValidationResultEvent= datevalid.validate();

            if( vreName.type == ValidationResultEvent.VALID &&
                vrepass.type == ValidationResultEvent.VALID &&
                vrecnfpass.type == ValidationResultEvent.VALID &&
                vrefName.type == ValidationResultEvent.VALID &&
                vrelName.type == ValidationResultEvent.VALID &&
                vreemail.type == ValidationResultEvent.VALID &&
                vredate.type == ValidationResultEvent.VALID )
            {
                if((male.selected== '0') && (female.selected == '0'))
                {
                    mx.controls.Alert.show("you forgot to enter your gender....!");
                }
                else
                {
                    mx.controls.Alert.show("thank you for registaring with us....!!!");
                }
            }

            else
            {
                mx.controls.Alert.show("enter valid details");
            }
        }



        private function validatelogin(event:MouseEvent):void
        {
        //  getemployeesResult.token = login.getemployees(urname.text, passwd.text);
        }

    ]]>
    </fx:Script>

    <fx:Declarations>
    <s:HTTPService id="employeeService"
                   url="C:\Users\rknikhil\Adobe Flash Builder 4.6\Assignment1\src\assests\registration.xml"
                   result="employeeService_resultHandler(event)" method.registration="post">

    </s:HTTPService>
    <mx:StringValidator id ="un"  source =" {uname}" property = "text" />
    <mx:StringValidator id ="ps"  source =" {pswd}" property = "text" />
    <mx:StringValidator id ="cp"  source =" {cnfpass}" property = "text" />
    <mx:StringValidator id ="fn"  source =" {fname}" property = "text" />
    <mx:StringValidator id ="ln"  source =" {lname}" property = "text" />
    <mx:StringValidator  source =" {email2}"
                         property = "text"
                         minLength.registration="8"
                         tooShortError.registration="min of 8 length" 
                         />


    <mx:EmailValidator id ="em" source= "{email2}" 
                       property="text" 
                       requiredFieldError.registration="have to contain ----@---.com" />


    <mx:DateValidator id="datevalid"
                      source = "{datev}" 
                      inputFormat.registration="MM-DD-YYYY" 
                      property = "text"
                      requiredFieldError.registration= "enter in MM-DD-YYYY format" />  


    <s:RadioButtonGroup id="gender"/>

    <s:CallResponder id="getemployeesResult"/>
    <registration:Registration id="registration"
                               fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
                               showBusyCursor="true"/>
    <s:CallResponder id="getemployeesResult2"/>
    <s:CallResponder id="getemployeesResult3"/>

    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>




<s:Panel id="login" includeIn="login " x="0" y="0" width="100%" height="100%"
         backgroundAlpha="0.0" contentBackgroundAlpha="0.0" title="login"
         backgroundAlpha.login="400">

    <s:Label x="16" y="196" text="username"/>
    <s:TextInput id="urname" x="87" y="186"/>
    <s:Label x="12" y="239" text="password"/>
    <s:TextInput id= "passwd" x="87" y="238"/>
    <s:Button x="10" y="278" label="login" click="validatelogin(event)"/>
    <s:Button x="568" y="278" label="register" click ="currentState='registration'"/>

    <mx:DataGrid id="dataGrid" x="2" y="2"
                 creationComplete="dataGrid_creationCompleteHandler(event)"
                 dataProvider="{getemployeesResult.lastResult}" editable.login="true">
        <mx:columns>
            <mx:DataGridColumn dataField="username" headerText="username"/>
            <mx:DataGridColumn dataField="email" headerText="email"/>
            <mx:DataGridColumn dataField="firstname" headerText="firstname"/>
            <mx:DataGridColumn dataField="lastname" headerText="lastname"/>
            <mx:DataGridColumn dataField="dob" headerText="dob"/>
            <mx:DataGridColumn dataField="gender" headerText="gender"/>
        </mx:columns>
    </mx:DataGrid>


    <s:Label x="379" y="220" width="92" height="19"
             text="{employeeService.lastResult.employees.employee.username}"/>
</s:Panel>







    <s:VGroup includeIn="registration" y="15" width="50%" height="50%" horizontalCenter="221">

        <s:HGroup width="300" height="30">

            <s:FormItem label="username" required = "true">
                <s:TextInput id="uname" height="21" color="#D42222"
                             text="{getemployeesResult.lastResult[0].username}"/> 

            </s:FormItem>

        </s:HGroup>

        <s:HGroup width="300" height="30">
            <s:FormItem label="password" required = "true">
            <s:TextInput id="pswd" width="150" color="#D42222"
                         text="{getemployeesResult.lastResult[0].password}"/> 
            </s:FormItem>
        </s:HGroup>


        <s:HGroup width="300" height="30">
            <s:FormItem label="confirmpassword" required = "true" >
                <s:TextInput id="cnfpass" width="150" color="#D42222"
                             text="{getemployeesResult.lastResult[0].confirmpassword}"/>
            </s:FormItem>
        </s:HGroup>

        <s:HGroup width="300" height="30">
            <s:FormItem label="email" required = "true" >
                <s:TextInput id="email2" width="150" color="#D42222" text="{getemployeesResult.lastResult[0].email}" /> 
            </s:FormItem>
        </s:HGroup>

        <s:HGroup width="300" height="30">
            <s:FormItem label="first name" required = "true">
                <s:TextInput id="fname" width="150" color="#D42222"
                             text="{getemployeesResult.lastResult[0].firstname}"/> 
            </s:FormItem>
        </s:HGroup>


        <s:HGroup width="300" height="30">
            <s:FormItem label="last name" required = "true">
                <s:TextInput id="lname" width="150" color="#D42222"
                             text="{getemployeesResult.lastResult[0].lastname}"/> 
            </s:FormItem>
        </s:HGroup>



        <s:HGroup width="300" height="30">
            <s:FormItem label="date of birth" required = "true">
                <s:HGroup>
                    <s:TextInput id="datev" width="150" color="#D42222"
                                 text="{getemployeesResult.lastResult[0].dob}"/>
                </s:HGroup>
            </s:FormItem>
        </s:HGroup>

        <s:HGroup>
            <s:Label id= "gen" backgroundColor="#A6A1A1" chromeColor="#131212" color="#FCFAF8"
                     paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5"
                     text="gender"/>
            <s:RadioButton id="male" label="male" groupName="gender"/>
            <s:RadioButton id="female" label="female" groupName="gender" />

        </s:HGroup>
        <s:Button id="submit1" label="Submit" />
        <s:Button id="back" label="Back" click="currentState='login'"/>
    </s:VGroup>



    <s:Panel includeIn="home" x="4" y="2" width="100%" height="100%" fontFamily="Times New Roman"
         fontSize="20" fontWeight="bold" title="welcome to the home page">
    <s:BorderContainer x="0" y="0" width="100%" height="100%" fontFamily="Times New Roman"
                       fontSize="12">
        <s:Form includeIn="home" x="404" y="25" width="100%" height="100%">
            <s:FormItem label="name">
                <s:BorderContainer width="200" height="27">
                    <s:RichText width="100%" height="100%" color="#020202" fontSize="16"
                                horizontalCenter="0" paddingBottom="5" paddingLeft="5"
                                paddingRight="5" paddingTop="5" text="{urname.text} "
                                verticalCenter="0"
                                styleName.home="assgpart2.as"/>
                </s:BorderContainer>
            </s:FormItem>
            <s:FormItem label="comments">
                <s:BorderContainer width="200" height="97">
                    <s:RichEditableText left="0" top="0" width="100%" height="100%" text=""/>
                </s:BorderContainer>
            </s:FormItem>
            <s:Button label="confirm" cornerRadius="5"/>
        </s:Form>
        <s:Image includeIn="home" x="0" y="2" width="382" height="285" opaqueBackground="true"
                 smooth="true" source="images/Lighthouse.jpg"/>
    </s:BorderContainer>
    </s:Panel>
<mx:LinkButton x="70" y="250" label="forgot password ?"  focusColor="#FD0101"
               rollOverColor="#FCF8F8" textDecoration="underline"
               x.login="85" y.login="311"/>


</s:Application>
JasonMArcher
  • 14,195
  • 22
  • 56
  • 52
Nikhil Kumar
  • 141
  • 1
  • 14

2 Answers2

0

I looked at your code over & over, yet I can't find anything which would / could write to the XML file e.g. Write, Re-Write - Update or Add ??? What I see is simple a Read out of the XML file! regards aktell

aktell
  • 144
  • 1
  • 1
  • 4
  • I just want a code for that i am new to flash so could not find an appropriate method.thanks if you could help me with the code – Nikhil Kumar Aug 19 '14 at 09:12
  • Can't recall ever seen something like that before for saving XMl text to a hard-drive yet if you would need it for a AIR App. then that is very easy and there I would have all the code available, but of course these classes do only work for FLEX AIR. You would have to research that, but I'm somehow recall it did not work. Anyway, here is a Link about halve way down look for the SAVE option - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#load%28%29 – aktell Aug 19 '14 at 10:05
  • i have searched and find out that it can be done by array collection. We need to create an xml and have to use array to modify the data and then save it back to xml from array collection.But could not implement it. Can u help me how to do it with FLEX-AIR it would be a pleasure. – Nikhil Kumar Aug 19 '14 at 11:35
  • OK, I have copied this out of my App which I have use for a few years now, and which runs on my servers so it is very well proven and it works perfectly! but of course it was totally to my own requirements adapted and these are the read write basics only. Hope that will help you to sort your own Application !!! rgards aktell – aktell Aug 20 '14 at 06:17
  • thanks aktell it was really help full for my program. I have modified the code so that it can be done using FLEX AIR so that i can store my xml as an object and can retrive and edit it accordingly when required. thanks again aktell – Nikhil Kumar Aug 20 '14 at 11:30
0

OK, I have copied this out of my App which I have use for a few years now, and which runs on my servers so it is very well proven and it works perfectly! but of course it was totally to my own requirements adapted and these are the read write basics only. Hope that will help you to sort your own Application !!! rgards aktell

I used TextInput components !!!

            INIT ....
        import flash.filesystem.*;




<mx:Script>
    <![CDATA[

        import mx.rpc.events.FaultEvent;
        import mx.controls.Alert;

        import mx.rpc.events.ResultEvent;
        import mx.rpc.xml.SimpleXMLDecoder;

        import mx.rpc.http.HTTPService;

        private var myHTTP:HTTPService = new HTTPService();

        private function initConfigCall():void {

            myHTTP.url = "com/assets/data/.......? file.xml";

            myHTTP.send();
            myHTTP.resultFormat = "xml";
            myHTTP.addEventListener(ResultEvent.RESULT, resultHandler);
            myHTTP.addEventListener(FaultEvent.FAULT, faultHandler);    
        }

        private function resultHandler(evt:ResultEvent):void {

            var xmlStr:String = evt.result.toString();
            var xmlDoc:XMLDocument = new XMLDocument(xmlStr);
            var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
            var resultObj:Object = decoder.decodeXML(xmlDoc);

            // Removed [0] on single node !
            plnMsg.title = resultObj.application.configApp.appNewUpDate +''+  resultObj.application.configApp.appLastChanged;
            /* appLastChanged.text = resultObj.application.configApp.appLastChanged;
            appChangedSections.text = resultObj.application.configApp.appChangedSections; */

            myHTTP.disconnect();
            myHTTP = null;

            xmlStr = null;
            xmlDoc = null;
            decoder = null;
            resultObj = null;
        }
        private function faultHandler(event:mx.rpc.events.FaultEvent):void {

            var faultInfo:String="fault details: "+event.fault.faultDetail+"\n\n";
            faultInfo+="fault faultString: "+event.fault.faultString+"\n\n";
            mx.controls.Alert.show(faultInfo,"Fault Information");

            var eventInfo:String="event target: "+event.target+"\n\n";
            eventInfo+="event type: "+event.type+"\n\n";
            mx.controls.Alert.show(eventInfo,"Event Information");

            myHTTP.disconnect();
            myHTTP = null;

            myHTTP.removeEventListener(ResultEvent.RESULT, resultHandler);
            myHTTP.removeEventListener(FaultEvent.FAULT, faultHandler);
        }  
    ]]>
</mx:Script>






<!-- -->
<!-- *********************************************************************** -->
<!--    XML FILE READ OUT STREAM. -->
<!-- *********************************************************************** -->
<!-- -->
<mx:Script>
    <![CDATA[

        /* import flash.filesystem.FileStream;
        import flash.filesystem.FileMode;
        import flash.events.Event;
        import flash.filesystem.*; */

        private var myFileReadOut:File; 
        private var streamReadOut:FileStream = new FileStream(); 

        [Bindable] 
        private var xmlDataReadOut:XML;

        private function readOutXML():void {    

            myFileReadOut = File.desktopDirectory.resolvePath("Files/");
            myFileReadOut = myFileReadOut.resolvePath("dataONE.xml");

            if (myFileReadOut.exists) {

                streamReadOut.open(myFileReadOut, FileMode.READ);

                xmlDataReadOut = XML(streamReadOut.readUTFBytes(streamReadOut.bytesAvailable));


                Txt000_0.text = xmlDataReadOut.search000_0;
                PrefixTxt000_0.text = xmlDataReadOut.Prefix000_0;
                CountryTxt000_0.text = xmlDataReadOut.Country000_0;
                OnTxt000_0.htmlText = xmlDataReadOut.On000_0;

                streamReadOut.close();

                myFileReadOut = null;
                streamReadOut = null;

                xmlDataReadOut = null;
            }
        }
    ]]>
</mx:Script>








        private function saveStartData():void {

            xmlData = <urlGeneral/>;

            // 
            xmlData.search000_0 = Txt000_0.text;
            xmlData.Prefix000_0 = PrefixTxt000_0.text;
            xmlData.Country000_0 = CountryTxt000_0.text;
            xmlData.On000_0 = OnTxt000_0.text;

            var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';

            outputString += xmlData.toXMLString();
            outputString = outputString.replace(/\n/g, File.lineEnding);

            stream = new FileStream();

            stream.open(myFile, FileMode.WRITE);
            stream.writeUTFBytes(outputString);

            stream.close();


            // Do NOT Use ! Second SAVE can give ERROR.
            /* myFile = null; */

            stream = null;

            xmlData = null;
            outputString = null;

            System.disposeXML(xmlData);
        }
    ]]>
</mx:Script>





<mx:Script>
    <![CDATA[

        /* import flash.filesystem.*; */

        private var myFile:File; 
        private var myFileONE:File; 

        private var stream:FileStream; 
        private var streamONE:FileStream;

        [Bindable] 
        private var xmlData:XML;    
        [Bindable] 
        private var xmlDataONE:XML;         

        public function AppInit():void {

            myFile = File.desktopDirectory.resolvePath("Files/");
            myFile = myFile.resolvePath("dataONE.xml");

            // Change over from - (desktopDirectory).
            myFileONE = File.applicationStorageDirectory.resolvePath("Files/DataFiles/");
            myFileONE = myFileONE.resolvePath("....?.xml");

            openXML();
            openXMLONE();
        }

        private function openXML():void {

            stream = new FileStream();

            if (myFile.exists) {

                stream.open(myFile, FileMode.READ); 

                xmlData = XML(stream.readUTFBytes(stream.bytesAvailable));

                stream.close();

                PhraseOneTxt.text = xmlData.Phrase001_0;
                PhraseTwoTxt.text = xmlData.Phrase002_0;
                PhraseThreeTxt.text = xmlData.Phrase003_0;
                PhraseFourTxt.text = xmlData.Phrase004_0;
                PhraseFiveTxt.text = xmlData.Phrase005_0;
                PhraseSixTxt.text = xmlData.Phrase006_0;
                PhraseSevenTxt.text = xmlData.Phrase007_0;
                PhraseEightTxt.text = xmlData.Phrase008_0;
                PhraseNineTxt.text = xmlData.Phrase009_0;

                // Do NOT Use ! Second SAVE can give ERROR.
                /* myFile = null; */

                stream = null; 

                xmlData = null;

                System.disposeXML(xmlData);
            }
        }






        private function lastRecordedRun():void {

            xmlDataONE = <urlGeneral/>;

            // Base Run 0.
            xmlDataONE.search000_0 = Txt000_0.text;
            xmlDataONE.Prefix000_0 = PrefixTxt000_0.text;
            xmlDataONE.Country000_0 = CountryTxt000_0.text;

            xmlDataONE.infoLastRun = lastRunTxt.text;
            xmlDataONE.saveStartDate = lastRunDateTime.text;

            xmlDataONE.Phrase001_0 = PhraseOneTxt.text;
            xmlDataONE.Phrase002_0 = PhraseTwoTxt.text;
            xmlDataONE.Phrase003_0 = PhraseThreeTxt.text;
            xmlDataONE.Phrase004_0 = PhraseFourTxt.text;
            xmlDataONE.Phrase005_0 = PhraseFiveTxt.text;
            xmlDataONE.Phrase006_0 = PhraseSixTxt.text;
            xmlDataONE.Phrase007_0 = PhraseSevenTxt.text;
            xmlDataONE.Phrase008_0 = PhraseEightTxt.text;
            xmlDataONE.Phrase009_0 = PhraseNineTxt.text;

            var outputStringONE:String = '<?xml version="1.0" encoding="utf-8"?>\n';

            outputStringONE += xmlDataONE.toXMLString();
            outputStringONE = outputStringONE.replace(/\n/g, File.lineEnding);

            streamONE = new FileStream();

            streamONE.open(myFileONE, FileMode.WRITE);
            streamONE.writeUTFBytes(outputStringONE);

            streamONE.close();


            // Do NOT Use ! SAVE can give ERROR.
            /* myFileONE = null; */

            streamONE = null;

            xmlDataONE = null;
            outputStringONE = null;

            System.disposeXML(xmlDataONE);


            startGCCycle();
        }
aktell
  • 144
  • 1
  • 1
  • 4