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

Adding a row using foreign (includeFrom) field?

$
0
0
I'm using Isomorphic SmartClient/SmartGWT Framework (v9.0p_2013-09-17/Pro Deployment 2013-09-17) and using serverside datasources...

my ds.xml looks like this:
Code:


<DataSource ID="app_users" serverType="sql" dataSourceVersion="1" autoDeriveSchema="true">
    <fields>
        <field name="id" type="sequence" primaryKey="true">
            <columnCode>b80bb7740288fda1f201890375a60c8f</columnCode>
        </field>
        <field name="app_id" foreignKey="apps.id"/>
        <field name="user_id" foreignKey="users.id"/>
        <field name="create_date" type="datetime">
            <columnCode>3d8252a0fb3ab8a64613f6f814ed08ca</columnCode>
        </field>
        <field name="enabled" type="integer">
            <columnCode>a10311459433adf322f2590a4987c423</columnCode>
        </field>
        <field name="is_admin" type="integer">
            <columnCode>c60879c6b41321704ee88fbc7b9a73e4</columnCode>
        </field>         
        <field name="app_name" includeFrom="apps.name"/>
        <field name="app_enabled" includeFrom="apps.enabled"/>
        <field name="user_name" includeFrom="users.name"/>
        <field name="user_enabled" includeFrom="users.enabled"/>                               
    </fields>
    <allowAdvancedCriteria>false</allowAdvancedCriteria>
    <tableCode>43738f9fce49550bbb66a533c637b647</tableCode>
    <generatedBy>v9.0p_2013-09-17/Pro Deployment 2013-09-17</generatedBy>
</DataSource>

when I use this code to add a new entry, it fails
Code:

            DataSource ds = DataSourceManager.get(getDataSource());
            Map<String,Object> record = new HashMap<String,Object>();           
            record.put("user_name", name);
            record.put("app_name", appName);
            record.put("create_date", new Date());
            ds.add(record);

with "Field 'app_id' doesn't have a default value"

but if I do two separate lookups/DB calls to get the actual DB ids of username (userId) and appname (appId), and use those ids in the call instead, it works:
Code:

        //for some reason, when doing an add, you have to have the DB ids
        long appId = getAppId(appName);
        long userId = getId(DS_USERS, name);
       
            DataSource ds = DataSourceManager.get(getDataSource());
            Map<String,Object> record = new HashMap<String,Object>();           
            record.put("user_id", userId);
            record.put("app_id", appId);
            record.put("create_date", new Date());
            ds.add(record);

Is there some trick to getting add to work with the foreign fields? or does this not work like I assumed it would?

Thanks,
Brian

Viewing all articles
Browse latest Browse all 4756

Trending Articles