Hi Isomorphic
could you please advise if the following behaviour is a bug, not supported, or an error on my behalf:
I have two tables, father and child where:
- father displaying all its values.
- child displaying all its values and father.name instead of father.id (done with custom operationBinding including the SQL-join).
When I update father.name within the app, this update is not shown on the child, although FK-relationship in the .ds.xml is set (and SmartGWT therefore should also propagate father-changes to all Widgets with FKs to the fatherDS, not only the Widgets with the fatherDS, as I'd suppose).
Code:
father.ds.xml
child.ds.xml
SQL Create statements (Oracle):
Java (integrates in built-in-ds sample)
I'm on 3.0 eval, FF10.0, GWT Development mode and production.
Thank you,
Blama
could you please advise if the following behaviour is a bug, not supported, or an error on my behalf:
I have two tables, father and child where:
- father displaying all its values.
- child displaying all its values and father.name instead of father.id (done with custom operationBinding including the SQL-join).
When I update father.name within the app, this update is not shown on the child, although FK-relationship in the .ds.xml is set (and SmartGWT therefore should also propagate father-changes to all Widgets with FKs to the fatherDS, not only the Widgets with the fatherDS, as I'd suppose).
Code:
father.ds.xml
Code:
<!-- Auto-generated from database table T_COMPANY --> <DataSource schema="myschema" dbName="Oracle" tableName="T_COMPANY" ID="T_COMPANY" dataSourceVersion="1" generatedBy="SC_SNAPSHOT-2011-12-05/EVAL Deployment 2011-12-05" serverType="sql" > <fields> <field primaryKey="true" name="ID" type="sequence"></field> <field name="NAME" title="Companyname" length="20" type="text" required="true"></field> </fields> </DataSource>
Code:
<!-- Auto-generated from database table T_UNIT --> <DataSource schema="myschema" dbName="Oracle" tableName="T_UNIT" ID="T_UNIT" dataSourceVersion="1" generatedBy="SC_SNAPSHOT-2011-12-05/EVAL Deployment 2011-12-05" serverType="sql"> <fields> <field primaryKey="true" name="ID" type="sequence"></field> <field name="COMPANY_ID" title="Companyname" foreignKey="T_COMPANY.ID" displayField="COMPANY" type="int" required="true"></field> <field name="COMPANY" hidden="true" type="int" canSave="false" nativeName="NAME" tableName="T_COMPANY"></field> <field name="NAME" title="Unitname" length="20" type="text" required="true"></field> </fields> <operationBindings> <operationBinding operationType="fetch"> <tableClause>T_UNIT INNER JOIN T_COMPANY ON T_UNIT.COMPANY_ID = T_COMPANY.ID</tableClause> </operationBinding> </operationBindings> </DataSource>
Code:
DROP TRIGGER T_UNIT_BI; DROP TRIGGER T_COMPANY_BI; DROP SEQUENCE T_UNIT_ID; DROP SEQUENCE T_COMPANY_ID; DROP TABLE T_COMPANY CASCADE CONSTRAINTS; DROP TABLE T_UNIT CASCADE CONSTRAINTS; CREATE TABLE T_COMPANY ( ID INTEGER NOT NULL , NAME VARCHAR2 (20) NOT NULL ) ; ALTER TABLE T_COMPANY ADD CONSTRAINT PK_COMPANY PRIMARY KEY ( ID ) ; CREATE TABLE T_UNIT ( ID INTEGER NOT NULL , COMPANY_ID INTEGER NOT NULL , NAME VARCHAR2 (20) NOT NULL ) ; ALTER TABLE T_UNIT ADD CONSTRAINT PK_UNIT PRIMARY KEY ( ID ) ; ALTER TABLE T_UNIT ADD CONSTRAINT FK_T_UNIT_T_COMPANY FOREIGN KEY ( COMPANY_ID ) REFERENCES T_COMPANY ( ID ) ; CREATE SEQUENCE T_COMPANY_ID NOCACHE ORDER ; CREATE SEQUENCE T_UNIT_ID NOCACHE ORDER ; CREATE OR REPLACE TRIGGER T_UNIT_BI BEFORE INSERT ON T_UNIT FOR EACH ROW WHEN (NEW.ID IS NULL) BEGIN SELECT T_UNIT_ID.NEXTVAL INTO :NEW.ID FROM DUAL; END; / CREATE OR REPLACE TRIGGER T_COMPANY_BI BEFORE INSERT ON T_COMPANY FOR EACH ROW WHEN (NEW.ID IS NULL) BEGIN SELECT T_COMPANY_ID.NEXTVAL INTO :NEW.ID FROM DUAL; END; / INSERT INTO T_COMPANY (NAME) VALUES ('ACME'); INSERT INTO T_COMPANY (NAME) VALUES ('Foocomp'); INSERT INTO T_UNIT (COMPANY_ID, NAME) VALUES ('1', 'ACME_UNIT1'); INSERT INTO T_UNIT (COMPANY_ID, NAME) VALUES ('2', 'foo UNIT1'); INSERT INTO T_UNIT (COMPANY_ID, NAME) VALUES ('1', 'ACME_UNIT2'); INSERT INTO T_UNIT (COMPANY_ID, NAME) VALUES ('2', 'foo UNIT2'); COMMIT;
Code:
package com.smartgwt.sample.client; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.google.gwt.core.client.EntryPoint; public class Testcase implements EntryPoint { @Override public void onModuleLoad() { VLayout vL = new VLayout() { { setWidth100(); setHeight100(); final DataSource unitDS = DataSource.get("T_UNIT"); final DataSource companyDS = DataSource.get("T_COMPANY"); HLayout twiceFather = new HLayout() { { ListGrid companyLG1 = new ListGrid() { { setDataSource(companyDS); fetchData(); setCanEdit(true); } }; ListGrid companyLG2 = new ListGrid() { { setDataSource(companyDS); fetchData(); setCanEdit(true); } }; setMembersMargin(10); addMember(companyLG1); addMember(companyLG2); } }; ListGrid unitLG = new ListGrid() { { setDataSource(unitDS); fetchData(); setCanEdit(true); } }; setMembersMargin(10); addMember(twiceFather); addMember(unitLG); } }; vL.draw(); } }
Thank you,
Blama
Comment