Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

DynamicForm: Bug with save after clearValues()

$
0
0
Hi Isomorphic,

Please the the following issue I stumbled into when creating a testcase for another issue.

Case 1:
  1. Hit Reload
  2. Enter Data
  3. Hit Save

Case 2:
  1. Hit Reload
  2. Hit Load Button
  3. Hit Clear Button
  4. Enter Data
  5. Hit Save

BuiltInDS.java
Code:

package com.smartgwt.sample.client;

import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.Criterion;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.util.PageKeyHandler;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;

public class BuiltInDS implements EntryPoint {
        private VLayout vL;
        private TestForm tF;
        private HLayout hL;

        public void onModuleLoad() {
                KeyIdentifier debugKey = new KeyIdentifier();
                debugKey.setCtrlKey(true);
                debugKey.setKeyName("D");

                Page.registerKey(debugKey, new PageKeyHandler() {
                        public void execute(String keyName) {
                                SC.showConsole();
                        }
                });

                vL = new VLayout(5);
                vL.setTop(20);
                vL.setLeft(20);
                vL.setWidth100();
                vL.setHeight100();
                tF = new TestForm();

                hL = new HLayout(5);

                IButton load1 = new IButton("Load Charles Madigen");
                load1.setWidth(200);
                load1.addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                tF.fetchData(new AdvancedCriteria(new Criterion("EmployeeId", OperatorId.EQUALS, 4)));
                        }
                });

                IButton load2 = new IButton("Load Ralph Brogan");
                load2.setWidth(200);
                load2.addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                tF.fetchData(new AdvancedCriteria(new Criterion("EmployeeId", OperatorId.EQUALS, 192)));
                        }
                });

                IButton clear = new IButton("Clear");
                clear.setWidth(200);
                clear.addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                tF.clearValues();
                        }
                });

                IButton save = new IButton("Save");
                save.setWidth(200);
                save.addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                tF.saveData();
                        }
                });

                IButton reload = new IButton("Reload");
                reload.setWidth(200);
                reload.addClickHandler(new ClickHandler() {
                        @Override
                        public void onClick(ClickEvent event) {
                                vL.removeChild(tF);
                                vL.markForRedraw();
                                tF.markForDestroy();
                                tF = new TestForm();
                                vL.addMember(tF, 0);
                        }
                });

                hL.addMembers(load1, load2, clear, save, reload);
                vL.addMembers(tF, hL);
                vL.draw();
        }

        private class TestForm extends DynamicForm {
                public TestForm() {
                        super();
                        setDataSource(DataSource.get("employees"));
                        setAddOperation("myAdd1");
                        setUpdateOperation("myUpdate1");
                        setAutoFetchData(false);
                }
        }
}

employees.ds.xml (Main change: pkField hidden="true")
Code:

<DataSource ID="employees" serverType="sql" tableName="employeeTable" recordName="employee"
        testFileName="/examples/shared/ds/test_data/employees.data.xml" titleField="Name">
        <fields>
                <field name="userOrder" title="userOrder" type="integer" canEdit="false" hidden="true" />
                <field name="Name" title="Name" type="text" length="128" />
                <field name="EmployeeId" title="Employee ID" type="integer" primaryKey="true" required="true" hidden="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>

        <operationBindings>
                <operationBinding operationType="add" operationId="myAdd1" cacheSyncOperation="myFetch1" />
                <operationBinding operationType="fetch" operationId="myFetch1" outputs="EmployeeId, Name, EmployeeType">
                        <criteria fieldName="EmployeeId" operator="notNull" />
                </operationBinding>
                <operationBinding operationType="update" operationId="myUpdate1" cacheSyncOperation="myFetch1" />
        </operationBindings>
</DataSource>

As you will notice the error messages are different and I think the STATUS=VALIDATION_ERROR message is correct, while the STATUS=-4 is not.
After clearValues() I'd expect the DynamicForm to behave like if it were freshly loaded.

I'm using v10.0p_2015-08-24/PowerEdition.

Best regards
Blama

Viewing all articles
Browse latest Browse all 4756

Trending Articles