Aquí podría ser tu PUBLICIDAD


Flex: guarda una cuadrícula de datos editable a través de un CFC

votos
1

Tengo una cuadrícula de datos editable que necesito poder guardar con otros campos de formulario a través de un CFC en ColdFusion.

Básicamente, el objetivo es que haya varios lugares recuperados a través de un RO que componen la primera columna; las columnas restantes son tipos de datos, es decir, datos demográficos, notas de clientes, citas, etc., la idea es que el usuario marque cada una de las casillas de verificación del cuadrícula para indicar que están felices de compartir el tipo de datos con esas ubicaciones. Tiene que hacerse de esta manera ya que las ubicaciones pueden cambiar, por lo que podría haber dos o cuatro o más con el tiempo.

¡El código corre hasta ahora y se ve bien, pero el bit de ahorro me está volviendo loco! Por favor ayuda.

Gracias de antemano :) el código (abreviado por razones de cordura) está a continuación:

public function handleconsentResult(event:ResultEvent):void {
            consentDatagrid.dataProvider = event.result;
            }
<mx:RemoteObject id=consentQuery
    destination=ColdFusion
    source=Build3.consent
    showBusyCursor=true>
    <mx:method name=getconsent result=handleconsentResult(event) fault=fault(event) />

<mx:DataGrid id=consentDatagrid creationComplete=init() width=98% wordWrap=true textAlign=center>
                        <mx:columns>
                            <mx:DataGridColumn headerText=Organisation width=100 textAlign=left id=Location dataField=LocationName wordWrap=true/>
                            <mx:DataGridColumn headerText=Demographics  width=100 wordWrap=true textAlign=center itemRenderer=mx.controls.CheckBox rendererIsEditor=true editorDataField=ClientDemographics />
                            <mx:DataGridColumn headerText=Appointments  width=100 wordWrap=true textAlign=center itemRenderer=mx.controls.CheckBox rendererIsEditor=true editorDataField=ClientAppointments/>
                            <mx:DataGridColumn headerText=Activity  width=70 wordWrap=true textAlign=center itemRenderer=mx.controls.CheckBox rendererIsEditor=true editorDataField=ClientActivity/>
                            <mx:DataGridColumn headerText=Notes width=50 wordWrap=true textAlign=center itemRenderer=mx.controls.CheckBox rendererIsEditor=true editorDataField=ClientNotes/>
                        </mx:columns>
                    </mx:DataGrid>
Publicado el 12/03/2009 a las 20:13
fuente por usuario Gareth
En otros idiomas...        العربية       

3 respuestas

votos
1

Parece que lo que desea hacer es devolver todo el contenido de DataGrid como miembro del resto de los datos de su formulario. Todavía estoy aprendiendo Flex, pero creo que se convertiría automáticamente de un ArrayCollection a un Query ya que está usando AMF.

Como no está utilizando un atributo de proveedor de datos para su DataGrid, supongo que está vinculando un objeto ArrayCollection al DataGrid en la initfunción a la que llama desde el creationCompleteevento. En ese caso, deseará hacer lo contrario antes de devolver los datos del formulario al servidor: copie los valores de DataGrid a una variable que está devolviendo.

Alternativamente, podría usar una variable ArrayCollection enlazable, de modo que cuando DataGrid sea actualizado por el usuario, la variable ArrayCollection ya esté actualizada y usted simplemente la pueda devolver a ColdFusion.

Respondida el 13/03/2009 a las 04:45
fuente por usuario Adam Tuttle


Aquí podría ser tu PUBLICIDAD


votos
0

Necesitaba hacer algo similar y encontré que funcionó muy bien crear un objeto "conjunto de datos" en actionscript y un CFC análogo que se mapearían entre sí. Desde flex, llame al método remoto pasando el objeto actionscript, luego en el lado CF se traducirá como el cfc.

[RemoteClass(alias = "model.DataSet")] **//maps to the CFC**    
[Bindable]
public class DataSetVO
{       

    public var rows:Array;

    public function DataSetVO() 
    {

    }

}

El CFC es así. Asegúrese de establecer el atributo de alias para que coincida con el alias establecido en la clase RemoteClass del objeto actionscript:

<cfcomponent name="DataSet"  alias="model.DataSet"> 
<cfproperty name="rows" type="array" />
</cfcomponent>

El método CFC para guardar los datos puede ser como

    <cffunction name="saveToFile" access="remote" returntype="numeric" hint="">
    <cfargument name="dataSet" type="model.GPDataSet" required="true" />
    <!--- do what you need to do to with arguments.dataSet to 
                  save to a file, database, whatever --->
    <cfreturn 0 />
</cffunction>

La llamada de flex es como:

 //make a remote call to save the grid 
 //populate your VO with the contents of the grid, in this case I have an object
 //that gives me one, basically iterate over the dataprovider of the grid
var myVO:DataSetVO = myDataSet.getAsVO();
//calling the remote CFC passing the VO that will be mapped to a CFC on the server
cfsvc.saveToFile(myVO);  

Mapear objetos complejos desde Flex hasta CF puede ser un poco complicado, pero una vez que está configurado es muy agradable.

Estos artículos pueden ser útiles

http://www.jeffryhouser.com/index.cfm/2007/10/9/Why-does-ColdFusion-return-a-CFC-to-Flex-as-a-generic-object

http://mxbase.blogspot.com/2008/07/passing-custom-objects-between-flex-and.html

Respondida el 30/09/2009 a las 07:17
fuente por usuario philcruz

votos
0

No sé Flex en CF, pero ¿ha determinado si desea guardarlos todos a la vez o en algún tipo de acción "Guardar" o "Enviar"?

Si va a guardarlos todos a la vez, esta publicación en Iteración sobre una consulta de ColdFusion en Flex puede ser útil.

De lo contrario, simplemente pondría un Listener en el evento onChange en cada celda y lo escribiría en tiempo real.

Respondida el 13/03/2009 a las 01:43
fuente por usuario kevink