I'm facing this bug when i try to save a form with a MultiFileItem and a foreign key's field filled
What i expect is that when i save a form with a MultiFileItem that contains attachment, they are also saved. But it doesn't happen if another field ,that have a foreign key, is filled.
Steps without foreign key value:
1) Fill title field (ex. Document 1)
2) Add an attachment at the MultiFileItem's field
3)Click on "Save Form"
And it works correctly.
Steps with foreign key value:
1)Fill "title" field (ex. Document 2)
2)Fill "TO:" field
3) Add an attachment at the MultiFileItem's field
4)Click on "Save Form"
And it doesn't work.
So, i tried to debug and i saw that the MultiFIleItem, after save callback, it's cleaned and refilled again, but with undefined value instead of "fakepath value".
ISC_VERSION :
Code to reproduce the bug
these are dummy tables. I tried with mysql and oracle, and the problem happens in both
sql code:
	DataSource code:
	JS CODE:
	
In this example i put on the right side two grids in which you can see the results on live.
					What i expect is that when i save a form with a MultiFileItem that contains attachment, they are also saved. But it doesn't happen if another field ,that have a foreign key, is filled.
Steps without foreign key value:
1) Fill title field (ex. Document 1)
2) Add an attachment at the MultiFileItem's field
3)Click on "Save Form"
And it works correctly.
Steps with foreign key value:
1)Fill "title" field (ex. Document 2)
2)Fill "TO:" field
3) Add an attachment at the MultiFileItem's field
4)Click on "Save Form"
And it doesn't work.
So, i tried to debug and i saw that the MultiFIleItem, after save callback, it's cleaned and refilled again, but with undefined value instead of "fakepath value".
ISC_VERSION :
- v10.0p_2015-12-10/Evaluation
 
Code to reproduce the bug
these are dummy tables. I tried with mysql and oracle, and the problem happens in both
sql code:
Code:
	
	CREATE TABLE USERS (
ID INTEGER NOT NULL AUTO_INCREMENT,
USERNAME VARCHAR(30),
PRIMARY KEY(ID)
);
CREATE TABLE COMMUNICATION(
ID INTEGER NOT NULL AUTO_INCREMENT,
TITLE VARCHAR(45),
TO_USER_FK INTEGER,
PRIMARY KEY(ID),
CONSTRAINT fkUser_ID
FOREIGN KEY fkUser_ID (TO_USER_FK)
REFERENCES USERS(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
CREATE TABLE ATTACHMENTS (
ID INTEGER NOT NULL AUTO_INCREMENT,
ATTACHMENT blob,
ATTACHMENT_DATE_CREATED datetime,
ATTACHMENT_FILENAME varchar(30),
ATTACHMENT_FILESIZE INTEGER,
ID_COMMUNICATION_FK INTEGER,
PRIMARY KEY(ID),
CONSTRAINT fkCommunication_ID
FOREIGN KEY fkCommunication_ID (ID_COMMUNICATION_FK)
REFERENCES COMMUNICATION(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
INSERT INTO USERS(USERNAME) VALUES('foo@example.com');
Code:
	
	ATTACHMENTS.ds.xml
<DataSource
        xmlns="http://www.smartclient.com/schema"
        dropExtraFields="false"
        dbName="test"
        tableName="ATTACHMENTS"
        ID="ATTACHMENTS"
        serverType="sql"
>
    <fields>
        <field name="ID" type="sequence" primaryKey="true" hidden="true"/>
        <field name="ATTACHMENT" type="binary"/>
        <field name="ID_COMMUNICATION_FK" type="integer" foreignKey="COMMUNICATION.ID" hidden="true"/>
        <field name="ATTACHMENT_DATE_CREATED" type="creatorTimestamp"/>
        <field name="ATTACHMENT_FILENAME" type="text"/>
        <field name="ATTACHMENT_FILESIZE" type="integer"/>
    </fields>
</DataSource>
COMMUNICATION.ds.xml
<DataSource
        xmlns="http://www.smartclient.com/schema"
        dropExtraFields="false"
        dbName="test"
        tableName="COMMUNICATION"
        ID="COMMUNICATION"
        serverType="sql"
>
    <fields>
        <field name="ID" type="sequence" primaryKey="true" hidden="true"/>
        <field name="TITLE" type="text"/>
        <field name="TO_USER_FK" type="integer" foreignKey="USERS.ID" displayField="USERNAME"/>
    </fields>
</DataSource>
USERS.ds.xml
<DataSource
        xmlns="http://www.smartclient.com/schema"
        dropExtraFields="false"
        dbName="test"
        tableName="USERS"
        ID="USERS"
        serverType="sql"
        >
    <fields>
        <field name="ID" type="sequence" primaryKey="true" hidden="true"/>
        <field name="USERNAME" type="text"/>
    </fields>
</DataSource>
Code:
	
	isc.HStack.create({
    width: "100%",
    height: "100%",
    members: [
        isc.VLayout.create({
            height: "50%",
            width: "50%",
            layoutAlign: "center",
            align: "center",
            showResizeBar: true,
            members: [
                isc.DynamicForm.create({
                    ID: "uploadForm",
                    width: 400,
                    height: 100,
                    dataSource: COMMUNICATION,
                    layoutAlign: "center",
                    fields: [
                        {name: "TITLE"},
                        {
                            autoFit: true,
                            name: "TO_USER_FK",
                            title: "TO:"
                        },
                        {
                            name: "ATTACHMENT",
                            title: "Files",
                            height: 50,
                            editorType: "MultiFileItem",
                            dataSource: ATTACHMENTS
                        },
                        {
                            name: "saveButton",
                            title: "Save Form",
                            type: "button",
                            click: "uploadForm.saveData()"
                        },
                        {
                            name: "saveButton",
                            type: "button",
                            title: "Clear Form",
                            click: "uploadForm.editNewRecord()"
                        }
                    ]
                })
            ]
        }),
        isc.VLayout.create({
            height: "50%",
            width: "50%",
            layoutAlign: "center",
            align: "center",
            membersMargin: 50,
            members: [
                isc.ListGrid.create({
                    width: "50%",
                    height: "40%",
                    dataSource: COMMUNICATION,
                    autoFetchData: true,
                    layoutAlign: "center"
                }),
                isc.ListGrid.create({
                    width: "50%",
                    height: "40%",
                    dataSource: ATTACHMENTS,
                    autoFetchData: true,
                    layoutAlign: "center"
                })
            ]
        })
    ]
});
In this example i put on the right side two grids in which you can see the results on live.
Comment