Hi Isomorphic,
please see this test case based on 5.1p (v10.1p_2016-06-09) which shows a serverCustom validator problem related to the one you fixed here and a problem, where a hasRelatedRecord-validator tries to search for a null-record and fails.
BuiltInDS.java:
	BuiltInDS.html addition:
	children.ds.xml:
	Testfile.csv:
	
If you upload the file, it looks like this:
As you can see, the eitherOr Validator was not fired for row 2. This is bug 1.
Now remove all Parent/Fav Items so that it looks like this:
Again the EitherOr-validator is not fired.
After commit, you'll see this log in the developer console:
As you can see, for the rows 1,3,4 you edited, there is a validation error from the EitherOr-validator (OK) and one from the hasRelatedRecord-validator (not OK, this is bug 2). The failure for row 2 is expected.
The SQL fired for the hasRelatedRecord-validator error messages are:
	This is wrong, hasRelatedRecord should not fire for a null-entry.
Both these fire-or-not validator problems are related to the one you fixed here.
This is an important one for me.
Best regards
Blama
					please see this test case based on 5.1p (v10.1p_2016-06-09) which shows a serverCustom validator problem related to the one you fixed here and a problem, where a hasRelatedRecord-validator tries to search for a null-record and fails.
BuiltInDS.java:
Code:
	
	package com.smartgwt.sample.client;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.Version;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.PageKeyHandler;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.BatchUploader;
import com.smartgwt.client.widgets.IButton;
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.grid.ListGridField;
import com.smartgwt.client.widgets.layout.VLayout;
public class BuiltInDS implements EntryPoint {
    private VLayout mainLayout;
    private IButton recreateBtn;
    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();
            }
        });
        mainLayout = new VLayout(20);
        mainLayout.setWidth100();
        mainLayout.setHeight100();
        recreateBtn = new IButton("Recreate");
        recreateBtn.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                recreate();
            }
        });
        mainLayout.addMember(recreateBtn);
        recreate();
        mainLayout.draw();
    }
    private void recreate() {
        Window w = new Window();
        w.setWidth("95%");
        w.setHeight("95%");
        w.setMembersMargin(0);
        w.setModalMaskOpacity(70);
        w.setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")");
        w.setTitle("TITLE" + w.getTitle());
        w.setShowMinimizeButton(false);
        w.setIsModal(true);
        w.setShowModalMask(true);
        w.centerInPage();
        final BatchUploader bu = new BatchUploader();
        bu.setWidth(500);
        bu.setUploadDataSource(DataSource.get("children"));
        ListGridField name = new ListGridField("Name");
        ListGridField parent = new ListGridField("Parent");
        ListGridField favItem = new ListGridField("FavItem");
        bu.setGridFields(name, parent, favItem);
        w.addItem(bu);
        w.show();
    }
}
Code:
	
	<script src="builtinds/sc/DataSourceLoader?dataSource=batchUpload,supplyItem,animals,employees,children"></script>
Code:
	
	<DataSource xmlns="lmscompany/ds" ID="children" serverType="sql" tableName="foobar">
    <fields>
        <field name="Name" type="text" length="20" required="true" />
        <field name="Parent" editorType="ComboBoxItem" importStrategy="display" displayField="Employees_Name" uploadFieldName="Parent" foreignKey="employees.EmployeeId">
            <validators>
                <validator type="serverCustom">
                    <serverObject lookupStyle="new" className="com.smartgwt.sample.server.listener.EitherOr" />
                    <errorMessage>$errorMessage</errorMessage>
                </validator>
                <validator type="hasRelatedRecord" />
            </validators>
        </field>
        <field name="Employees_Name" includeFrom="employees.Name" />
        <field name="FavItem" editorType="ComboBoxItem" importStrategy="display" displayField="supplyItem_itemName" uploadFieldName="FavItem" foreignKey="supplyItem.itemID">
            <validators>
                <validator type="serverCustom">
                    <serverObject lookupStyle="new" className="com.smartgwt.sample.server.listener.EitherOr" />
                    <errorMessage>$errorMessage</errorMessage>
                </validator>
                <validator type="hasRelatedRecord" />
            </validators>
        </field>
        <field name="supplyItem_itemName" includeFrom="supplyItem.itemName" />
    </fields>
</DataSource>
Code:
	
	"Name","FavItem","Parent" "Joe","Glue UHU Super Glue 3ml","Charles Madigen" "Anna","","" "Sophia","","Ralph Brogan" "Carol","File Half Arch Board Foolscap Black",""
If you upload the file, it looks like this:
As you can see, the eitherOr Validator was not fired for row 2. This is bug 1.
Now remove all Parent/Fav Items so that it looks like this:
Again the EitherOr-validator is not fired.
After commit, you'll see this log in the developer console:
As you can see, for the rows 1,3,4 you edited, there is a validation error from the EitherOr-validator (OK) and one from the hasRelatedRecord-validator (not OK, this is bug 2). The failure for row 2 is expected.
The SQL fired for the hasRelatedRecord-validator error messages are:
Code:
	
	SELECT supplyItem.itemID, supplyItem.itemName, supplyItem.SKU, supplyItem.description, supplyItem.category, supplyItem.units, supplyItem.unitCost, supplyItem.inStock, supplyItem.nextShipment FROM supplyItem WHERE ([B]supplyItem.itemID IS NULL[/B]) SELECT employeeTable.userOrder, employeeTable.Name, employeeTable.EmployeeId, employeeTable.ReportsTo, employeeTable.Job, employeeTable.Email, employeeTable.EmployeeType, employeeTable.EmployeeStatus, employeeTable.Salary, employeeTable.OrgUnit, employeeTable.Gender, employeeTable.MaritalStatus FROM employeeTable WHERE ([B]employeeTable.EmployeeId IS NULL[/B])
Both these fire-or-not validator problems are related to the one you fixed here.
This is an important one for me.
Best regards
Blama

 serverCustom validator not called for update to NULL / hasRelatedRecord bug
									
									
									serverCustom validator not called for update to NULL / hasRelatedRecord bug
								
Comment