views:

19

answers:

1

Hi - I am working on a function to generate a form at runtime in Flex based on a call to the DB. The call to the DB returns the field types, id, tooltips etc as an arraycollection, the arraycollection is then parsed in order to ascertain what control to display based on the type field in the array - this bit works fine.

However, i am stuck on trying to save the form fields back to the database using a CFC.

my form rendering code is as follows but how do i save values entered back to the database?

my rendering code..

    [Bindable]
    public var getglobalprofileb:ArrayCollection;

    public function init(event:ResultEvent):void {
                getglobalprofileb = event.result as ArrayCollection;

        var form:Form = new Form();

          for each(var elements:Object in getglobalprofileb)

            {  
                    switch(elements.type.toString()) 
                            { 
                                case "text": 

                                            var fi:FormItem = new FormItem(); 
                                            fi.toolTip = elements.tooltip.toString();
                                            fi.required = elements.required;
                                            fi.direction = elements.direction;

                                            var li:Label = new Label();
                                            li.text = elements.label;
                                            li.width = 100;

                                            var ti:TextInput = new TextInput(); 
                                            ti.text = elements.default_text.toString();
                                            ti.width = 200;
                                            ti.id = elements.id;

                                            form.addChild(fi);
                                            fi.addChild(li);
                                            fi.addChild(ti);

                                               break; 
                                  case "int": 
                                  break;


                                case "textarea": 
                                            var fa:FormItem = new FormItem(); 
                                            fa.toolTip = elements.tooltip;
                                            fa.required = elements.required;
                                            fa.direction = elements.direction;

                                            var la:Label = new Label();
                                            la.text = elements.label;
                                            la.width = 100;

                                            var ta:TextArea = new TextArea(); 
                                            ta.text = elements.default_text;
                                            ta.id = elements.id;
                                            ta.width = 200;
                                            ta.height = 100;

                                            form.addChild(fa);
                                            fa.addChild(la);
                                            fa.addChild(ta);

                                               break; 
                                  case "int": 
                                  break; 


                                  case "DateField": 
                                            var fdf:FormItem = new FormItem(); 
                                            fdf.toolTip = elements.tooltip;
                                            fdf.required = elements.required;
                                            fdf.direction = elements.direction;

                                            var ldf:Label = new Label();
                                            ldf.text = elements.label;
                                            ldf.width = 100;

                                            var tdf:DateField = new DateField(); 
                                            tdf.formatString="DD/MM/YYYY";
                                            tdf.width = 200;
                                            tdf.id = elements.id;

                                            form.addChild(fdf);
                                            fdf.addChild(ldf);
                                            fdf.addChild(tdf);

                                               break; 
                                  case "int": 
                                  break; 


                                  case "combobox": 
                                            var fcb:FormItem = new FormItem(); 
                                            fcb.toolTip = elements.tooltip;
                                            fcb.required = elements.required;
                                            fcb.direction = elements.direction;

                                            var lcb:Label = new Label();
                                            lcb.text = elements.label;
                                            lcb.width = 100;

                                            var tcb:combobox = new ComboBox();
                                            tcb.id = elements.id;
                                            tcb.width = 200;


                                            var datas:String = elements.Datas;
                                            var arr:ArrayCollection = new ArrayCollection ( 
                                                            datas.split(",")  
                                                                   );

                                            tcb.dataProvider = arr ;

                                            form.addChild(fcb);
                                            fcb.addChild(lcb);
                                            fcb.addChild(tcb);

                                            break; 
                                  case "int": 
                                  break; 

                                  case "HSlider": 
                                            var fhs:FormItem = new FormItem(); 
                                            fhs.toolTip = elements.tooltip;
                                            fhs.required = elements.required;
                                            fhs.direction = elements.direction;

                                            var lhs:Label = new Label();
                                            lhs.text = elements.label;
                                            lhs.width = 100;

                                            var ths:HSlider = new HSlider(); 
                                            ths.tickInterval = 10;
                                            ths.liveDragging = true;
                                            ths.snapInterval = 1;
                                            ths.width = 200;
                                            ths.id = elements.id;

                                            form.addChild(fhs);
                                            fhs.addChild(lhs);
                                            fhs.addChild(ths);

                                           break; 
                                  case "int": 
                                  break; 


                                case "CheckBox": 
                                            var fchb:FormItem = new FormItem(); 
                                            fchb.toolTip = elements.tooltip;
                                            fchb.required = elements.required;
                                            fchb.direction = elements.direction;

                                            var lchb:Label = new Label();
                                            lchb.text = elements.label;
                                            lchb.width = 100;

                                            var tchb:CheckBox = new CheckBox (); 
                                            tchb.id = elements.id; 

                                            form.addChild(fchb);
                                            fchb.addChild(lchb);
                                            fchb.addChild(tchb);

                                            break; 
                                  case "int": 
                                  break; 


                                  case "NumericStepper": 
                                            var fns:FormItem = new FormItem(); 
                                            fns.toolTip = elements.tooltip;
                                            fns.required = elements.required;
                                            fns.direction = elements.direction;

                                            var lns:Label = new Label();
                                            lns.text = elements.label;
                                            lns.width = 100;

                                            var tns:NumericStepper = new NumericStepper (); 
                                            tns.id = elements.id; 

                                            form.addChild(fns);
                                            fns.addChild(lns);
                                            fns.addChild(tns);

                                            break; 
                                  case "int": 
                                  break; 


                                case "Richtext": 
                                            var frte:FormItem = new FormItem(); 
                                            frte.toolTip = elements.tooltip;
                                            frte.required = elements.required;
                                            frte.direction = elements.direction;

                                            var lrte:Label = new Label();
                                            lrte.text = elements.label;
                                            lrte.width = 100;

                                            var trte:RichTextEditor = new RichTextEditor (); 
                                            trte.width = 400;
                                            trte.id =  elements.id;


                                            form.addChild(frte);
                                            frte.addChild(lrte);
                                            frte.addChild(trte);

                                           break; 
                                  case "int": 
                                  break; 




                             }
                     }    

                    this.addChild( form);



                 }   
A: 

Send the data back to CF the same way Flex is receiving it.

Create an instance of a generic Object, add your properties to it; I'm guessing id, default_text, label, direction, required, tooltip, etc... Add a 'finalVAlue' property.

In CF, I believe a default object should show up as a structure; although if possible I strongly recommend creating a Value Object in both cF and Flex for this data and make use of the Flex Remoting CFC to AS3 object mapping.

If you need to access all the form elements in Flex that you created, without knowing the ID, you can perform a loop over all the children using numChildren and getChildAt.


Update: Here is a sample of creating a generic object and adding properties:

var newObject : Object = new Object();
newObject.property1 = 'some value';
newObject.property2 = 'some other value;
newObject.finalValue = textInput.text;
www.Flextras.com
Ace thanks - do you have a quick example of creating the generic object and adding properties especially the setting of a 'final value' - fairly new to this :)
charlie
I updated my answer with a quick code sample.
www.Flextras.com