Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Parent data source with sparseUpdates="true" and child data source with "false"

    I have two data sources with a one to many parent/child relationship. The parent data source has sparseUpdates="true" and the child has sparseUpdates="false". It appears that the parent's setting is applied to the child records.

    On an update, the unchanged fields are filtered out of each child record before they are sent to the server. Is there any way to have the full set of child records sent with all fields intact, i.e. old values merged with new?

    I want the parent data source to use sparseUpdates, but I need the complete new set of child records sent to the server.

    #2
    This has now been fixed - thanks for the error report

    Comment


      #3
      This was working but seems to no longer be working in 2.4. I'm running the SC_SNAPSHOT-2011-01-17/EVAL Deployment and seeing the child records in the request being stripped of all but key fields and those that were changed.

      Comment


        #4
        Our QA suite has a test for this exact case (parent DS is sparseUpdates=true, child DS is not) and it is still passing OK. Can you provide a standalone example of the problem that we can run?

        Comment


          #5
          We've confirmed this is not working in two different scenarios but haven't had time to build a standalone example. The workaround for us in the meantime is to include the child record list on the update request under a different field name.

          If we use the field name defined in the parent data source the child record list is stripped of all but primaryKey fields after we set it's value in the values manager. We can see that the valuesManager has a complete record list with all fields intact as we would expect since we just manually set the value, but when the save executes the DSRequest that goes out has been stripped of the non-primaryKey fields in each record in the list.

          Is there anything else that would cause the child datasource to be stripped of fields like this?

          Comment


            #6
            Here is a test case the shows the problem using the sample animals and employees data sources. I've added a field for animalEmployees to the animals data source. animals has sparseUpdates="true" and employees has sparseUpdates="false".
            Code:
            <DataSource
            	sparseUpdates="true"
                ID="animals"
            	serverType="sql"
            	tableName="animals"
                testFileName="animals.data.xml"
            >
                <fields>
                    <field name="commonName"      title="Animal"             type="text"/>
                    <field name="scientificName"  title="Scientific Name"    type="text"  primaryKey="true"  required="true"/>
                    <field name="lifeSpan"        title="Life Span"          type="integer"/>
                    <field name="status"          title="Endangered Status"  type="text">
                        <valueMap>
                            <value>Threatened</value>
                            <value>Endangered</value>
                            <value>Not Endangered</value>
                            <value>Not currently listed</value>
                            <value>May become threatened</value>
                            <value>Protected</value>
                        </valueMap>
                    </field>
                    <field name="diet"            title="Diet"               type="text"/>
                    <field name="information"     title="Interesting Facts"  type="text"  length="1000"/>
                    <field name="picture"         title="Picture"            type="image" detail="true"
                           imageURLPrefix="/isomorphic/system/reference/inlineExamples/tiles/images/"/>
                    <field name="animalEmployees" type="employees" multiple="true" hidden="true" customSQL="true" canEdit="true">
                    	<validators>
            				<validator type="serverCustom"
            					serverCondition="false"
            					errorMessage="My animal employees have errors." />
            			</validators>
            			</field>
                </fields>
            </DataSource>
            Code:
            <DataSource
            	sparseUpdates="false"
                ID="employees"
                serverType="sql"
                tableName="employeeTable"
                recordName="employee"
                testFileName="/examples/shared/ds/test_data/employees.data.xml"
                titleField="Name"
            >
                <fields>
                    <field name="Name"            title="Name"            type="text"     length="128"/>
                    <field name="EmployeeId"      title="Employee ID"     type="integer"  primaryKey="true"  required="true"/>
                    <field name="ReportsTo"       title="Manager"         type="integer"  required="true" 
                           foreignKey="employees.EmployeeId"  rootValue="1" detail="true"/>
                    <field name="Job"             title="Title"           type="text"     length="128"/> 
                    <field name="Email"           title="Email"           type="text"     length="128"/>
                    <field name="EmployeeType"    title="Employee Type"   type="text"     length="40"/>
                    <field name="EmployeeStatus"  title="Status"          type="text"     length="40"/>
                    <field name="Salary"          title="Salary"          type="float"/>
                    <field name="OrgUnit"         title="Org Unit"        type="text"     length="128"/>
                    <field name="Gender"          title="Gender"          type="text"     length="7">
                        <valueMap>
                            <value>male</value>
                            <value>female</value>
                        </valueMap>
                    </field>
                    <field name="MaritalStatus"   title="Marital Status"  type="text"     length="10">
                        <valueMap>
                            <value>married</value>
                            <value>single</value>
                        </valueMap>
                    </field>
                </fields>
            </DataSource>
            onModule load fills a form with a records from animals and then loads all employees into a form value named "animalEmployees" and calls rememberValues().
            Code:
            package com.smartgwt.sample.client;
            
            import com.google.gwt.core.client.EntryPoint;
            import com.smartgwt.client.data.Criteria;
            import com.smartgwt.client.data.DSCallback;
            import com.smartgwt.client.data.DSRequest;
            import com.smartgwt.client.data.DSResponse;
            import com.smartgwt.client.data.DataSource;
            import com.smartgwt.client.widgets.form.DynamicForm;
            import com.smartgwt.client.widgets.form.fields.SubmitItem;
            
            public class BuiltInDS implements EntryPoint {
            
            
            	public void onModuleLoad() {
            		
            		final DynamicForm form = new DynamicForm();
            		form.setDataSource(DataSource.get("animals"));
            		form.setUseAllDataSourceFields(true);
            		form.setFields(new SubmitItem("submit", "OK"));
            
            		form.draw();
            		form.fetchData(new Criteria("scientificName", "Loxodonta africana"));
            		DataSource.get("employees").fetchData(null, new DSCallback() {
            			
            			@Override
            			public void execute(DSResponse response, Object rawData, DSRequest request) {
            				form.setValue("animalEmployees", response.getData());
            				form.rememberValues();
            			}
            		});
            	}
            
            }
            If you then make a change to a field in the form and submit it, the animalEmployees "field" in the DSRequest (visible via the console) shows only the primaryKey field from the animalEmployees list, not the full set of data, as if sparseUpdates="true" was in effect.
            Code:
            {
                "actionURL":"http://127.0.0.1:8888/builtinds/sc/IDACall", 
                "showPrompt":true, 
                "prompt":"Saving form...", 
                "transport":"xmlHttpRequest", 
                "promptStyle":"dialog", 
                "bypassCache":true, 
                "data":{
                    "criteria":{
                        "scientificName":"Loxodonta africana"
                    }, 
                    "values":{
                        "lifeSpan":1234, 
                        "scientificName":"Loxodonta africana", 
                        "animalEmployees":[
                            {
                                "EmployeeId":4
                            }, 
                            {
                                "EmployeeId":182
                            }, 
                            {
                                "EmployeeId":183
                            }, 
                            {
                                "EmployeeId":184
                            }, 
                            {
                                "EmployeeId":185
                            }, 
                            {
                                "EmployeeId":186
                            }, 
                            {
                                "EmployeeId":187
                            }, 
                            {
                                "EmployeeId":188
                            }, 
                            {
                                "EmployeeId":189
                            }, 
                            {
                                "EmployeeId":190
                            }, 
                            {
                                "EmployeeId":191
                            }, 
                            {
                                "EmployeeId":192
                            }, 
                            {
                                "EmployeeId":193
                            }, 
                            {
                                "EmployeeId":194
                            }, 
                            {
                                "EmployeeId":195
                            }, 
                            {
                                "EmployeeId":196
                            }, 
                            {
                                "EmployeeId":197
                            }, 
                            {
                                "EmployeeId":198
                            }, 
                            {
                                "EmployeeId":199
                            }, 
                            {
                                "EmployeeId":200
                            }, 
                            {
                                "EmployeeId":201
                            }, 
                            {
                                "EmployeeId":202
                            }, 
                            {
                                "EmployeeId":203
                            }, 
                            {
                                "EmployeeId":204
                            }, 
                            {
                                "EmployeeId":205
                            }, 
                            {
                                "EmployeeId":206
                            }, 
                            {
                                "EmployeeId":207
                            }, 
                            {
                                "EmployeeId":208
                            }, 
                            {
                                "EmployeeId":209
                            }, 
                            {
                                "EmployeeId":210
                            }, 
                            {
                                "EmployeeId":211
                            }, 
                            {
                                "EmployeeId":212
                            }, 
                            {
                                "EmployeeId":213
                            }, 
                            {
                                "EmployeeId":214
                            }, 
                            {
                                "EmployeeId":215
                            }, 
                            {
                                "EmployeeId":216
                            }, 
                            {
                                "EmployeeId":217
                            }, 
                            {
                                "EmployeeId":218
                            }, 
                            {
                                "EmployeeId":219
                            }, 
                            {
                                "EmployeeId":220
                            }, 
                            {
                                "EmployeeId":221
                            }, 
                            {
                                "EmployeeId":222
                            }, 
                            {
                                "EmployeeId":223
                            }, 
                            {
                                "EmployeeId":224
                            }, 
                            {
                                "EmployeeId":225
                            }, 
                            {
                                "EmployeeId":226
                            }, 
                            {
                                "EmployeeId":227
                            }, 
                            {
                                "EmployeeId":228
                            }, 
                            {
                                "EmployeeId":229
                            }, 
                            {
                                "EmployeeId":230
                            }, 
                            {
                                "EmployeeId":231
                            }, 
                            {
                                "EmployeeId":232
                            }, 
                            {
                                "EmployeeId":233
                            }, 
                            {
                                "EmployeeId":234
                            }, 
                            {
                                "EmployeeId":235
                            }, 
                            {
                                "EmployeeId":236
                            }, 
                            {
                                "EmployeeId":237
                            }, 
                            {
                                "EmployeeId":238
                            }, 
                            {
                                "EmployeeId":239
                            }, 
                            {
                                "EmployeeId":240
                            }, 
                            {
                                "EmployeeId":241
                            }, 
                            {
                                "EmployeeId":242
                            }, 
                            {
                                "EmployeeId":243
                            }, 
                            {
                                "EmployeeId":244
                            }, 
                            {
                                "EmployeeId":245
                            }, 
                            {
                                "EmployeeId":246
                            }, 
                            {
                                "EmployeeId":247
                            }, 
                            {
                                "EmployeeId":248
                            }, 
                            {
                                "EmployeeId":249
                            }, 
                            {
                                "EmployeeId":250
                            }, 
                            {
                                "EmployeeId":251
                            }, 
                            {
                                "EmployeeId":252
                            }, 
                            {
                                "EmployeeId":253
                            }, 
                            {
                                "EmployeeId":254
                            }, 
                            {
                                "EmployeeId":255
                            }, 
                            {
                                "EmployeeId":256
                            }, 
                            {
                                "EmployeeId":257
                            }, 
                            {
                                "EmployeeId":258
                            }, 
                            {
                                "EmployeeId":259
                            }, 
                            {
                                "EmployeeId":260
                            }, 
                            {
                                "EmployeeId":261
                            }, 
                            {
                                "EmployeeId":262
                            }, 
                            {
                                "EmployeeId":263
                            }, 
                            {
                                "EmployeeId":264
                            }, 
                            {
                                "EmployeeId":265
                            }, 
                            {
                                "EmployeeId":266
                            }, 
                            {
                                "EmployeeId":267
                            }, 
                            {
                                "EmployeeId":268
                            }, 
                            {
                                "EmployeeId":269
                            }, 
                            {
                                "EmployeeId":270
                            }, 
                            {
                                "EmployeeId":271
                            }, 
                            {
                                "EmployeeId":272
                            }, 
                            {
                                "EmployeeId":273
                            }, 
                            {
                                "EmployeeId":274
                            }, 
                            {
                                "EmployeeId":275
                            }, 
                            {
                                "EmployeeId":276
                            }, 
                            {
                                "EmployeeId":277
                            }, 
                            {
                                "EmployeeId":278
                            }, 
                            {
                                "EmployeeId":279
                            }, 
                            {
                                "EmployeeId":280
                            }, 
                            {
                                "EmployeeId":281
                            }, 
                            {
                                "EmployeeId":282
                            }, 
                            {
                                "EmployeeId":283
                            }, 
                            {
                                "EmployeeId":284
                            }, 
                            {
                                "EmployeeId":285
                            }, 
                            {
                                "EmployeeId":286
                            }, 
                            {
                                "EmployeeId":287
                            }, 
                            {
                                "EmployeeId":288
                            }, 
                            {
                                "EmployeeId":289
                            }, 
                            {
                                "EmployeeId":290
                            }, 
                            {
                                "EmployeeId":291
                            }, 
                            {
                                "EmployeeId":292
                            }, 
                            {
                                "EmployeeId":293
                            }, 
                            {
                                "EmployeeId":294
                            }, 
                            {
                                "EmployeeId":295
                            }
                        ]
                    }, 
                    "operationConfig":{
                        "dataSource":"animals", 
                        "repo":null, 
                        "operationType":"update"
                    }, 
                    "componentId":"isc_DynamicForm_0", 
                    "appID":"builtinApplication", 
                    "operation":"animals_update", 
                    "oldValues":{
                        "picture":"Elephant.jpg", 
                        "commonName":"Elephant (African)", 
                        "information":"The African Elephant is the largest of all land animals and also has the biggest brain of any land animal. Both males and females have ivory tusks. Elephants are also wonderful swimmers. Man is the only real enemy of the elephant. Man threatens the elephant by killing it for its tusks and by destroying its habitat.", 
                        "lifeSpan":123, 
                        "scientificName":"Loxodonta africana", 
                        "diet":"Herbivore", 
                        "status":"Threatened", 
                        "animalEmployees":[
                            {
                                "EmployeeId":4
                            }, 
                            {
                                "EmployeeId":182
                            }, 
                            {
                                "EmployeeId":183
                            }, 
                            {
                                "EmployeeId":184
                            }, 
                            {
                                "EmployeeId":185
                            }, 
                            {
                                "EmployeeId":186
                            }, 
                            {
                                "EmployeeId":187
                            }, 
                            {
                                "EmployeeId":188
                            }, 
                            {
                                "EmployeeId":189
                            }, 
                            {
                                "EmployeeId":190
                            }, 
                            {
                                "EmployeeId":191
                            }, 
                            {
                                "EmployeeId":192
                            }, 
                            {
                                "EmployeeId":193
                            }, 
                            {
                                "EmployeeId":194
                            }, 
                            {
                                "EmployeeId":195
                            }, 
                            {
                                "EmployeeId":196
                            }, 
                            {
                                "EmployeeId":197
                            }, 
                            {
                                "EmployeeId":198
                            }, 
                            {
                                "EmployeeId":199
                            }, 
                            {
                                "EmployeeId":200
                            }, 
                            {
                                "EmployeeId":201
                            }, 
                            {
                                "EmployeeId":202
                            }, 
                            {
                                "EmployeeId":203
                            }, 
                            {
                                "EmployeeId":204
                            }, 
                            {
                                "EmployeeId":205
                            }, 
                            {
                                "EmployeeId":206
                            }, 
                            {
                                "EmployeeId":207
                            }, 
                            {
                                "EmployeeId":208
                            }, 
                            {
                                "EmployeeId":209
                            }, 
                            {
                                "EmployeeId":210
                            }, 
                            {
                                "EmployeeId":211
                            }, 
                            {
                                "EmployeeId":212
                            }, 
                            {
                                "EmployeeId":213
                            }, 
                            {
                                "EmployeeId":214
                            }, 
                            {
                                "EmployeeId":215
                            }, 
                            {
                                "EmployeeId":216
                            }, 
                            {
                                "EmployeeId":217
                            }, 
                            {
                                "EmployeeId":218
                            }, 
                            {
                                "EmployeeId":219
                            }, 
                            {
                                "EmployeeId":220
                            }, 
                            {
                                "EmployeeId":221
                            }, 
                            {
                                "EmployeeId":222
                            }, 
                            {
                                "EmployeeId":223
                            }, 
                            {
                                "EmployeeId":224
                            }, 
                            {
                                "EmployeeId":225
                            }, 
                            {
                                "EmployeeId":226
                            }, 
                            {
                                "EmployeeId":227
                            }, 
                            {
                                "EmployeeId":228
                            }, 
                            {
                                "EmployeeId":229
                            }, 
                            {
                                "EmployeeId":230
                            }, 
                            {
                                "EmployeeId":231
                            }, 
                            {
                                "EmployeeId":232
                            }, 
                            {
                                "EmployeeId":233
                            }, 
                            {
                                "EmployeeId":234
                            }, 
                            {
                                "EmployeeId":235
                            }, 
                            {
                                "EmployeeId":236
                            }, 
                            {
                                "EmployeeId":237
                            }, 
                            {
                                "EmployeeId":238
                            }, 
                            {
                                "EmployeeId":239
                            }, 
                            {
                                "EmployeeId":240
                            }, 
                            {
                                "EmployeeId":241
                            }, 
                            {
                                "EmployeeId":242
                            }, 
                            {
                                "EmployeeId":243
                            }, 
                            {
                                "EmployeeId":244
                            }, 
                            {
                                "EmployeeId":245
                            }, 
                            {
                                "EmployeeId":246
                            }, 
                            {
                                "EmployeeId":247
                            }, 
                            {
                                "EmployeeId":248
                            }, 
                            {
                                "EmployeeId":249
                            }, 
                            {
                                "EmployeeId":250
                            }, 
                            {
                                "EmployeeId":251
                            }, 
                            {
                                "EmployeeId":252
                            }, 
                            {
                                "EmployeeId":253
                            }, 
                            {
                                "EmployeeId":254
                            }, 
                            {
                                "EmployeeId":255
                            }, 
                            {
                                "EmployeeId":256
                            }, 
                            {
                                "EmployeeId":257
                            }, 
                            {
                                "EmployeeId":258
                            }, 
                            {
                                "EmployeeId":259
                            }, 
                            {
                                "EmployeeId":260
                            }, 
                            {
                                "EmployeeId":261
                            }, 
                            {
                                "EmployeeId":262
                            }, 
                            {
                                "EmployeeId":263
                            }, 
                            {
                                "EmployeeId":264
                            }, 
                            {
                                "EmployeeId":265
                            }, 
                            {
                                "EmployeeId":266
                            }, 
                            {
                                "EmployeeId":267
                            }, 
                            {
                                "EmployeeId":268
                            }, 
                            {
                                "EmployeeId":269
                            }, 
                            {
                                "EmployeeId":270
                            }, 
                            {
                                "EmployeeId":271
                            }, 
                            {
                                "EmployeeId":272
                            }, 
                            {
                                "EmployeeId":273
                            }, 
                            {
                                "EmployeeId":274
                            }, 
                            {
                                "EmployeeId":275
                            }, 
                            {
                                "EmployeeId":276
                            }, 
                            {
                                "EmployeeId":277
                            }, 
                            {
                                "EmployeeId":278
                            }, 
                            {
                                "EmployeeId":279
                            }, 
                            {
                                "EmployeeId":280
                            }, 
                            {
                                "EmployeeId":281
                            }, 
                            {
                                "EmployeeId":282
                            }, 
                            {
                                "EmployeeId":283
                            }, 
                            {
                                "EmployeeId":284
                            }, 
                            {
                                "EmployeeId":285
                            }, 
                            {
                                "EmployeeId":286
                            }, 
                            {
                                "EmployeeId":287
                            }, 
                            {
                                "EmployeeId":288
                            }, 
                            {
                                "EmployeeId":289
                            }, 
                            {
                                "EmployeeId":290
                            }, 
                            {
                                "EmployeeId":291
                            }, 
                            {
                                "EmployeeId":292
                            }, 
                            {
                                "EmployeeId":293
                            }, 
                            {
                                "EmployeeId":294
                            }, 
                            {
                                "EmployeeId":295
                            }
                        ]
                    }
                }
            }
            You'll notice a serverCustom validator that I added to simulate what I thought might be causing the problem in our actual scenario, but removing it doesn't seem to change things.

            Comment


              #7
              There must be something that triggers this behavior other than sparseUpdates true or false. We have run into it in another context where the "child" records that are being stripped from the request are not defined as a DataSource nor are they defined as a field in the parent data source. All we're doing is using ValuesManager.setValue("AllocationDetails", aRecordArray). At that point there is data in aRecordArray, but when we call ValuesManager.saveData() and look at the DSRequest in the developer console, the record array is empty.
              Code:
                      "AllocationDetails":[
                          {
                          }, 
                          {
                          }, 
                          {
                          }, 
                          {
                          }, 
                          {
                          }, 
                          {
                          }, 
                          {
                          }
                      ]

              Comment


                #8
                One scenario in which this problem occurs has to do with a failed DSRequest. The sequence of events is this.

                1) ValuesManager.saveData() sends a DSRequest where one of the values is a Record[] with the attribute name "AllocationDetails".
                2) That request fails on the server and the failure response is received by the client.
                3) The client attaches the same "AllocationDetails" to the ValuesManager via ValuesManager.setValue("AllocationDetails", aRecordArray).
                4) A second request is sent, but this time, examining the request in the dev console I can see that the "oldValues" contains the "AllocationDetails" that were attached to the first request. And the "values" on this second request has an "AllocationDetails" that looks like the previous post (i.e. an array of "records" with no attributes).

                It appears the sparseUpdates has trimmed all of the values since they now match what is in oldValues.

                My question is, why would a failed request change the "oldValues" in the values manager?

                Comment


                  #9
                  Any update on this?

                  Comment


                    #10
                    This test case fails because the "sparseUpdates" property was not marked as boolean in our internal schema definitions. This has been corrected and should work its way into nightly builds tomorrow. In the meantime, the workaround is to just leave sparseUpdates undefined if you want to switch it off (as opposed to explicitly marking it "false")

                    Comment


                      #11
                      Thanks. Can you also answer my related question "why would a failed request change the "oldValues" in the values manager?"

                      Also, if I include an arbitrary value in the request by calling ValuesManager.setValue() and there is no field with that same name defined in the DS, it appears that that value is being trimmed by the sparseUpdates logic as well. Is that expected behavior?

                      Those two behaviors combined are what is causing our current problem. In other words, the initial fetch that fills the ValuesManager does *not* contain a value with name "MyArbitraryValue".

                      Before calling saveData() "MyArbitraryValue" is set using VM.setValue(). The saveData() request fails for an unrelated reason. The user corrects the problem that caused the failure and triggers saveData() again. But now VM.oldValues() has "MyArbitraryValue" in it (not sure why) and the sparseUpdates logic clears it since it is the same as the still not saved new value.

                      Comment


                        #12
                        Testing that scenario locally - failed server validation causes oldValues to be clobbered, and thus stripped out by sparseUpdates on the subsequent send - we are not seeing the behavior you describe. In our tests, the oldValue of a given field remains stable through multiple failed server visits. Does the behavior you describe only happen on certain types of field or something like that?

                        On the other question (about arbitrary, non-field values in the DynamicForm) - yes, the sparseUpdate logic culls from "values" based purely on a matching value in "oldValues". It doesn't care whether or not the value belongs to a real field in the DS.

                        Comment


                          #13
                          The post from 3rd Mar 2011 16:01 describes the scenario in more detail.

                          1) The client uses ValuesManager.setValue() to put an array of records named "AllocationDetails" into the data to be saved.
                          2) saveData() fails with STATUS_FAILURE (not STATUS_VALIDATION_ERROR in case that makes a difference in your test).
                          3) ValuesManager.getOldValues() now includes "AllocationDetails"

                          We aren't calling rememberValues() or setValues() and "AllocationDetails" is only ever created on the client and never received from the server, so oldValues should never include "AllocationDetails".

                          Comment


                            #14
                            I'm also seeing the problem in SC_SNAPSHOT-2011-05-02:

                            Code:
                            <DataSource ID="B" sparseUpdates="false">
                            <field name="FB1"
                            <field name="FB2"
                            ...
                            </DataSource>
                            
                            
                            <DataSource ID="A" sparseUpdates="true">
                            <field name="FA1" multiple="true" type="B" javaClass="...">
                            ...
                            </DataSource>
                            So parent has "true", a child field has "false".


                            What happens:
                            1) during fetch, FA1 contains 1 value in the array (field is multiple)

                            2) The client adds another value in the array and changes 1 field of the object[0] (the existing one during fetch).

                            3) Trigger save. The update DSRequest's data show the array like this:
                            - for the existing object: only the changed field FB2 (NOK)
                            - for the new object: all fields of B (OK)



                            I tried the same without specifying sparseUpdates="false" on B as suggested in this post. Didn't work either.
                            I verified the other way: when I set sparseUpdates="false" on A, then I see my all fields of B as per my expectation (but of course, all unchanged fields of A are also sent, which we don't want).


                            Is there a possibility to specify sparseUpdates on the field level as well (since I found out here that the stripping of unchanged values also happens by taking a copy of the oldValues) to solve this?



                            TIA

                            Comment


                              #15
                              levi, is your sample intended to include a ValuesManager? It's unclear how your scenario differs from what we tested and found working, can you put together a runnable test case based on those DataSource definitions?

                              Comment

                              Working...
                              X