Announcement

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

    ComboBoxItems required=true bold-display removed during DynamicForm fetch

    Hi Isomorphic,

    in current 4.1p (v9.1p_2014-12-06) the "required=true"-bold-display is removed for ComboBoxItems during DynamicForm.fetch(). It returns after the data is loaded.
    Please see modified BuiltInDS-sample below and click any employee.

    employees.ds.xml
    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"/>
            <field name="ReportsTo"       title="Manager"         type="integer"  required="true" displayField="employeesName" 
                   foreignKey="employees2.EmployeeId" editorType="ComboBoxItem" relatedTableAlias="employeeTableTwo" />
            <field name="employeesName"   includeFrom="employees2.Name" hidden="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>
    employees2.ds.xml (also add to DSLoader call in BuiltInDS.html)
    Code:
    <DataSource
        ID="employees2"
        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"/>
            <field name="ReportsTo"       title="Manager"         type="integer"  required="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>
    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.data.Record;
    import com.smartgwt.client.types.OperatorId;
    import com.smartgwt.client.types.SelectionStyle;
    import com.smartgwt.client.types.SortArrow;
    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.Label;
    import com.smartgwt.client.widgets.Window;
    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.form.fields.ComboBoxItem;
    import com.smartgwt.client.widgets.form.fields.SelectItem;
    import com.smartgwt.client.widgets.form.fields.TextItem;
    import com.smartgwt.client.widgets.grid.ListGrid;
    import com.smartgwt.client.widgets.grid.ListGridField;
    import com.smartgwt.client.widgets.grid.ListGridRecord;
    import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
    import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
    import com.smartgwt.client.widgets.layout.HLayout;
    import com.smartgwt.client.widgets.layout.VStack;
    import com.smartgwt.client.widgets.viewer.DetailViewer;
    
    /**
     * Entry point classes define <code>onModuleLoad()</code>.
     */
    public class BuiltInDS implements EntryPoint {
    	private ListGrid boundList;
    	private DynamicForm boundForm;
    	private IButton saveBtn;
    	private DetailViewer boundViewer;
    	private IButton newBtn;
    	private Window window;
    
    	/**
    	 * This is the entry point method.
    	 */
    	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();
    			}
    		});
    
    		ListGrid grid = new ListGrid();
    		grid.setLeft(20);
    		grid.setTop(75);
    		grid.setWidth(130);
    		grid.setLeaveScrollbarGap(false);
    		grid.setShowSortArrow(SortArrow.NONE);
    		grid.setCanSort(false);
    		grid.setFields(new ListGridField("dsTitle", "Select a DataSource"));
    		grid.setData(new ListGridRecord[] { new DSRecord("Animals", "animals"), new DSRecord("Office Supplies", "supplyItem"),
    				new DSRecord("Employees", "employees") });
    		grid.setSelectionType(SelectionStyle.SINGLE);
    		grid.addRecordClickHandler(new RecordClickHandler() {
    			public void onRecordClick(RecordClickEvent event) {
    				DSRecord record = (DSRecord) event.getRecord();
    				bindComponents(record.getDsName());
    			}
    		});
    
    		grid.draw();
    
    		VStack vStack = new VStack();
    		vStack.setLeft(175);
    		vStack.setTop(75);
    		vStack.setWidth("70%");
    		vStack.setMembersMargin(20);
    
    		Label label = new Label();
    		label.setContents("<ul>" + "<li>select a datasource from the list at left to bind to these components</li>"
    				+ "<li>click a record in the grid to view and edit that record in the form</li>"
    				+ "<li>click <b>New</b> to start editing a new record in the form</li>"
    				+ "<li>click <b>Save</b> to save changes to a new or edited record in the form</li>"
    				+ "<li>click <b>Clear</b> to clear all fields in the form</li>"
    				+ "<li>click <b>Filter</b> to filter (substring match) the grid based on form values</li>"
    				+ "<li>click <b>Fetch</b> to fetch records (exact match) for the grid based on form values</li>"
    				+ "<li>double-click a record in the grid to edit inline (press Return, or arrow/tab to another record, to save)</li>" + "</ul>");
    		vStack.addMember(label);
    
    		boundList = new ListGrid();
    		boundList.setHeight(200);
    		boundList.setCanEdit(true);
    
    		boundList.addRecordClickHandler(new RecordClickHandler() {
    			public void onRecordClick(RecordClickEvent event) {
    				Record record = event.getRecord();
    				boundForm.editRecord(record);
    				saveBtn.enable();
    				boundViewer.viewSelectedData(boundList);
    				window = new Window();
    				DynamicForm df = new DynamicForm();
    				df.setDataSource(DataSource.get("employees"));
    				TextItem name = new TextItem("Name");
    				ComboBoxItem mgr = new ComboBoxItem("ReportsTo") {
    					{
    						setOptionDataSource(DataSource.get("employees2"));
    						setDisplayField("Name");
    					}
    				};
    				SelectItem mgr2 = new SelectItem("ReportsTo") {
    					{
    						setOptionDataSource(DataSource.get("employees2"));
    						setDisplayField("Name");
    					}
    				};
    				df.setFields(name, mgr, mgr2);
    				window.addItem(df);
    				window.setSize("500", "500");
    				window.centerInPage();
    				window.show();
    				df.fetchData(new AdvancedCriteria(new Criterion("EmployeeId", OperatorId.EQUALS, 187)), null);
    				
    			}
    		});
    		vStack.addMember(boundList);
    
    		boundForm = new DynamicForm();
    		boundForm.setNumCols(6);
    		boundForm.setAutoFocus(false);
    		vStack.addMember(boundForm);
    
    		HLayout hLayout = new HLayout(10);
    		hLayout.setMembersMargin(10);
    		hLayout.setHeight(22);
    
    		saveBtn = new IButton("Save");
    		saveBtn.addClickHandler(new ClickHandler() {
    			public void onClick(ClickEvent event) {
    				boundForm.saveData();
    				if (!boundForm.hasErrors()) {
    					boundForm.clearValues();
    					saveBtn.disable();
    				}
    			}
    		});
    		hLayout.addMember(saveBtn);
    
    		newBtn = new IButton("New");
    		newBtn.addClickHandler(new ClickHandler() {
    			public void onClick(ClickEvent event) {
    				boundForm.editNewRecord();
    				saveBtn.enable();
    			}
    		});
    		hLayout.addMember(newBtn);
    
    		IButton clearBtn = new IButton("Clear");
    		clearBtn.addClickHandler(new ClickHandler() {
    			public void onClick(ClickEvent event) {
    				boundForm.clearValues();
    				saveBtn.disable();
    			}
    		});
    		hLayout.addMember(clearBtn);
    
    		IButton filterBtn = new IButton("Filter");
    		filterBtn.addClickHandler(new ClickHandler() {
    			public void onClick(ClickEvent event) {
    				boundList.filterData(boundForm.getValuesAsCriteria());
    				saveBtn.disable();
    			}
    		});
    		hLayout.addMember(filterBtn);
    
    		IButton fetchBtn = new IButton("Fetch");
    		fetchBtn.addClickHandler(new ClickHandler() {
    			public void onClick(ClickEvent event) {
    				boundList.fetchData(boundForm.getValuesAsCriteria());
    				saveBtn.disable();
    			}
    		});
    		hLayout.addMember(fetchBtn);
    
    		vStack.addMember(hLayout);
    
    		boundViewer = new DetailViewer();
    		vStack.addMember(boundViewer);
    
    		vStack.draw();
    	}
    
    	private void bindComponents(String dsName) {
    		DataSource ds = DataSource.get(dsName);
    		boundList.setDataSource(ds);
    		boundViewer.setDataSource(ds);
    		boundForm.setDataSource(ds);
    		boundList.fetchData();
    		newBtn.enable();
    		saveBtn.disable();
    	}
    }
    As you can see, this does not happen for SelectItems (but they have this bug).

    Best regards,
    Blama
    Last edited by Blama; 16 Apr 2015, 08:20. Reason: comboBoxItem -> ComboBoxItem in .ds.xml typo fixed

    #2
    Hi Isomorphic,

    do you see the issue as well?

    Best regards,
    Blama

    Comment


      #3
      Yes, we're looking into them

      Comment


        #4
        This one is fixed for builds dated December 16 and later

        Comment


          #5
          Hi Isomorphic,

          your change fixed the issue for me.

          Thank you & Best regards,
          Blama

          Comment

          Working...
          X