Check Form Size
Update 2017: The size of a form is directly dependent on the underlying database and its features. In DB2 10.5 the new default is with "extended row size" enabled which means that table definitions can span multiple tablespaces. For FEB this means that you can create much larger forms. This script has not yet been updated to account for this change, but you might still find it helpful in understanding approximately how big your form is and what is taking up the most space. Please remember that this is an approximation and is not exact - I also recognize that there are some bugs in the process that I have not yet been able to work out.
I have encountered a few situations where FEB applications have not been deployable because there were too many UI items (database columns). The end user will see the following when trying to deploy the application:
If you inspect the logs you will see an error like:
Caused by: com.ibm.db2.jcc.am.SqlException: The row length of the table exceeded a limit of "32677" bytes. (Table space "32677".). SQLCODE=-670, SQLSTATE=54010, DRIVER=3.57.82
So I set out trying to figure out how big each of our widgets are so that we could calculate how close a form is to the edge. All of the numbers provided here are approximate.
When you add an item to the form a column is created and the size of that column is dependent on the type of item. The maximum size is 32677 bytes.
Widget | Bytes | Notes |
Multi-line Field | 164 | Defined as CLOB(1000000) |
Single-line Field | 4 bytes per char | Defined as VARCHAR(4-1024) where length is 1-256 |
Checklist | 140 | Defined as CLOB(102400) |
Date | 4 | Defined as DATE |
Dropdown | 1-800 | Defined as VARCHAR(4-800). Dropdown value can be 1- 200 characters |
Survey | 50-800 | Defined as VARCHAR(50-800). Survey answer can be 1-200 characters |
Number (Decimal), Currency | 12 | Defined as DECIMAL() |
Number (Integer) | 8 | Defined as BIGINT |
Time | 4 | Defined as TIME |
100 | Defined as VARCHAR(100) | |
Radiolist | 208-800 | Defined as VARCHAR(52-200) where length is 1-200 |
Check | 4 | Defined as SMALLINT |
Weblink | 112 | Defined as CLOB(2048) |
Password | 200 | Defined as VARCHAR(200) |
Timestamp | 12 | Defined as TIMESTAMP |
Practical Usage:
With these values we could calculate approximately how big a form is and how much space is left. I created some JavaScript that can do the calculation for you.
1. Create a button in the form you want to test.
2. Add the following js file to your application: tableSpaceSize.js
3. Add the following JS to the onClick of the button:
app.getSharedData().getTableSpaceSize(form.getId());
4. Preview the form and click the button to see how much space is being used!
Examples:
- You could have a form with 31 SingleLine fields where they were set to the maximum field length of 256 characters.
- You could have a form with 158 SingleLine fields where they were set to the maximum field length of 50 characters.
- You could have a form with 190 MultiLine fields.
- You could have a form with 625 Yes/No Survey questions
- You could have a form with 40 Survey Questions where the question value is at its 200 character max
How to reduce the size of your form
Now that you have found out that your form is too big what can you do?
1. The default character length for many of the items is 50, if you have fields where you know the input will be less then the default then make that number smaller.
2. If you are using SingleLine fields where a user can enter lots of text, then use a MultiLine instead. The size contribution of a MultiLine field is much less than a single-line field.
3. Determine if it really makes sense for all of these fields to be in ONE form. Perhaps you should break up the data retrieval process into multiple forms.
Version History
- Sept 8, 2014: If a field is hidden by a rule then the code doesn't calculate properly. Added a check to insure the single line field is visible before attempting to calculate its character size. Changed the single line field check to be more precise then the previous version.