This turned out to be a validator run on a customSelectExpression field. It had length="10", but the value was up to 13 chars long, which resulted then in the validation error.
IMHO fields with customSelectExpression should not go though validation, but I could not reproduce the behavior.
For me, the issue does not matter so much, because I will take care now that the length matches the max length of the cSE-return value.
Best regards
Blama
Announcement
Collapse
No announcement yet.
X
-
No. Did you recently introduce something in your application, such as perhaps use of Dynamic DataSource Generators?
Leave a comment:
-
Hi Isomorphic,
this is happening again for me (v11.1p_2018-05-07) and seems to come from the server (request is sent and returns with a validation error). Before I was using an early April build, which did not have this issue.
It happens for two tables and also after a restart, so I assume this is not related to the caching issue it was before.
Were there some changes in this area?
Thank you & Best regards
BlamaLast edited by Blama; 19 Jun 2018, 04:59.
Leave a comment:
-
Hi Isomorphic,
just to let you know: The bug did not occur again in the last months, where I also only had a few restarts. So even with the long Tomcat-uptime, it did not occur again.
Lets assume and hope then that those changes did the trick.
Thank you & Best regards
Blama
Leave a comment:
-
Hi Isomorphic,
that's great to here. I'll try the new build then. Then is back to #17:
I will try and hopefully in a few months only report back that the issue did not occur again.
Thanks a lot & Best regards
Blama
Leave a comment:
-
While looking into the causes of intermittently failing automated tests during our preparations for the recent release of 6.1 / 11.1, we discovered a case in which the __cachedType could still be used inappropriately, giving rise to the possibility of incorrectly inheriting validations from includeFrom fields. The fix for this should have gone into 5.0 and greater, but because this was discovered during a crunch time for release, that was overlooked and it only got committed on the 6.1 branch. This fix has now been backported as far as 5.0 / 10.0.
Edit: Sorry, to be clear, this change will be present in 5.0 / 10.0 and greater builds as of tomorrow's builds, those dated 8th JulyLast edited by Isomorphic; 7 Jul 2017, 05:29. Reason: Adding the build date when the fi can be expected
Leave a comment:
-
While looking at another report, we had an insight into an unusual circumstance which is probably at the bottom of your problem here. Tomorrow's builds (5.0p and greater) will contain a fix for that issue - please try it and let us know.
Leave a comment:
-
In addition to the above - we're sorry to see you're having trouble, but at the moment, we haven't been able to reproduce this one. We're still hoping that you can create a test case that clearly shows this is a framework bug.
Leave a comment:
-
Your results suggest that you somehow have two slightly different copies of your DataSource in the pool. You could verify this by repeatedly asking for copies of the same DataSource using DataSourceManager.get(), until you've got the entire pool, and look for the differences you've noticed. You could put code that examines the pool into a DMI or servlet so that you can trigger it when you see your server behaving in this odd way.
If you can verify that this is what's going on, some possible causes:
1. two different .ds.xml files with the same ID are actually around. Possibly a deployment script is faulty, and one version of the file is present at server startup, then later replaced
2. invalidly using a DataSource from two different threads simultaneously. DataSources are not thread-safe
3. metadata information from your DB is changing at runtime, such that autoDeriveSchema ends up behaving differently at different times
Leave a comment:
-
Hi Isomorphic,
it just happened again, this time in less than 24 hours.
I still do have the problem that I can't provide you with a testcase or stack trace, but it would be really great if you could think about anything that could cause this behavior.
I will now create a new field with the same nativeName as the name of the original field and no isUnique-validatorand includeFrom this field in order to fix the symptom.
I will also try to create heavy load on my dev machine for 24h hours and see if this causes the error to happen on that machine.
Ideas:- Do the server side request processing and the DataSourceLoader servlet use the same technique in order to process the .ds.xml?
In the last post I showed that the request processing has the problem but the DataSourceLoader loader result looked as expected. - Can I enable more logging in order to make the analysis possible from the log files? If so, which classes should be logged on which level?
Blama
Leave a comment:
- Do the server side request processing and the DataSourceLoader servlet use the same technique in order to process the .ds.xml?
-
Bad news here. The "successful" request does the unique check as well. But as no other user is registered for this reseller, this does not result in a validation error.
Code:=== 2017-01-09 11:09:37,482 [c-41] DEBUG RPCManager - Processing 1 requests. === 2017-01-09 11:09:37,482 [c-41] DEBUG RPCManager - Request #1 (DSRequest) payload: { criteria:{ ID:1720 }, values:{ FULLNAME_INITIALS_GIVENNAME:"E. Maier", EMAILENTRY:"\"Erika Maier\" <***@gmail.com>", CREATED_AT:new Date(1445871287000), MODIFIED_BY:"1", RESELLERID_LIST_SEP:", ,", EMAIL:"***@gmail.com", RESELLER_ENABLED:true, ADMINUSER:false, LEGALENTITYNAME:"Hansestadt Softwarekontor (HH)", ROLELIST:"Benutzer", ID:1720, FULLNAME:"Erika Maier", GIVENNAME:"Erika", FULLNAME_INITIALS_BOTH:"E. M.", CREATED_BY:"1", MODIFIED_AT:new Date(1445871287000), MODIFIED_BY_NAME_TOOLTIP:"Administrator (*** gmbh TESTACCOUNT)", USER_ROLELIST_TENANT_ID:1, SURNAME:"Maier2", LEGALENTITYTYPE:"R", CREATED_BY_NAME_TOOLTIP:"Administrator (*** gmbh TESTACCOUNT)", CREATED_BY_NAME:"Administrator", RESELLER_BRANCH:false, FUNCTION:"Funktion", VALIDFROM:new Date(1445814000000), INVALIDLOGINATTEMPTS:0, BELONGSTO_RESELLER_ID:32, VALIDNOW:true, MODIFIED_BY_NAME:"Administrator", GENDER_SHORTNAME:"F", RESELLER_NAME:"Hansestadt Softwarekontor (HH)", TENANT_ID:1, VIEWLIST:"addCommentToPickedLeadOwn, addLeadEasy, editPickedLeadContactOwn, editPickedLeadMasterdataOwn, editPickedLeadStatusOwn, handoverPickedLead, movePickedLeadToUserOwn, pickLead, requestDealreg, viewPicklistReseller, viewResellerPerformanceReseller, viewResellerPerformanceResellerUser", LEGALENTITYORDER:3, LOGINNAME:"r5user1", RESELLER_TENANT_ID:1, VALIDTO:null, PASSWORD1:null, PASSWORD2:null }, operationConfig:{ dataSource:"T_USER", repo:null, operationType:"update", textMatchStyle:"exact" }, componentId:"isc_AddEditUserMasterdata_1_2", appID:"builtinApplication", operation:"T_USER_update", oldValues:{ FULLNAME_INITIALS_GIVENNAME:"E. Maier", EMAILENTRY:"\"Erika Maier\" <***@gmail.com>", CREATED_AT:new Date(1445871287000), MODIFIED_BY:"1", RESELLERID_LIST_SEP:", ,", EMAIL:"***@gmail.com", RESELLER_ENABLED:true, ADMINUSER:false, LEGALENTITYNAME:"Hansestadt Softwarekontor (HH)", ROLELIST:"Benutzer", ID:1720, FULLNAME:"Erika Maier", GIVENNAME:"Erika", FULLNAME_INITIALS_BOTH:"E. M.", CREATED_BY:"1", MODIFIED_AT:new Date(1445871287000), MODIFIED_BY_NAME_TOOLTIP:"Administrator (*** gmbh TESTACCOUNT)", USER_ROLELIST_TENANT_ID:1, SURNAME:"Maier", LEGALENTITYTYPE:"R", CREATED_BY_NAME_TOOLTIP:"Administrator (*** gmbh TESTACCOUNT)", CREATED_BY_NAME:"Administrator", RESELLER_BRANCH:false, FUNCTION:"Funktion", VALIDFROM:new Date(1445814000000), INVALIDLOGINATTEMPTS:0, BELONGSTO_RESELLER_ID:32, VALIDNOW:true, MODIFIED_BY_NAME:"Administrator", GENDER_SHORTNAME:"F", RESELLER_NAME:"Hansestadt Softwarekontor (HH)", TENANT_ID:1, VIEWLIST:"addCommentToPickedLeadOwn, addLeadEasy, editPickedLeadContactOwn, editPickedLeadMasterdataOwn, editPickedLeadStatusOwn, handoverPickedLead, movePickedLeadToUserOwn, pickLead, requestDealreg, viewPicklistReseller, viewResellerPerformanceReseller, viewResellerPerformanceResellerUser", LEGALENTITYORDER:3, LOGINNAME:"r5user1", RESELLER_TENANT_ID:1 } } === 2017-01-09 11:09:37,482 [c-41] INFO LMSIDACall - Performing 1 operation(s) === 2017-01-09 11:09:37,489 [c-41] DEBUG SQLDataSource - DataSource 212834 acquired SQLDriver instance 1001794051 during initialization === 2017-01-09 11:09:37,489 [c-41] DEBUG SQLDataSource - DataSource 212835 acquired SQLDriver instance 1115749341 during initialization === 2017-01-09 11:09:37,489 [c-41] DEBUG ServerObject - Couldn't find a public method named: fetch on class: com.lmscompany.lms.server.worker.T_USER === 2017-01-09 11:09:37,489 [c-41] DEBUG DataSourceDMI - DataSourceDMI: no public method name: fetch available on class: com.lmscompany.lms.server.worker.T_USER - defaulting to builtin operations. === 2017-01-09 11:09:37,489 [c-41] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,489 [c-41] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation === 2017-01-09 11:09:37,490 [c-41] INFO SQLDataSource - [builtinApplication.null] Performing fetch operation with criteria: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} values: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} === 2017-01-09 11:09:37,490 [c-41] INFO SQLDataSource - [builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause$defaultAnsiJoinClause WHERE $defaultWhereClause === 2017-01-09 11:09:37,490 [c-41] INFO SQLDataSource - [builtinApplication.null] 212822: Executing SQL query on 'Oracle': SELECT T_USER.ID, T_USER.TENANT_ID, T_USER.CREATED_BY, T_USER.CREATED_AT, T_USER.MODIFIED_BY, T_USER.MODIFIED_AT, T_USER.BELONGSTO_COMPANY_ID, T_USER.BELONGSTO_DISTRIBUTOR_ID, T_USER.BELONGSTO_RESELLER_ID, T_USER.LEGALENTITYTYPE, T_USER.LEGALENTITYORDER, CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END AS LEGALENTITYNAME, T_USER.GENDER_SHORTNAME, T_USER.GIVENNAME, T_USER.SURNAME, T_USER.LOGINNAME, T_USER.ADMINUSER, T_USER.FUNCTION, '' AS BCRYPTHASH, '' AS PASSWORD1, '' AS PASSWORD2, T_USER.VALIDFROM, T_USER.VALIDTO, CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END AS VALIDNOW, T_USER.INVALIDLOGINATTEMPTS, T_USER.LASTLOGIN, T_USER.EMAIL, T_USER.PHONENUMBER, T_USER.FULLNAME, T_USER.FULLNAME_INITIALS_GIVENNAME, T_USER.FULLNAME_INITIALS_BOTH, T_USER.EMAILENTRY, USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME AS CREATED_BY_NAME, USER_CREATED_BY.FULLNAME_LEGALENTITYNAME AS CREATED_BY_NAME_TOOLTIP, USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME AS MODIFIED_BY_NAME, USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME AS MODIFIED_BY_NAME_TOOLTIP, T_COMPANY.NAME AS COMPANY_NAME, T_DISTRIBUTOR.NAME AS DISTRIBUTOR_NAME, T_RESELLER.NAME AS RESELLER_NAME, T_RESELLER.BRANCH AS RESELLER_BRANCH, T_RESELLER.ENABLED AS RESELLER_ENABLED, T_DISTRIBUTOR.ENABLED AS DISTRIBUTOR_ENABLED, V_USER_ROLELIST.ROLELIST, V_USER_VIEWLIST.VIEWLIST, V_PAM_RESELLERLIST.RESELLERLIST, V_PAM_RESELLERLIST.RESELLERID_LIST_SEP, T_COMPANY.TENANT_ID AS COMPANY_TENANT_ID, T_DISTRIBUTOR.TENANT_ID AS DISTRIBUTOR_TENANT_ID, T_RESELLER.TENANT_ID AS RESELLER_TENANT_ID, V_USER_ROLELIST.TENANT_ID AS USER_ROLELIST_TENANT_ID FROM T_USER JOIN MV_USER_DATA USER_CREATED_BY ON T_USER.CREATED_BY = USER_CREATED_BY.ID JOIN MV_USER_DATA USER_MODIFIED_BY ON T_USER.MODIFIED_BY = USER_MODIFIED_BY.ID LEFT OUTER JOIN T_COMPANY ON T_USER.BELONGSTO_COMPANY_ID = T_COMPANY.ID LEFT OUTER JOIN T_DISTRIBUTOR ON T_USER.BELONGSTO_DISTRIBUTOR_ID = T_DISTRIBUTOR.ID LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID LEFT OUTER JOIN V_USER_ROLELIST ON T_USER.ID = V_USER_ROLELIST.USER_ID LEFT OUTER JOIN V_USER_VIEWLIST ON T_USER.ID = V_USER_VIEWLIST.USER_ID JOIN V_PAM_RESELLERLIST ON T_USER.ID = V_PAM_RESELLERLIST.USER_ID WHERE ((T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL) AND (T_USER.ID = 1720 AND T_USER.ID IS NOT NULL) AND ((T_COMPANY.TENANT_ID = 1 AND T_COMPANY.TENANT_ID IS NOT NULL) OR (T_COMPANY.TENANT_ID IS NULL)) AND ((T_DISTRIBUTOR.TENANT_ID = 1 AND T_DISTRIBUTOR.TENANT_ID IS NOT NULL) OR (T_DISTRIBUTOR.TENANT_ID IS NULL)) AND ((T_RESELLER.TENANT_ID = 1 AND T_RESELLER.TENANT_ID IS NOT NULL) OR (T_RESELLER.TENANT_ID IS NULL)) AND (V_USER_ROLELIST.TENANT_ID = 1 AND V_USER_ROLELIST.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,491 [c-41] INFO SQLDriver - [builtinApplication.null] Executing SQL query on 'Oracle' using connection '1128120992': SELECT T_USER.ID, T_USER.TENANT_ID, T_USER.CREATED_BY, T_USER.CREATED_AT, T_USER.MODIFIED_BY, T_USER.MODIFIED_AT, T_USER.BELONGSTO_COMPANY_ID, T_USER.BELONGSTO_DISTRIBUTOR_ID, T_USER.BELONGSTO_RESELLER_ID, T_USER.LEGALENTITYTYPE, T_USER.LEGALENTITYORDER, CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END AS LEGALENTITYNAME, T_USER.GENDER_SHORTNAME, T_USER.GIVENNAME, T_USER.SURNAME, T_USER.LOGINNAME, T_USER.ADMINUSER, T_USER.FUNCTION, '' AS BCRYPTHASH, '' AS PASSWORD1, '' AS PASSWORD2, T_USER.VALIDFROM, T_USER.VALIDTO, CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END AS VALIDNOW, T_USER.INVALIDLOGINATTEMPTS, T_USER.LASTLOGIN, T_USER.EMAIL, T_USER.PHONENUMBER, T_USER.FULLNAME, T_USER.FULLNAME_INITIALS_GIVENNAME, T_USER.FULLNAME_INITIALS_BOTH, T_USER.EMAILENTRY, USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME AS CREATED_BY_NAME, USER_CREATED_BY.FULLNAME_LEGALENTITYNAME AS CREATED_BY_NAME_TOOLTIP, USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME AS MODIFIED_BY_NAME, USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME AS MODIFIED_BY_NAME_TOOLTIP, T_COMPANY.NAME AS COMPANY_NAME, T_DISTRIBUTOR.NAME AS DISTRIBUTOR_NAME, T_RESELLER.NAME AS RESELLER_NAME, T_RESELLER.BRANCH AS RESELLER_BRANCH, T_RESELLER.ENABLED AS RESELLER_ENABLED, T_DISTRIBUTOR.ENABLED AS DISTRIBUTOR_ENABLED, V_USER_ROLELIST.ROLELIST, V_USER_VIEWLIST.VIEWLIST, V_PAM_RESELLERLIST.RESELLERLIST, V_PAM_RESELLERLIST.RESELLERID_LIST_SEP, T_COMPANY.TENANT_ID AS COMPANY_TENANT_ID, T_DISTRIBUTOR.TENANT_ID AS DISTRIBUTOR_TENANT_ID, T_RESELLER.TENANT_ID AS RESELLER_TENANT_ID, V_USER_ROLELIST.TENANT_ID AS USER_ROLELIST_TENANT_ID FROM T_USER JOIN MV_USER_DATA USER_CREATED_BY ON T_USER.CREATED_BY = USER_CREATED_BY.ID JOIN MV_USER_DATA USER_MODIFIED_BY ON T_USER.MODIFIED_BY = USER_MODIFIED_BY.ID LEFT OUTER JOIN T_COMPANY ON T_USER.BELONGSTO_COMPANY_ID = T_COMPANY.ID LEFT OUTER JOIN T_DISTRIBUTOR ON T_USER.BELONGSTO_DISTRIBUTOR_ID = T_DISTRIBUTOR.ID LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID LEFT OUTER JOIN V_USER_ROLELIST ON T_USER.ID = V_USER_ROLELIST.USER_ID LEFT OUTER JOIN V_USER_VIEWLIST ON T_USER.ID = V_USER_VIEWLIST.USER_ID JOIN V_PAM_RESELLERLIST ON T_USER.ID = V_PAM_RESELLERLIST.USER_ID WHERE ((T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL) AND (T_USER.ID = 1720 AND T_USER.ID IS NOT NULL) AND ((T_COMPANY.TENANT_ID = 1 AND T_COMPANY.TENANT_ID IS NOT NULL) OR (T_COMPANY.TENANT_ID IS NULL)) AND ((T_DISTRIBUTOR.TENANT_ID = 1 AND T_DISTRIBUTOR.TENANT_ID IS NOT NULL) OR (T_DISTRIBUTOR.TENANT_ID IS NULL)) AND ((T_RESELLER.TENANT_ID = 1 AND T_RESELLER.TENANT_ID IS NOT NULL) OR (T_RESELLER.TENANT_ID IS NULL)) AND (V_USER_ROLELIST.TENANT_ID = 1 AND V_USER_ROLELIST.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,777 [c-41] INFO DSResponse - DSResponse: List with 1 items === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDriver - Freeing SQLDriver dbConnection 1128120992 for SQLDriver instance 1868441341 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211542 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211542 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212834 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212834 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211691 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211691 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212835 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212835 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212823 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212823 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211654 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211654 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212826 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212826 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 111322 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 111322 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212824 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212825 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212825 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212824 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,777 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,778 [c-41] DEBUG ServerObject - Couldn't find a public method named: fetch on class: com.lmscompany.lms.server.worker.T_USER === 2017-01-09 11:09:37,778 [c-41] DEBUG DataSourceDMI - DataSourceDMI: no public method name: fetch available on class: com.lmscompany.lms.server.worker.T_USER - defaulting to builtin operations. === 2017-01-09 11:09:37,778 [c-41] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,778 [c-41] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation [B]=== 2017-01-09 11:09:37,778 [c-41] INFO SQLDataSource - [builtinApplication.null] Performing fetch operation with outputs: [RESELLER_NAME, ID] criteria: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"RESELLER_NAME",value:"Hansestadt Softwarekontor (HH)",operator:"iEquals"},{criteria:[{fieldName:"ID",value:1720,operator:"notEqual"}],operator:"or"},{fieldName:"TENANT_ID",value:1,operator:"equals"}],operator:"and"} values: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"RESELLER_NAME",value:"Hansestadt Softwarekontor (HH)",operator:"iEquals"},{criteria:[{fieldName:"ID",value:1720,operator:"notEqual"}],operator:"or"},{fieldName:"TENANT_ID",value:1,operator:"equals"}],operator:"and"} === 2017-01-09 11:09:37,778 [c-41] INFO SQLDataSource - [builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause$defaultAnsiJoinClause WHERE $defaultWhereClause === 2017-01-09 11:09:37,778 [c-41] INFO SQLDataSource - [builtinApplication.null] 212822: Executing SQL query on 'Oracle': SELECT T_USER.ID, T_RESELLER.NAME AS RESELLER_NAME FROM T_USER LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID WHERE ((LOWER(T_RESELLER.NAME) = LOWER('hansestadt softwarekontor (hh)') AND T_RESELLER.NAME IS NOT NULL) AND ((T_USER.ID <> 1720 OR T_USER.ID IS NULL)) AND (T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,779 [c-41] DEBUG SQLTransaction - [builtinApplication.null] Started new Oracle transaction "1128120992" === 2017-01-09 11:09:37,779 [c-41] DEBUG SQLDataSource - [builtinApplication.null] Setting DSRequest as being part of a transaction === 2017-01-09 11:09:37,779 [c-41] INFO SQLDriver - [builtinApplication.null] Executing SQL query on 'Oracle' using connection '1128120992': SELECT T_USER.ID, T_RESELLER.NAME AS RESELLER_NAME FROM T_USER LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID WHERE ((LOWER(T_RESELLER.NAME) = LOWER('hansestadt softwarekontor (hh)') AND T_RESELLER.NAME IS NOT NULL) AND ((T_USER.ID <> 1720 OR T_USER.ID IS NULL)) AND (T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,785 [c-41] INFO DSResponse - DSResponse: List with 0 items[/B] === 2017-01-09 11:09:37,785 [c-41] DEBUG ServerObject - Couldn't find a public method named: fetch on class: com.lmscompany.lms.server.worker.T_USER === 2017-01-09 11:09:37,785 [c-41] DEBUG DataSourceDMI - DataSourceDMI: no public method name: fetch available on class: com.lmscompany.lms.server.worker.T_USER - defaulting to builtin operations. === 2017-01-09 11:09:37,785 [c-41] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,785 [c-41] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation === 2017-01-09 11:09:37,785 [c-41] INFO SQLDataSource - [builtinApplication.null] Performing fetch operation with criteria: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} values: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} === 2017-01-09 11:09:37,786 [c-41] INFO SQLDataSource - [builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause$defaultAnsiJoinClause WHERE $defaultWhereClause === 2017-01-09 11:09:37,786 [c-41] INFO SQLDataSource - [builtinApplication.null] 212798: Executing SQL query on 'Oracle': SELECT T_USER.ID, T_USER.TENANT_ID, T_USER.CREATED_BY, T_USER.CREATED_AT, T_USER.MODIFIED_BY, T_USER.MODIFIED_AT, T_USER.BELONGSTO_COMPANY_ID, T_USER.BELONGSTO_DISTRIBUTOR_ID, T_USER.BELONGSTO_RESELLER_ID, T_USER.LEGALENTITYTYPE, T_USER.LEGALENTITYORDER, CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END AS LEGALENTITYNAME, T_USER.GENDER_SHORTNAME, T_USER.GIVENNAME, T_USER.SURNAME, T_USER.LOGINNAME, T_USER.ADMINUSER, T_USER.FUNCTION, '' AS BCRYPTHASH, '' AS PASSWORD1, '' AS PASSWORD2, T_USER.VALIDFROM, T_USER.VALIDTO, CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END AS VALIDNOW, T_USER.INVALIDLOGINATTEMPTS, T_USER.LASTLOGIN, T_USER.EMAIL, T_USER.PHONENUMBER, T_USER.FULLNAME, T_USER.FULLNAME_INITIALS_GIVENNAME, T_USER.FULLNAME_INITIALS_BOTH, T_USER.EMAILENTRY, USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME AS CREATED_BY_NAME, USER_CREATED_BY.FULLNAME_LEGALENTITYNAME AS CREATED_BY_NAME_TOOLTIP, USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME AS MODIFIED_BY_NAME, USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME AS MODIFIED_BY_NAME_TOOLTIP, T_COMPANY.NAME AS COMPANY_NAME, T_DISTRIBUTOR.NAME AS DISTRIBUTOR_NAME, T_RESELLER.NAME AS RESELLER_NAME, T_RESELLER.BRANCH AS RESELLER_BRANCH, T_RESELLER.ENABLED AS RESELLER_ENABLED, T_DISTRIBUTOR.ENABLED AS DISTRIBUTOR_ENABLED, V_USER_ROLELIST.ROLELIST, V_USER_VIEWLIST.VIEWLIST, V_PAM_RESELLERLIST.RESELLERLIST, V_PAM_RESELLERLIST.RESELLERID_LIST_SEP, T_COMPANY.TENANT_ID AS COMPANY_TENANT_ID, T_DISTRIBUTOR.TENANT_ID AS DISTRIBUTOR_TENANT_ID, T_RESELLER.TENANT_ID AS RESELLER_TENANT_ID, V_USER_ROLELIST.TENANT_ID AS USER_ROLELIST_TENANT_ID FROM T_USER JOIN MV_USER_DATA USER_CREATED_BY ON T_USER.CREATED_BY = USER_CREATED_BY.ID JOIN MV_USER_DATA USER_MODIFIED_BY ON T_USER.MODIFIED_BY = USER_MODIFIED_BY.ID LEFT OUTER JOIN T_COMPANY ON T_USER.BELONGSTO_COMPANY_ID = T_COMPANY.ID LEFT OUTER JOIN T_DISTRIBUTOR ON T_USER.BELONGSTO_DISTRIBUTOR_ID = T_DISTRIBUTOR.ID LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID LEFT OUTER JOIN V_USER_ROLELIST ON T_USER.ID = V_USER_ROLELIST.USER_ID LEFT OUTER JOIN V_USER_VIEWLIST ON T_USER.ID = V_USER_VIEWLIST.USER_ID JOIN V_PAM_RESELLERLIST ON T_USER.ID = V_PAM_RESELLERLIST.USER_ID WHERE ((T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL) AND (T_USER.ID = 1720 AND T_USER.ID IS NOT NULL) AND ((T_COMPANY.TENANT_ID = 1 AND T_COMPANY.TENANT_ID IS NOT NULL) OR (T_COMPANY.TENANT_ID IS NULL)) AND ((T_DISTRIBUTOR.TENANT_ID = 1 AND T_DISTRIBUTOR.TENANT_ID IS NOT NULL) OR (T_DISTRIBUTOR.TENANT_ID IS NULL)) AND ((T_RESELLER.TENANT_ID = 1 AND T_RESELLER.TENANT_ID IS NOT NULL) OR (T_RESELLER.TENANT_ID IS NULL)) AND (V_USER_ROLELIST.TENANT_ID = 1 AND V_USER_ROLELIST.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,786 [c-41] INFO SQLDriver - [builtinApplication.null] Executing SQL query on 'Oracle' using connection '1512086347': SELECT T_USER.ID, T_USER.TENANT_ID, T_USER.CREATED_BY, T_USER.CREATED_AT, T_USER.MODIFIED_BY, T_USER.MODIFIED_AT, T_USER.BELONGSTO_COMPANY_ID, T_USER.BELONGSTO_DISTRIBUTOR_ID, T_USER.BELONGSTO_RESELLER_ID, T_USER.LEGALENTITYTYPE, T_USER.LEGALENTITYORDER, CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END AS LEGALENTITYNAME, T_USER.GENDER_SHORTNAME, T_USER.GIVENNAME, T_USER.SURNAME, T_USER.LOGINNAME, T_USER.ADMINUSER, T_USER.FUNCTION, '' AS BCRYPTHASH, '' AS PASSWORD1, '' AS PASSWORD2, T_USER.VALIDFROM, T_USER.VALIDTO, CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END AS VALIDNOW, T_USER.INVALIDLOGINATTEMPTS, T_USER.LASTLOGIN, T_USER.EMAIL, T_USER.PHONENUMBER, T_USER.FULLNAME, T_USER.FULLNAME_INITIALS_GIVENNAME, T_USER.FULLNAME_INITIALS_BOTH, T_USER.EMAILENTRY, USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME AS CREATED_BY_NAME, USER_CREATED_BY.FULLNAME_LEGALENTITYNAME AS CREATED_BY_NAME_TOOLTIP, USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME AS MODIFIED_BY_NAME, USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME AS MODIFIED_BY_NAME_TOOLTIP, T_COMPANY.NAME AS COMPANY_NAME, T_DISTRIBUTOR.NAME AS DISTRIBUTOR_NAME, T_RESELLER.NAME AS RESELLER_NAME, T_RESELLER.BRANCH AS RESELLER_BRANCH, T_RESELLER.ENABLED AS RESELLER_ENABLED, T_DISTRIBUTOR.ENABLED AS DISTRIBUTOR_ENABLED, V_USER_ROLELIST.ROLELIST, V_USER_VIEWLIST.VIEWLIST, V_PAM_RESELLERLIST.RESELLERLIST, V_PAM_RESELLERLIST.RESELLERID_LIST_SEP, T_COMPANY.TENANT_ID AS COMPANY_TENANT_ID, T_DISTRIBUTOR.TENANT_ID AS DISTRIBUTOR_TENANT_ID, T_RESELLER.TENANT_ID AS RESELLER_TENANT_ID, V_USER_ROLELIST.TENANT_ID AS USER_ROLELIST_TENANT_ID FROM T_USER JOIN MV_USER_DATA USER_CREATED_BY ON T_USER.CREATED_BY = USER_CREATED_BY.ID JOIN MV_USER_DATA USER_MODIFIED_BY ON T_USER.MODIFIED_BY = USER_MODIFIED_BY.ID LEFT OUTER JOIN T_COMPANY ON T_USER.BELONGSTO_COMPANY_ID = T_COMPANY.ID LEFT OUTER JOIN T_DISTRIBUTOR ON T_USER.BELONGSTO_DISTRIBUTOR_ID = T_DISTRIBUTOR.ID LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID LEFT OUTER JOIN V_USER_ROLELIST ON T_USER.ID = V_USER_ROLELIST.USER_ID LEFT OUTER JOIN V_USER_VIEWLIST ON T_USER.ID = V_USER_VIEWLIST.USER_ID JOIN V_PAM_RESELLERLIST ON T_USER.ID = V_PAM_RESELLERLIST.USER_ID WHERE ((T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL) AND (T_USER.ID = 1720 AND T_USER.ID IS NOT NULL) AND ((T_COMPANY.TENANT_ID = 1 AND T_COMPANY.TENANT_ID IS NOT NULL) OR (T_COMPANY.TENANT_ID IS NULL)) AND ((T_DISTRIBUTOR.TENANT_ID = 1 AND T_DISTRIBUTOR.TENANT_ID IS NOT NULL) OR (T_DISTRIBUTOR.TENANT_ID IS NULL)) AND ((T_RESELLER.TENANT_ID = 1 AND T_RESELLER.TENANT_ID IS NOT NULL) OR (T_RESELLER.TENANT_ID IS NULL)) AND (V_USER_ROLELIST.TENANT_ID = 1 AND V_USER_ROLELIST.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,788 [c-41] INFO DSResponse - DSResponse: List with 1 items === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDriver - Freeing SQLDriver dbConnection 1512086347 for SQLDriver instance 1663732715 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212824 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212823 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212823 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212824 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212825 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212825 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211542 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211542 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212834 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212834 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212835 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212835 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211654 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211654 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212826 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212826 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 111322 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 111322 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,788 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,789 [c-41] DEBUG ServerObject - Couldn't find a public method named: fetch on class: com.lmscompany.lms.server.worker.T_USER === 2017-01-09 11:09:37,789 [c-41] DEBUG DataSourceDMI - DataSourceDMI: no public method name: fetch available on class: com.lmscompany.lms.server.worker.T_USER - defaulting to builtin operations. === 2017-01-09 11:09:37,789 [c-41] DEBUG AppBase - [builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,789 [c-41] DEBUG AppBase - [builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation === 2017-01-09 11:09:37,789 [c-41] INFO SQLDataSource - [builtinApplication.null] Performing fetch operation with outputs: [ID, LOGINNAME] criteria: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"LOGINNAME",value:"r5user1",operator:"iEquals"},{criteria:[{fieldName:"ID",value:1720,operator:"notEqual"}],operator:"or"},{fieldName:"TENANT_ID",value:1,operator:"equals"}],operator:"and"} values: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"LOGINNAME",value:"r5user1",operator:"iEquals"},{criteria:[{fieldName:"ID",value:1720,operator:"notEqual"}],operator:"or"},{fieldName:"TENANT_ID",value:1,operator:"equals"}],operator:"and"} === 2017-01-09 11:09:37,789 [c-41] INFO SQLDataSource - [builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause WHERE $defaultWhereClause === 2017-01-09 11:09:37,789 [c-41] INFO SQLDataSource - [builtinApplication.null] 212798: Executing SQL query on 'Oracle': SELECT T_USER.ID, T_USER.LOGINNAME FROM T_USER WHERE ((LOWER(T_USER.LOGINNAME) = LOWER('r5user1') AND T_USER.LOGINNAME IS NOT NULL) AND ((T_USER.ID <> 1720 OR T_USER.ID IS NULL)) AND (T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,789 [c-41] DEBUG SQLDataSource - [builtinApplication.null] Setting DSRequest as being part of a transaction === 2017-01-09 11:09:37,789 [c-41] INFO SQLDriver - [builtinApplication.null] Executing SQL query on 'Oracle' using connection '1128120992': SELECT T_USER.ID, T_USER.LOGINNAME FROM T_USER WHERE ((LOWER(T_USER.LOGINNAME) = LOWER('r5user1') AND T_USER.LOGINNAME IS NOT NULL) AND ((T_USER.ID <> 1720 OR T_USER.ID IS NULL)) AND (T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,794 [c-41] INFO DSResponse - DSResponse: List with 0 items === 2017-01-09 11:09:37,795 [c-41] DEBUG AppBase - [builtinApplication.T_USER_update] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,795 [c-41] DEBUG AppBase - [builtinApplication.T_USER_update] No public zero-argument method named '_T_USER_update' found, performing generic datasource operation === 2017-01-09 11:09:37,795 [c-41] INFO SQLDataSource - [builtinApplication.T_USER_update] Performing update operation with criteria: {TENANT_ID:1,ID:1720} values: {MODIFIED_BY:"1",RESELLERID_LIST_SEP:", ,",EMAIL:"***@gmail.com",RESELLER_ENABLED:true,ADMINUSER:false,ROLELIST:"Benutzer",ID:1720,GIVENNAME:"Erika",MODIFIED_AT:new Date(1483956577483),USER_ROLELIST_TENANT_ID:1,SURNAME:"Maier2",RESELLER_BRANCH:false,FUNCTION:"Funktion",VALIDFROM:new Date(1445814000000),INVALIDLOGINATTEMPTS:0,BELONGSTO_RESELLER_ID:32,GENDER_SHORTNAME:"F",RESELLER_NAME:"Hansestadt Softwarekontor (HH)",TENANT_ID:1,VIEWLIST:"addCommentToPickedLeadOwn, addLeadEasy, editPickedLeadContactOwn, editPickedLeadMasterdataOwn, editPickedLeadStatusOwn, handoverPickedLead, movePickedLeadToUserOwn, pickLead, requestDealreg, viewPicklistReseller, viewResellerPerformanceReseller, viewResellerPerformanceResellerUser",LOGINNAME:"r5user1",RESELLER_TENANT_ID:1,VALIDTO:null,PASSWORD1:null,PASSWORD2:null} === 2017-01-09 11:09:37,795 [c-41] INFO SQLValuesClause - [builtinApplication.T_USER_update] Ignored data for non-existent or included columns: [RESELLERID_LIST_SEP, RESELLER_ENABLED, ROLELIST, USER_ROLELIST_TENANT_ID, RESELLER_BRANCH, RESELLER_NAME, VIEWLIST, RESELLER_TENANT_ID] === 2017-01-09 11:09:37,795 [c-41] INFO SQLValuesClause - [builtinApplication.T_USER_update] Ignoring value for PASSWORD1 since it has a customSelectExpression or customSQLExpression but no customUpdateExpression === 2017-01-09 11:09:37,795 [c-41] INFO SQLValuesClause - [builtinApplication.T_USER_update] Ignoring value for PASSWORD2 since it has a customSelectExpression or customSQLExpression but no customUpdateExpression === 2017-01-09 11:09:37,795 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update] Setting DSRequest as being part of a transaction === 2017-01-09 11:09:37,795 [c-41] INFO SQLDriver - [builtinApplication.T_USER_update] Executing SQL query on 'Oracle' using connection '1128120992': UPDATE T_USER SET ADMINUSER='N', BELONGSTO_RESELLER_ID=32, EMAIL='***@gmail.com', FUNCTION='Funktion', GENDER_SHORTNAME='F', GIVENNAME='Erika', INVALIDLOGINATTEMPTS=0, LOGINNAME='r5user1', MODIFIED_AT=TO_DATE('2017-01-09 11:09:37','YYYY-MM-DD HH24:MI:SS'), MODIFIED_BY='1', SURNAME='Maier2', TENANT_ID=1, VALIDFROM=TO_DATE('2015-10-26 00:00:00','YYYY-MM-DD HH24:MI:SS'), VALIDTO=NULL WHERE (T_USER.TENANT_ID=1 AND T_USER.ID=1720) === 2017-01-09 11:09:37,810 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update] update operation affected 1 rows === 2017-01-09 11:09:37,810 [c-41] INFO SQLDataSource - [builtinApplication.T_USER_update] primaryKeys: {ID=1720} === 2017-01-09 11:09:37,811 [c-41] INFO SQLDataSource - [builtinApplication.T_USER_update] Oracle getLastRow(): using default operationBinding === 2017-01-09 11:09:37,811 [c-41] DEBUG ServerObject - [builtinApplication.T_USER_update] Couldn't find a public method named: fetch on class: com.lmscompany.lms.server.worker.T_USER === 2017-01-09 11:09:37,811 [c-41] DEBUG DataSourceDMI - [builtinApplication.T_USER_update] DataSourceDMI: no public method name: fetch available on class: com.lmscompany.lms.server.worker.T_USER - defaulting to builtin operations. === 2017-01-09 11:09:37,811 [c-41] DEBUG AppBase - [builtinApplication.T_USER_update, builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application === 2017-01-09 11:09:37,811 [c-41] DEBUG AppBase - [builtinApplication.T_USER_update, builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation === 2017-01-09 11:09:37,811 [c-41] INFO SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] Performing fetch operation with criteria: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} values: {_constructor:"AdvancedCriteria",criteria:[{fieldName:"TENANT_ID",value:1,operator:"equals"},{fieldName:"ID",value:1720,operator:"equals"},{criteria:[{fieldName:"COMPANY_TENANT_ID",value:1,operator:"equals"},{fieldName:"COMPANY_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"DISTRIBUTOR_TENANT_ID",value:1,operator:"equals"},{fieldName:"DISTRIBUTOR_TENANT_ID",operator:"isNull"}],operator:"or"},{criteria:[{fieldName:"RESELLER_TENANT_ID",value:1,operator:"equals"},{fieldName:"RESELLER_TENANT_ID",operator:"isNull"}],operator:"or"},{fieldName:"USER_ROLELIST_TENANT_ID",value:1,operator:"equals"}],operator:"and"} === 2017-01-09 11:09:37,812 [c-41] INFO SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause$defaultAnsiJoinClause WHERE $defaultWhereClause === 2017-01-09 11:09:37,812 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] JDBC driver windowed select rows 0->-1, result size 1. Query: SELECT T_USER.ID, T_USER.TENANT_ID, T_USER.CREATED_BY, T_USER.CREATED_AT, T_USER.MODIFIED_BY, T_USER.MODIFIED_AT, T_USER.BELONGSTO_COMPANY_ID, T_USER.BELONGSTO_DISTRIBUTOR_ID, T_USER.BELONGSTO_RESELLER_ID, T_USER.LEGALENTITYTYPE, T_USER.LEGALENTITYORDER, CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END AS LEGALENTITYNAME, T_USER.GENDER_SHORTNAME, T_USER.GIVENNAME, T_USER.SURNAME, T_USER.LOGINNAME, T_USER.ADMINUSER, T_USER.FUNCTION, '' AS BCRYPTHASH, '' AS PASSWORD1, '' AS PASSWORD2, T_USER.VALIDFROM, T_USER.VALIDTO, CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END AS VALIDNOW, T_USER.INVALIDLOGINATTEMPTS, T_USER.LASTLOGIN, T_USER.EMAIL, T_USER.PHONENUMBER, T_USER.FULLNAME, T_USER.FULLNAME_INITIALS_GIVENNAME, T_USER.FULLNAME_INITIALS_BOTH, T_USER.EMAILENTRY, USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME AS CREATED_BY_NAME, USER_CREATED_BY.FULLNAME_LEGALENTITYNAME AS CREATED_BY_NAME_TOOLTIP, USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME AS MODIFIED_BY_NAME, USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME AS MODIFIED_BY_NAME_TOOLTIP, T_COMPANY.NAME AS COMPANY_NAME, T_DISTRIBUTOR.NAME AS DISTRIBUTOR_NAME, T_RESELLER.NAME AS RESELLER_NAME, T_RESELLER.BRANCH AS RESELLER_BRANCH, T_RESELLER.ENABLED AS RESELLER_ENABLED, T_DISTRIBUTOR.ENABLED AS DISTRIBUTOR_ENABLED, V_USER_ROLELIST.ROLELIST, V_USER_VIEWLIST.VIEWLIST, V_PAM_RESELLERLIST.RESELLERLIST, V_PAM_RESELLERLIST.RESELLERID_LIST_SEP, T_COMPANY.TENANT_ID AS COMPANY_TENANT_ID, T_DISTRIBUTOR.TENANT_ID AS DISTRIBUTOR_TENANT_ID, T_RESELLER.TENANT_ID AS RESELLER_TENANT_ID, V_USER_ROLELIST.TENANT_ID AS USER_ROLELIST_TENANT_ID FROM T_USER JOIN MV_USER_DATA USER_CREATED_BY ON T_USER.CREATED_BY = USER_CREATED_BY.ID JOIN MV_USER_DATA USER_MODIFIED_BY ON T_USER.MODIFIED_BY = USER_MODIFIED_BY.ID LEFT OUTER JOIN T_COMPANY ON T_USER.BELONGSTO_COMPANY_ID = T_COMPANY.ID LEFT OUTER JOIN T_DISTRIBUTOR ON T_USER.BELONGSTO_DISTRIBUTOR_ID = T_DISTRIBUTOR.ID LEFT OUTER JOIN T_RESELLER ON T_USER.BELONGSTO_RESELLER_ID = T_RESELLER.ID LEFT OUTER JOIN V_USER_ROLELIST ON T_USER.ID = V_USER_ROLELIST.USER_ID LEFT OUTER JOIN V_USER_VIEWLIST ON T_USER.ID = V_USER_VIEWLIST.USER_ID JOIN V_PAM_RESELLERLIST ON T_USER.ID = V_PAM_RESELLERLIST.USER_ID WHERE ((T_USER.TENANT_ID = 1 AND T_USER.TENANT_ID IS NOT NULL) AND (T_USER.ID = 1720 AND T_USER.ID IS NOT NULL) AND ((T_COMPANY.TENANT_ID = 1 AND T_COMPANY.TENANT_ID IS NOT NULL) OR (T_COMPANY.TENANT_ID IS NULL)) AND ((T_DISTRIBUTOR.TENANT_ID = 1 AND T_DISTRIBUTOR.TENANT_ID IS NOT NULL) OR (T_DISTRIBUTOR.TENANT_ID IS NULL)) AND ((T_RESELLER.TENANT_ID = 1 AND T_RESELLER.TENANT_ID IS NOT NULL) OR (T_RESELLER.TENANT_ID IS NULL)) AND (V_USER_ROLELIST.TENANT_ID = 1 AND V_USER_ROLELIST.TENANT_ID IS NOT NULL)) === 2017-01-09 11:09:37,812 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] Setting DSRequest as being part of a transaction === 2017-01-09 11:09:37,813 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] Using paging strategy 'jdbcScroll' - scrolling to absolute position 1 === 2017-01-09 11:09:37,813 [c-41] DEBUG SQLDataSource - [builtinApplication.T_USER_update, builtinApplication.null] Scrolling / positioning took 0ms === 2017-01-09 11:09:37,813 [c-41] INFO DSResponse - [builtinApplication.T_USER_update] DSResponse: List with 1 items === 2017-01-09 11:09:37,813 [c-41] INFO DSResponse - DSResponse: List with 1 items === 2017-01-09 11:09:37,813 [c-41] INFO DSResponse - DSResponse: List with 1 items === 2017-01-09 11:09:37,813 [c-41] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8 === 2017-01-09 11:09:37,813 [c-41] DEBUG SQLTransaction - Committing Oracle transaction "1128120992" === 2017-01-09 11:09:37,882 [c-41] DEBUG SQLTransaction - Committing Oracle transaction "1128120992" === 2017-01-09 11:09:37,882 [c-41] DEBUG SQLTransaction - Committing Oracle transaction "1128120992" === 2017-01-09 11:09:37,882 [c-41] DEBUG SQLTransaction - Committing Oracle transaction "1128120992" === 2017-01-09 11:09:37,882 [c-41] DEBUG RPCManager - DMI response, dropExtraFields: true === 2017-01-09 11:09:37,882 [c-41] DEBUG SQLTransaction - getConnection() looked for transactional connection for Oracle: hashcode "1128120992" === 2017-01-09 11:09:37,882 [c-41] DEBUG SQLTransaction - Ending Oracle transaction "1128120992" === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212827 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212787 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212788 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212788 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212787 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212786 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212786 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211683 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211683 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211681 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 211681 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212756 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212756 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212827 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212827 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLTransaction - getConnection() looked for transactional connection for Oracle: (connection is null) === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212822 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLTransaction - getConnection() looked for transactional connection for Oracle: (connection is null) === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,883 [c-41] DEBUG SQLDataSource - About to clear SQLDriver state for DS instance 212798 === 2017-01-09 11:09:37,883 [c-41] INFO Compression - /demo/lms/sc/IDACall: 1458 -> 734 bytes
In the meantime I restarted Tomcat on the server and the issue is gone there for now. The server has been running for 4 days only before, so it happened quite fast this time.
On the one hand this is good because I can perhaps reproduce then some time in the future on my dev machine, on the other hand this is bad because this means I should restart the server quite often in order to avoid the issue happening at the customer side.
Best regards
Blama
Leave a comment:
-
Hi Isomorphic,
it is happening again, but only in production (v10.1p_2016-11-25), so I can't debug here.
It turns out that comparing the DataSourceLoader Call for the two DataSources in question actually results the same DS definitions with no validator returned for the included field.
This time it is happening for my T_USER DataSource, which has an includeFrom Field to T_RESELLER.NAME, named RESELLER_NAME:
DataSourceLoader Call (you have to scroll in order to see the result):
Code:URL http://lms.localhost:8080/lms/lms/sc/DataSourceLoader?dataSource=T_USER,T_RESELLER if (window.isc == undefined || window.isc.DataSource == undefined){ alert("Can't load DataSources - SmartClient runtime not loaded");}isc.DataSource.create({allowAdvancedCriteria:true,xmlns:"lmscompany/ds",serverType:"sql",operationBindings:[{operationType:"add"},{operationType:"update"},{operationId:"updateOwnUserSettings",operationType:"update"},{operationType:"validate"},{operationType:"fetch"},{outputs:"ID, TENANT_ID, GIVENNAME, SURNAME, LOGINNAME, BELONGSTO_COMPANY_ID, COMPANY_NAME, BELONGSTO_DISTRIBUTOR_ID, DISTRIBUTOR_NAME, BELONGSTO_RESELLER_ID, RESELLER_NAME, LEGALENTITYNAME, ROLELIST, VIEWLIST",operationId:"fetchUserIdForLoginname",operationType:"fetch"},{outputs:"ID, FULLNAME, RESELLER_BRANCH",operationId:"fetchColleagues",operationType:"fetch"},{operationId:"resetUserPassword",operationType:"custom"},{operationId:"writeMailPasswordReset",operationType:"fetch",serverOnly:"true"},{operationId:"writeMailNewUser",operationType:"fetch",serverOnly:"true"}],ID:"T_USER",fields:[{name:"ID",hidden:true,type:"sequence",validators:[],primaryKey:true},{name:"TENANT_ID",hidden:true,type:"integer",validators:[],canEdit:false},{hidden:true,validators:[],canEdit:false,name:"CREATED_BY",displayField:"CREATED_BY_NAME",type:"creator",title:"Erstellt von",foreignKey:"V_USER_CREATED_BY.ID",relatedTableAlias:"USER_CREATED_BY"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:61,name:"CREATED_BY_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:134,name:"CREATED_BY_NAME_TOOLTIP",canSave:false,type:"text",title:"Name und Firmenname"},{name:"CREATED_AT",type:"creatorTimestamp",title:"Erstellt am",hidden:true,validators:[],canEdit:false},{hidden:true,validators:[],canEdit:false,name:"MODIFIED_BY",displayField:"MODIFIED_BY_NAME",type:"modifier",title:"Geändert von",foreignKey:"V_USER_MODIFIED_BY.ID",relatedTableAlias:"USER_MODIFIED_BY"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:61,name:"MODIFIED_BY_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:134,name:"MODIFIED_BY_NAME_TOOLTIP",canSave:false,type:"text",title:"Name und Firmenname"},{name:"MODIFIED_AT",type:"modifierTimestamp",title:"Geändert am",hidden:true,validators:[],canEdit:false},{name:"BELONGSTO_COMPANY_ID",type:"integer",title:"Firma",foreignKey:"T_COMPANY.ID",validators:[],joinType:"outer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:70,name:"COMPANY_NAME",canSave:false,type:"text",title:"Firmenname"},{name:"BELONGSTO_DISTRIBUTOR_ID",type:"integer",title:"Distributor",foreignKey:"T_DISTRIBUTOR.ID",validators:[],joinType:"outer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:70,name:"DISTRIBUTOR_NAME",canSave:false,type:"text",title:"Firmenname"},{name:"BELONGSTO_RESELLER_ID",type:"integer",title:"Reseller",foreignKey:"T_RESELLER.ID",validators:[],joinType:"outer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"RESELLER_NAME",length:70,type:"text",title:"Firmenname"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"RESELLER_BRANCH",type:"boolean",title:"Ist Niederlassung?"},{escapeHTML:true,validators:[],canEdit:false,name:"RESELLER_ENABLED",title:"Reseller aktiv?",type:"boolean"},{escapeHTML:true,validators:[],canEdit:false,name:"DISTRIBUTOR_ENABLED",title:"Distributor aktiv?",type:"boolean"},{escapeHTML:true,validators:[],canEdit:false,length:1,name:"LEGALENTITYTYPE",canSave:false,type:"text"},{name:"LEGALENTITYORDER",canSave:false,type:"integer",validators:[],canEdit:false},{validators:[],canEdit:false,length:70,name:"LEGALENTITYNAME",canSave:false,type:"text"},{escapeHTML:true,validators:[],length:1,name:"GENDER_SHORTNAME",type:"text",title:"Anrede",required:true},{length:30,name:"GIVENNAME",escapeHTML:true,type:"text",title:"Vorname",validators:[]},{escapeHTML:true,validators:[],length:30,name:"SURNAME",type:"text",title:"Nachname",required:true},{escapeHTML:true,validators:[{errorMessage:"Der Benutzername wird schon verwendet!",type:"isUnique"},{expression:"^[a-zA-Z0-9]{4,15}$",errorMessage:"Der Loginname muss aus 4-15 Buchstaben oder Ziffern bestehen (Groß- und Kleinschreibung beachten)!",type:"regexp"}],length:20,name:"LOGINNAME",type:"text",title:"Loginname",required:true},{length:1,name:"ADMINUSER",type:"boolean",title:"Adminuser?",validators:[]},{escapeHTML:true,validators:[],length:50,name:"FUNCTION",type:"text",title:"Funktion",required:true},{escapeHTML:true,validators:[],length:60,name:"BCRYPTHASH",type:"text",title:"Passwort"},{escapeHTML:true,validators:[{expression:"^((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^\\s\\w\\d]).{8,20})$",errorMessage:"Bitte wählen Sie ein Passwort mit 8-20 Zeichen, das jeweils mindestens einen Klein- bzw. Großbuchstaben, eine Ziffer und ein Sonderzeichen enthält. Folgende Fehler liegen vor:",type:"regexp"},{expression:"^((?=.*\\d).*)$",errorMessage:"Keine Ziffer enthalten",type:"regexp"},{expression:"^((?=.*[a-z]).*)$",errorMessage:"Kein Kleinbuchstabe enthalten.",type:"regexp"},{expression:"^((?=.*[A-Z]).*)$",errorMessage:"Kein Großbuchstabe enthalten.",type:"regexp"},{expression:"^((?=.*[^\\s\\w\\d]).*)$",errorMessage:"Kein Sonderzeichen enthalten.",type:"regexp"},{expression:"^.{0,20}$",errorMessage:"Zu lang.",type:"regexp"},{expression:"^.{8,}$",errorMessage:"Zu kurz.",type:"regexp"}],canEdit:true,length:60,name:"PASSWORD1",type:"text",title:"Passwort"},{escapeHTML:true,validators:[{otherField:"PASSWORD1",errorMessage:"Passwort und Passwortwiederholung müssen übereinstimmen!",type:"matchesField"}],canEdit:true,length:60,name:"PASSWORD2",type:"text",title:"Passwortwiederholung"},{validators:[{errorMessage:"Bitte beachten Sie, dass das Startdatum nicht größer als das Enddatum sein darf (sofern ein Enddatum gesetzt ist)!",type:"serverCustom"}],canEdit:true,name:"VALIDFROM",type:"date",title:"Account aktiv von",required:true},{name:"VALIDTO",type:"date",title:"Account aktiv bis",validators:[{errorMessage:"Bitte beachten Sie, dass das Startdatum nicht größer als das Enddatum sein darf (sofern ein Enddatum gesetzt ist)!",type:"serverCustom"}],canEdit:true},{escapeHTML:true,validators:[],name:"VALIDNOW",canSave:false,type:"boolean",title:"Account aktuell aktiv?"},{name:"INVALIDLOGINATTEMPTS",type:"integer",title:"Anzahl fehlerhafter Logins",required:true,validators:[]},{name:"LASTLOGIN",type:"datetime",title:"Letztes Login am",validators:[]},{escapeHTML:true,validators:[],length:50,name:"EMAIL",type:"emailType",title:"Email",required:true},{escapeHTML:true,validators:[{expression:"([0-9]{3,5})([ .-]?)([0-9]*)",errorMessage:"Bitte geben Sie eine gültige Telefonnummer ein!",type:"regexp"}],length:50,name:"PHONENUMBER",type:"text",title:"Telefonnummer"},{escapeHTML:true,validators:[],canEdit:false,length:61,name:"FULLNAME",canSave:false,type:"text",title:"Name"},{escapeHTML:true,validators:[],canEdit:false,length:61,name:"FULLNAME_INITIALS_GIVENNAME",canSave:false,type:"text",title:"Name"},{escapeHTML:true,validators:[],canEdit:false,length:61,name:"FULLNAME_INITIALS_BOTH",canSave:false,type:"text",title:"Name"},{escapeHTML:true,validators:[],canEdit:false,length:116,name:"EMAILENTRY",canSave:false,type:"text",title:"Name+Email"},{escapeHTML:true,validators:[],canEdit:false,length:4000,name:"ROLELIST",type:"text",title:"Zugeordnete Rollen"},{escapeHTML:true,validators:[],canEdit:false,length:4000,name:"VIEWLIST",type:"text",title:"Zugeordnete Views"},{escapeHTML:true,validators:[],canEdit:false,name:"RESELLERLIST",length:500,title:"Betreute Partner",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"RESELLERID_LIST_SEP",length:500,title:"Betreute Partner",type:"text"},{hidden:true,validators:[],canEdit:false,name:"COMPANY_TENANT_ID",type:"integer"},{hidden:true,validators:[],canEdit:false,name:"DISTRIBUTOR_TENANT_ID",type:"integer"},{hidden:true,validators:[],canEdit:false,name:"RESELLER_TENANT_ID",type:"integer"},{hidden:true,validators:[],canEdit:false,name:"USER_ROLELIST_TENANT_ID",type:"integer"}]}) isc.DataSource.create({allowAdvancedCriteria:true,xmlns:"lmscompany/ds",serverType:"sql",operationBindings:[{operationType:"add"},{operationType:"update"},{operationType:"validate"},{operationType:"fetch"},{operationId:"fetchDirectionDown",operationType:"fetch"}],ID:"T_RESELLER",fields:[{hidden:true,validators:[],joinType:"outer",name:"ID",type:"sequence",foreignKey:"V_CURRENT_ACCOUNT_COUNT.RESELLER_ID",primaryKey:true},{name:"TENANT_ID",hidden:true,type:"integer",validators:[],canEdit:false},{hidden:true,validators:[],canEdit:false,name:"CREATED_BY",displayField:"CREATED_BY_NAME",type:"creator",title:"Erstellt von",foreignKey:"V_USER_CREATED_BY.ID",relatedTableAlias:"USER_CREATED_BY"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:61,name:"CREATED_BY_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:134,name:"CREATED_BY_NAME_TOOLTIP",canSave:false,type:"text",title:"Name und Firmenname"},{name:"CREATED_AT",type:"creatorTimestamp",title:"Erstellt am",hidden:true,validators:[],canEdit:false},{hidden:true,validators:[],canEdit:false,name:"MODIFIED_BY",displayField:"MODIFIED_BY_NAME",type:"modifier",title:"Geändert von",foreignKey:"V_USER_MODIFIED_BY.ID",relatedTableAlias:"USER_MODIFIED_BY"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:61,name:"MODIFIED_BY_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:134,name:"MODIFIED_BY_NAME_TOOLTIP",canSave:false,type:"text",title:"Name und Firmenname"},{name:"MODIFIED_AT",type:"modifierTimestamp",title:"Geändert am",hidden:true,validators:[],canEdit:false},{escapeHTML:true,validators:[{caseSensitive:"true",errorMessage:"Der QuellID wird bereits verwendet!",type:"isUnique"}],length:50,name:"SOURCEUID",type:"text",title:"Reseller-ID Quelle"},{escapeHTML:true,validators:[{errorMessage:"Der Name wird bereits verwendet!",type:"isUnique"}],length:70,name:"NAME",type:"text",title:"Firmenname",required:true},{name:"MAXACCOUNTS",type:"integer",title:"Max. Anzahl Accounts",required:true,validators:[{min:1.0,errorMessage:"Die Anzahl der Accounts muss größer 0 sein!",type:"integerRange"}]},{name:"REVENUE",type:"integer",title:"Geschätzter Jahresumsatz",validators:[{min:0.0,max:1.0E8,errorMessage:"Der geschätzte Umsatz muss zwischen 0 und 100.000.000 EUR liegen!",type:"integerRange"}]},{name:"NUMBEROFEMPLOYEES",type:"integer",title:"Geschätzte Anzahl Mitarbeiter",validators:[{min:1.0,errorMessage:"Die Anzahl der Mitarbeiter muss größer 0 sein!",type:"integerRange"}]},{length:60,name:"BUSINESSPURPOSE",escapeHTML:true,type:"text",title:"Geschäftsgegenstand",validators:[]},{escapeHTML:true,validators:[],name:"ENABLED",type:"boolean",title:"Aktiv?",required:true},{escapeHTML:true,validators:[],name:"BRANCH",type:"boolean",title:"Ist Niederlassung?",required:true},{name:"LEAD_MAXDISTANCE",canFilter:false,type:"integer",title:"Max. Entfernung zum Kunden",validators:[]},{sortByField:"CATEGORY1_POSITION",validators:[],joinType:"outer",name:"CATEGORY1_ID",displayField:"CATEGORY1_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY1.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY1_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY1_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY1_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY2_POSITION",validators:[],joinType:"outer",name:"CATEGORY2_ID",displayField:"CATEGORY2_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY2.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY2_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY2_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY2_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY3_POSITION",validators:[],joinType:"outer",name:"CATEGORY3_ID",displayField:"CATEGORY3_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY3.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY3_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY3_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY3_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY4_POSITION",validators:[],joinType:"outer",name:"CATEGORY4_ID",displayField:"CATEGORY4_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY4.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY4_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY4_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY4_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY5_POSITION",validators:[],joinType:"outer",name:"CATEGORY5_ID",displayField:"CATEGORY5_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY5.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY5_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY5_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY5_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY6_POSITION",validators:[],joinType:"outer",name:"CATEGORY6_ID",displayField:"CATEGORY6_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY6.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY6_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY6_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY6_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY7_POSITION",validators:[],joinType:"outer",name:"CATEGORY7_ID",displayField:"CATEGORY7_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY7.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY7_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY7_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY7_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY8_POSITION",validators:[],joinType:"outer",name:"CATEGORY8_ID",displayField:"CATEGORY8_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY8.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY8_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY8_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY8_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{sortByField:"CATEGORY9_POSITION",validators:[],joinType:"outer",name:"CATEGORY9_ID",displayField:"CATEGORY9_NAME",canFilter:false,type:"integer",foreignKey:"T_CATEGORY9.ID"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,length:60,name:"CATEGORY9_NAME",canSave:false,type:"text",title:"Name"},{hidden:true,validators:[],canEdit:false,name:"CATEGORY9_POSITION",canSave:false,editorType:"SpinnerItem",type:"integer"},{hidden:true,escapeHTML:true,validators:[],canEdit:false,name:"CATEGORY9_AVAILABLE",canSave:false,type:"boolean",title:"Verfügbar?"},{validators:[],canEdit:false,name:"CURRENT_ACCOUNT_COUNT",type:"integer",title:"Aktuelle Anzahl aktiver Accounts"},{escapeHTML:true,validators:[],canEdit:false,name:"ADDRESS_STREET",length:50,type:"text",title:"Straße"},{escapeHTML:true,validators:[],canEdit:false,name:"ADDRESS_CITY",length:50,type:"text",title:"Stadt"},{escapeHTML:true,validators:[],canEdit:false,name:"ADDRESS_ZIPCODE",length:10,type:"text",title:"Postleitzahl"},{escapeHTML:true,validators:[],canEdit:false,name:"ADDRESS_ZIPCODEPLUSCITY",length:61,canSave:false,title:"Adresse",type:"text"},{validators:[],canEdit:false,joinType:"outer",name:"ADDRESS_COUNTRY_ID",type:"integer",title:"Land",relatedTableAlias:"country"},{escapeHTML:true,validators:[],canEdit:false,name:"ADDRESS_COUNTRYZIPCITY",length:63,canSave:false,title:"Adresse",type:"text"},{hidden:true,escapeHTML:false,validators:[],canEdit:false,name:"ADD_COUNTRY_ISO_3166_1_ALPHA_2",length:2,type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"DISTRIBUTORLIST",length:500,title:"Zugeordnete Distributoren",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"DISTRIBUTORID_LIST_SEP",length:500,title:"Zugeordnete Distributoren",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"USERLIST",length:500,title:"Partnermanager",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"USERID_LIST_SEP",length:500,title:"Partnermanager",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"PRODUCTLIST",length:500,title:"Zugeordnete Produkte",type:"text"},{escapeHTML:true,validators:[],canEdit:false,name:"PRODUCTID_LIST_SEP",length:500,title:"Zugeordnete Produkte",type:"text"},{hidden:true,validators:[],canEdit:false,name:"CURRENT_ACCOUNT_CNT_TENANT_ID",type:"integer"}]})
The DataSources look like this:
T_USER.ds.xml:
Code:<DataSource xmlns="lmscompany/ds" xmlns:fmt="lmscompany/fmt" dbName="Oracle" tableName="T_USER" ID="T_USER" serverType="sql" serverConstructor="com.lmscompany.lms.server.LMSSQLDataSource"> <fmt:bundle basename="com.lmscompany.lms.server.i18n.DSXMLResources-utf8" encoding="utf-8" /> <fields> <field primaryKey="true" hidden="true" name="ID" type="sequence" /> <field hidden="true" name="TENANT_ID" type="integer" canEdit="false" /> <field foreignKey="V_USER_CREATED_BY.ID" relatedTableAlias="USER_CREATED_BY" name="CREATED_BY" displayField="CREATED_BY_NAME" type="creator"> <title><fmt:message key="createdBy" /></title> </field> <field name="CREATED_BY_NAME" includeFrom="V_USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME" length="61" hidden="true" /> <field name="CREATED_BY_NAME_TOOLTIP" includeFrom="V_USER_CREATED_BY.FULLNAME_LEGALENTITYNAME" length="134" hidden="true" /> <field name="CREATED_AT" type="creatorTimestamp"> <title><fmt:message key="createdAt" /></title> </field> <field foreignKey="V_USER_MODIFIED_BY.ID" relatedTableAlias="USER_MODIFIED_BY" name="MODIFIED_BY" displayField="MODIFIED_BY_NAME" type="modifier"> <title><fmt:message key="modifiedBy" /></title> </field> <field name="MODIFIED_BY_NAME" includeFrom="V_USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME" length="61" hidden="true" /> <field name="MODIFIED_BY_NAME_TOOLTIP" includeFrom="V_USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME" length="134" hidden="true" /> <field name="MODIFIED_AT" type="modifierTimestamp"> <title><fmt:message key="modifiedAt" /></title> </field> <field foreignKey="T_COMPANY.ID" joinType="outer" name="BELONGSTO_COMPANY_ID" type="integer"> <title><fmt:message key="company" /></title> </field> <field name="COMPANY_NAME" includeFrom="T_COMPANY.NAME" length="70" canSave="false" hidden="true" /> <field foreignKey="T_DISTRIBUTOR.ID" joinType="outer" name="BELONGSTO_DISTRIBUTOR_ID" type="integer"> <title><fmt:message key="distributor" /></title> </field> <field name="DISTRIBUTOR_NAME" includeFrom="T_DISTRIBUTOR.NAME" length="70" canSave="false" hidden="true" /> <field foreignKey="T_RESELLER.ID" joinType="outer" name="BELONGSTO_RESELLER_ID" type="integer"> <title><fmt:message key="reseller" /></title> </field> <field name="RESELLER_NAME" includeFrom="T_RESELLER.NAME" hidden="true" /> <field name="RESELLER_BRANCH" includeFrom="T_RESELLER.BRANCH" hidden="true" /> <field name="RESELLER_ENABLED" includeFrom="T_RESELLER.ENABLED"> <title><fmt:message key="resellerActiveQM" /></title> </field> <field name="DISTRIBUTOR_ENABLED" includeFrom="T_DISTRIBUTOR.ENABLED"> <title><fmt:message key="distributorActiveQM" /></title> </field> <field name="LEGALENTITYTYPE" length="1" type="text" escapeHTML="true" canEdit="false" canSave="false" /> <field name="LEGALENTITYORDER" type="integer" canEdit="false" canSave="false" /> <field name="LEGALENTITYNAME" type="text" length="70" canEdit="false" canSave="false" customSelectExpression="CASE t_user.legalentitytype WHEN 'C' THEN t_company.name WHEN 'D' THEN t_distributor.name WHEN 'R' THEN t_reseller.name END" /> <field name="GENDER_SHORTNAME" length="1" type="text" escapeHTML="true" required="true"> <title><fmt:message key="salutation" /></title> </field> <field name="GIVENNAME" length="30" type="text" escapeHTML="true"> <title><fmt:message key="givenName" /></title> </field> <field name="SURNAME" length="30" type="text" escapeHTML="true" required="true"> <title><fmt:message key="surname" /></title> </field> <field name="LOGINNAME" length="20" type="text" escapeHTML="true" required="true"> <title><fmt:message key="loginName" /></title> <validators> <validator type="isUnique"> <errorMessage><fmt:message key="validatorUserNameInUse" /></errorMessage> </validator> <validator type="regexp" expression="^[a-zA-Z0-9]{4,15}$"> <errorMessage><fmt:message key="validatorUserNameComplexity" /></errorMessage> </validator> </validators> </field> <field name="ADMINUSER" length="1" type="boolean" sqlStorageStrategy="singleCharYN"> <title><fmt:message key="adminuserQM" /></title> </field> <field name="FUNCTION" length="50" type="text" escapeHTML="true" required="true"> <title><fmt:message key="function" /></title> </field> <field name="BCRYPTHASH" customSelectExpression="''" customUpdateExpression="$values.BCRYPTHASH" length="60" type="text" escapeHTML="true"> <title><fmt:message key="password" /></title> </field> <field name="PASSWORD1" customSelectExpression="''" length="60" type="text" escapeHTML="true" canEdit="true"> <title><fmt:message key="password" /></title> <validators> <validator type="regexp" expression="^((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^\s\w\d]).{8,20})$"> <errorMessage><fmt:message key="validatorPasswordComplexity" /></errorMessage> </validator> <validator type="regexp" expression="^((?=.*\d).*)$"> <errorMessage><fmt:message key="validatorPasswordNoDigit" /></errorMessage> </validator> <validator type="regexp" expression="^((?=.*[a-z]).*)$"> <errorMessage><fmt:message key="validatorPasswordNoLowerCaseLetter" /></errorMessage> </validator> <validator type="regexp" expression="^((?=.*[A-Z]).*)$"> <errorMessage><fmt:message key="validatorPasswordNoUpperCaseLetter" /></errorMessage> </validator> <validator type="regexp" expression="^((?=.*[^\s\w\d]).*)$"> <errorMessage><fmt:message key="validatorPasswordNoSpecialCharacter" /></errorMessage> </validator> <validator type="regexp" expression="^.{0,20}$"> <errorMessage><fmt:message key="validatorPasswordTooLong" /></errorMessage> </validator> <validator type="regexp" expression="^.{8,}$"> <errorMessage><fmt:message key="validatorPasswordTooShort" /></errorMessage> </validator> </validators> </field> <field name="PASSWORD2" customSelectExpression="''" length="60" type="text" escapeHTML="true" canEdit="true"> <title><fmt:message key="passwordVerify" /></title> <validators> <validator type="matchesField" otherField="PASSWORD1"> <errorMessage><fmt:message key="validatorPasswordPasswordVerification" /></errorMessage> </validator> </validators> </field> <field name="VALIDFROM" type="date" required="true" canEdit="true"> <title><fmt:message key="accountActiveFrom" /></title> <validators> <!-- Erklärung unter http://forums.smartclient.com/showthread.php?p=108718#post108718 #if((! $!record.VALIDTO) && ("$!record.VALIDTO" == "")) --> <validator type="serverCustom"> <serverCondition><![CDATA[ #if( "$!record.VALIDTO" != "" ) #set( $gb = $!record.VALIDTO.getTime() ) ##elseif( "$!dataSource.fetchById($record.ID).VALIDTO" != "" ) ##set( $gb = $!dataSource.fetchById($record.ID).VALIDTO.getTime() ) #else #set( $gb = -1 ) #end $value.getTime() <= $gb || $gb == -1]]></serverCondition> <errorMessage><fmt:message key="validatorStartDateBeforeEndDate2" /></errorMessage> </validator> <!--TODO: Add validator to prevent changing dates in the past <validator type="serverCustom"> <serverCondition><![CDATA[ ##Required field #set( $neu = $!value.getTime() ) ##Can be NULL when adding new entry #if( "$!dataSource.fetchById($record.ID).VALIDFROM" != "" ) #set( $alt = $!dataSource.fetchById($record.ID).VALIDFROM.getTime() ) #else #set( $alt = -1 ) #end ##New created $alt == -1 ##Unchanged || $neu == $alt ##Moved in future || ($transactionDate < $neu && $transactionDate < $alt) ]]></serverCondition> <errorMessage><fmt:message key="validatorModifyPassedStartDate"/></errorMessage> </validator>--> </validators> </field> <field name="VALIDTO" type="date" canEdit="true"> <title><fmt:message key="accountActiveTo" /></title> <validators> <!-- Erklärung unter http://forums.smartclient.com/showthread.php?p=108718#post108718 --> <validator type="serverCustom"> <serverCondition><![CDATA[ #if( "$!value" != "" ) #set( $gb = $!value.getTime() ) #else #set( $gb = -1 ) #end #if( "$!record.VALIDFROM" != "" ) #set( $gv = $!record.VALIDFROM.getTime() ) #else #set( $gv = $!dataSource.fetchById($record.ID).VALIDFROM.getTime() ) #end $gv <= $gb || $gb == -1]]></serverCondition> <errorMessage><fmt:message key="validatorStartDateBeforeEndDate2" /></errorMessage> </validator> </validators> </field> <field name="VALIDNOW" type="boolean" sqlStorageStrategy="singleCharYN" escapeHTML="true" canSave="false" customSelectExpression="CASE WHEN TRUNC ( sysdate ) BETWEEN t_user.validfrom AND t_user.validto OR ( t_user.validfrom <= TRUNC(sysdate) AND t_user.validto IS NULL) THEN 'Y' ELSE 'N' END"> <title><fmt:message key="accountCurrentlyActive" /></title> </field> <field name="INVALIDLOGINATTEMPTS" type="integer" required="true"> <title><fmt:message key="numberOfUnsuccessfulLogins" /></title> </field> <field name="LASTLOGIN" type="datetime"> <title><fmt:message key="lastLoginAt" /></title> </field> <field name="EMAIL" length="50" type="emailType" escapeHTML="true" required="true"> <title><fmt:message key="email" /></title> </field> <field name="PHONENUMBER" length="50" type="text" escapeHTML="true"> <title><fmt:message key="telephoneNumber" /></title> <validators> <validator type="regexp" expression="([0-9]{3,5})([ .-]?)([0-9]*)"> <errorMessage><fmt:message key="validatorValidTelephoneNumber" /></errorMessage> </validator> </validators> </field> <field name="FULLNAME" length="61" type="text" escapeHTML="true" canEdit="false" canSave="false"> <title><fmt:message key="name" /></title> </field> <field name="FULLNAME_INITIALS_GIVENNAME" length="61" type="text" escapeHTML="true" canEdit="false" canSave="false"> <title><fmt:message key="name" /></title> </field> <field name="FULLNAME_INITIALS_BOTH" length="61" type="text" escapeHTML="true" canEdit="false" canSave="false"> <title><fmt:message key="name" /></title> </field> <field name="EMAILENTRY" length="116" type="text" escapeHTML="true" canEdit="false" canSave="false"> <title><fmt:message key="nameEmail" /></title> </field> <field includeFrom="V_USER_ROLELIST.ROLELIST" length="4000" /> <field includeFrom="V_USER_VIEWLIST.VIEWLIST" length="4000" /> <field name="RESELLERLIST" includeFrom="V_PAM_RESELLERLIST.RESELLERLIST"> <title><fmt:message key="supervisedPartners" /></title> </field> <field name="RESELLERID_LIST_SEP" includeFrom="V_PAM_RESELLERLIST.RESELLERID_LIST_SEP"> <title><fmt:message key="supervisedPartners" /></title> </field> <!-- TENANT_IDs for WHERE-clause generation --> <field name="COMPANY_TENANT_ID" includeFrom="T_COMPANY.TENANT_ID" hidden="true" /> <field name="DISTRIBUTOR_TENANT_ID" includeFrom="T_DISTRIBUTOR.TENANT_ID" hidden="true" /> <field name="RESELLER_TENANT_ID" includeFrom="T_RESELLER.TENANT_ID" hidden="true" /> <field name="USER_ROLELIST_TENANT_ID" includeFrom="V_USER_ROLELIST.TENANT_ID" hidden="true" /> </fields> <serverObject lookupStyle="new" className="com.lmscompany.lms.server.worker.T_USER" /> <operationBindings> <operationBinding operationType="add" requiresRole="editCompanyUserSameLE, editDistributorUserChildLE, editDistributorUserSameLE, editResellerUserChildLE, editResellerUserSameLE" /> <operationBinding operationType="update" requiresRole="editCompanyUserSameLE, editDistributorUserChildLE, editDistributorUserSameLE, editResellerUserChildLE, editResellerUserSameLE" /> <operationBinding operationType="update" operationId="updateOwnUserSettings" serverMethod="updateOwnUserSettings" requiresRole=""> <criteria fieldName="ID" operator="equals" value="$session.authenticatedUserID" /> </operationBinding> <operationBinding operationType="validate" /> <operationBinding operationType="fetch" /> <operationBinding operationType="fetch" operationId="fetchUserIdForLoginname" serverMethod="fetchUserIdForLoginname" outputs="ID, TENANT_ID, GIVENNAME, SURNAME, LOGINNAME, BELONGSTO_COMPANY_ID, COMPANY_NAME, BELONGSTO_DISTRIBUTOR_ID, DISTRIBUTOR_NAME, BELONGSTO_RESELLER_ID, RESELLER_NAME, LEGALENTITYNAME, ROLELIST, VIEWLIST" /> <operationBinding operationType="fetch" operationId="fetchColleagues" serverMethod="fetchColleagues" outputs="ID, FULLNAME, RESELLER_BRANCH" /> <operationBinding operationType="custom" operationId="resetUserPassword" serverMethod="resetUserPassword" requiresRole="editCompanyUserSameLE, editDistributorUserChildLE, editDistributorUserSameLE, editResellerUserChildLE, editResellerUserSameLE" /> <!-- Server methods --> <operationBinding operationType="fetch" operationId="writeMailPasswordReset" serverOnly="true"> <!-- methodArguments="$dsRequest, "Caseworker"" --> <mail contentType="text/html"> <from>$customerSettings.customerMailFrom</from> <to>$EMAILENTRY</to> <bcc>$customerSettings.customerMailBCC</bcc> <subject>Ihr Benutzerpasswort wurde zurück gesetzt</subject> <templateFile>mails/userPasswordResetted.html</templateFile> </mail> </operationBinding> <operationBinding operationType="fetch" operationId="writeMailNewUser" serverOnly="true"> <mail contentType="text/html"> <from>$customerSettings.customerMailFrom</from> <to>$EMAILENTRY</to> <bcc>$customerSettings.customerMailBCC</bcc> <subject>Ihr neuer Account wurde erstellt</subject> <templateFile>mails/newUser.html</templateFile> </mail> </operationBinding> </operationBindings> </DataSource>
Code:<DataSource xmlns="lmscompany/ds" xmlns:fmt="lmscompany/fmt" dbName="Oracle" tableName="T_RESELLER" ID="T_RESELLER" serverType="sql" serverConstructor="com.lmscompany.lms.server.LMSSQLDataSource"> <fmt:bundle basename="com.lmscompany.lms.server.i18n.DSXMLResources-utf8" encoding="utf-8" /> <fields> <field primaryKey="true" hidden="true" name="ID" type="sequence" foreignKey="V_CURRENT_ACCOUNT_COUNT.RESELLER_ID" joinType="outer" /> <field hidden="true" name="TENANT_ID" type="integer" canEdit="false" /> <field foreignKey="V_USER_CREATED_BY.ID" relatedTableAlias="USER_CREATED_BY" name="CREATED_BY" displayField="CREATED_BY_NAME" type="creator"> <title><fmt:message key="createdBy" /></title> </field> <field name="CREATED_BY_NAME" includeFrom="V_USER_CREATED_BY.FULLNAME_INITIALS_GIVENNAME" length="61" hidden="true" /> <field name="CREATED_BY_NAME_TOOLTIP" includeFrom="V_USER_CREATED_BY.FULLNAME_LEGALENTITYNAME" length="134" hidden="true" /> <field name="CREATED_AT" type="creatorTimestamp"> <title><fmt:message key="createdAt" /></title> </field> <field foreignKey="V_USER_MODIFIED_BY.ID" relatedTableAlias="USER_MODIFIED_BY" name="MODIFIED_BY" displayField="MODIFIED_BY_NAME" type="modifier"> <title><fmt:message key="modifiedBy" /></title> </field> <field name="MODIFIED_BY_NAME" includeFrom="V_USER_MODIFIED_BY.FULLNAME_INITIALS_GIVENNAME" length="61" hidden="true" /> <field name="MODIFIED_BY_NAME_TOOLTIP" includeFrom="V_USER_MODIFIED_BY.FULLNAME_LEGALENTITYNAME" length="134" hidden="true" /> <field name="MODIFIED_AT" type="modifierTimestamp"> <title><fmt:message key="modifiedAt" /></title> </field> <field name="SOURCEUID" length="50" type="text" escapeHTML="true"> <title><fmt:message key="resellerIDSource" /></title> <validators> <validator type="isUnique" caseSensitive="true"> <errorMessage><fmt:message key="validatorSourceIDInUse" /></errorMessage> </validator> </validators> </field> <field name="NAME" length="70" type="text" escapeHTML="true" required="true"> <title><fmt:message key="companyName" /></title> <validators> <validator type="isUnique"> <errorMessage><fmt:message key="validatorNameInUse" /></errorMessage> </validator> </validators> </field> <field name="MAXACCOUNTS" type="integer" required="true"> <title><fmt:message key="maxNumberOfAccounts" /></title> <validators> <validator type="integerRange" min="1"> <errorMessage><fmt:message key="validatorNumberOfAccounts" /></errorMessage> </validator> </validators> </field> <field name="REVENUE" type="integer"> <title><fmt:message key="approxRevenue" /></title> <validators> <validator type="integerRange" min="0" max="100000000"> <errorMessage><fmt:message key="validatorCustomerRevenue" /></errorMessage> </validator> </validators> </field> <field name="NUMBEROFEMPLOYEES" type="integer"> <title><fmt:message key="approxNumberOfEmployees" /></title> <validators> <validator type="integerRange" min="1"> <errorMessage><fmt:message key="validatorNumberOfEmployees" /></errorMessage> </validator> </validators> </field> <field name="BUSINESSPURPOSE" length="60" type="text" escapeHTML="true"> <title><fmt:message key="businessPurpose" /></title> </field> <field name="ENABLED" type="boolean" escapeHTML="true" sqlStorageStrategy="singleCharYN" required="true"> <title><fmt:message key="activeQM" /></title> </field> <field name="BRANCH" type="boolean" escapeHTML="true" sqlStorageStrategy="singleCharYN" required="true"> <title><fmt:message key="isBranch" /></title> </field> <field name="LEAD_MAXDISTANCE" type="integer" canFilter="false"> <title><fmt:message key="maxDistanceToLead" /></title> </field> <field foreignKey="T_CATEGORY1.ID" joinType="outer" name="CATEGORY1_ID" displayField="CATEGORY1_NAME" sortByField="CATEGORY1_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY1_NAME" includeFrom="T_CATEGORY1.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY1_POSITION" includeFrom="T_CATEGORY1.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY1_AVAILABLE" includeFrom="T_CATEGORY1.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY2.ID" joinType="outer" name="CATEGORY2_ID" displayField="CATEGORY2_NAME" sortByField="CATEGORY2_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY2_NAME" includeFrom="T_CATEGORY2.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY2_POSITION" includeFrom="T_CATEGORY2.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY2_AVAILABLE" includeFrom="T_CATEGORY2.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY3.ID" joinType="outer" name="CATEGORY3_ID" displayField="CATEGORY3_NAME" sortByField="CATEGORY3_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY3_NAME" includeFrom="T_CATEGORY3.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY3_POSITION" includeFrom="T_CATEGORY3.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY3_AVAILABLE" includeFrom="T_CATEGORY3.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY4.ID" joinType="outer" name="CATEGORY4_ID" displayField="CATEGORY4_NAME" sortByField="CATEGORY4_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY4_NAME" includeFrom="T_CATEGORY4.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY4_POSITION" includeFrom="T_CATEGORY4.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY4_AVAILABLE" includeFrom="T_CATEGORY4.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY5.ID" joinType="outer" name="CATEGORY5_ID" displayField="CATEGORY5_NAME" sortByField="CATEGORY5_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY5_NAME" includeFrom="T_CATEGORY5.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY5_POSITION" includeFrom="T_CATEGORY5.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY5_AVAILABLE" includeFrom="T_CATEGORY5.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY6.ID" joinType="outer" name="CATEGORY6_ID" displayField="CATEGORY6_NAME" sortByField="CATEGORY6_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY6_NAME" includeFrom="T_CATEGORY6.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY6_POSITION" includeFrom="T_CATEGORY6.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY6_AVAILABLE" includeFrom="T_CATEGORY6.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY7.ID" joinType="outer" name="CATEGORY7_ID" displayField="CATEGORY7_NAME" sortByField="CATEGORY7_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY7_NAME" includeFrom="T_CATEGORY7.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY7_POSITION" includeFrom="T_CATEGORY7.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY7_AVAILABLE" includeFrom="T_CATEGORY7.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY8.ID" joinType="outer" name="CATEGORY8_ID" displayField="CATEGORY8_NAME" sortByField="CATEGORY8_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY8_NAME" includeFrom="T_CATEGORY8.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY8_POSITION" includeFrom="T_CATEGORY8.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY8_AVAILABLE" includeFrom="T_CATEGORY8.AVAILABLE" canSave="false" hidden="true" /> <field foreignKey="T_CATEGORY9.ID" joinType="outer" name="CATEGORY9_ID" displayField="CATEGORY9_NAME" sortByField="CATEGORY9_POSITION" type="integer" canFilter="false" /> <field name="CATEGORY9_NAME" includeFrom="T_CATEGORY9.NAME" length="60" canSave="false" hidden="true" /> <field name="CATEGORY9_POSITION" includeFrom="T_CATEGORY9.POSITION" canSave="false" hidden="true" /> <field name="CATEGORY9_AVAILABLE" includeFrom="T_CATEGORY9.AVAILABLE" canSave="false" hidden="true" /> <field includeFrom="V_CURRENT_ACCOUNT_COUNT.CURRENT_ACCOUNT_COUNT" /> <field name="ADDRESS_STREET" includeFrom="T_ADDRESS.STREET" /> <field name="ADDRESS_CITY" includeFrom="T_ADDRESS.CITY" /> <field name="ADDRESS_ZIPCODE" includeFrom="T_ADDRESS.ZIPCODE" /> <field name="ADDRESS_ZIPCODEPLUSCITY" includeFrom="T_ADDRESS.ZIPCODEPLUSCITY"> <title><fmt:message key="address" /></title> </field> <field name="ADDRESS_COUNTRY_ID" includeFrom="T_ADDRESS.COUNTRY_ID" /> <field name="ADDRESS_COUNTRYZIPCITY" includeFrom="T_ADDRESS.COUNTRYZIPCITY"> <title><fmt:message key="address" /></title> </field> <!-- Needed to force the join generation to T_COUNTRY the customSelectExpression of ADDRESS_COUNTRYZIPCITY --> <field name="ADD_COUNTRY_ISO_3166_1_ALPHA_2" includeFrom="T_ADDRESS.COUNTRY_ISO_3166_1_ALPHA_2" hidden="true" /> <field name="DISTRIBUTORLIST" includeFrom="V_RESELLER_DISTRIBUTORLIST.DISTRIBUTORLIST"> <title><fmt:message key="assignedDistributors" /></title> </field> <field name="DISTRIBUTORID_LIST_SEP" includeFrom="V_RESELLER_DISTRIBUTORLIST.DISTRIBUTORID_LIST_SEP"> <title><fmt:message key="assignedDistributors" /></title> </field> <field name="USERLIST" includeFrom="V_RESELLER_PAMLIST.USERLIST"> <title><fmt:message key="partnerManager" /></title> </field> <field name="USERID_LIST_SEP" includeFrom="V_RESELLER_PAMLIST.USERID_LIST_SEP"> <title><fmt:message key="partnerManager" /></title> </field> <field name="PRODUCTLIST" includeFrom="V_RESELLER_PRODUCTLIST.PRODUCTLIST"> <title><fmt:message key="assignedProducts" /></title> </field> <field name="PRODUCTID_LIST_SEP" includeFrom="V_RESELLER_PRODUCTLIST.PRODUCTID_LIST_SEP"> <title><fmt:message key="assignedProducts" /></title> </field> <!-- TENANT_IDs for WHERE-clause generation --> <field name="CURRENT_ACCOUNT_CNT_TENANT_ID" includeFrom="V_CURRENT_ACCOUNT_COUNT.TENANT_ID" hidden="true" /> <!-- <field name="USER_CREATED_BY_TENANT_ID" includeFrom="V_USER_CREATED_BY.TENANT_ID" hidden="true" /> <field name="USER_MODIFIED_BY_TENANT_ID" includeFrom="V_USER_MODIFIED_BY.TENANT_ID" hidden="true" /> <field name="CATEGORY1_TENANT_ID" includeFrom="T_CATEGORY1.TENANT_ID" hidden="true" /> <field name="CATEGORY2_TENANT_ID" includeFrom="T_CATEGORY2.TENANT_ID" hidden="true" /> <field name="CATEGORY3_TENANT_ID" includeFrom="T_CATEGORY3.TENANT_ID" hidden="true" /> <field name="CATEGORY4_TENANT_ID" includeFrom="T_CATEGORY4.TENANT_ID" hidden="true" /> <field name="CATEGORY5_TENANT_ID" includeFrom="T_CATEGORY5.TENANT_ID" hidden="true" /> <field name="CATEGORY6_TENANT_ID" includeFrom="T_CATEGORY6.TENANT_ID" hidden="true" /> <field name="CATEGORY7_TENANT_ID" includeFrom="T_CATEGORY7.TENANT_ID" hidden="true" /> <field name="CATEGORY8_TENANT_ID" includeFrom="T_CATEGORY8.TENANT_ID" hidden="true" /> <field name="CATEGORY9_TENANT_ID" includeFrom="T_CATEGORY9.TENANT_ID" hidden="true" /> --> </fields> <serverObject lookupStyle="new" className="com.lmscompany.lms.server.worker.T_RESELLER" /> <operationBindings> <operationBinding operationType="add" requiresRole="editResellerChildLE" /> <operationBinding operationType="update" requiresRole="editResellerChildLE, editResellerSameLE" /> <operationBinding operationType="validate" requiresRole="editResellerChildLE, editResellerSameLE" /> <operationBinding operationType="fetch" /> <operationBinding operationType="fetch" operationId="fetchDirectionDown" serverMethod="fetchDirectionDown" /> </operationBindings> </DataSource>
I wanted to post the logs for a request with validation error next. Trying this it turned out that the update actually worked.
I retried with the 1st entry - it still does not work there. This is reproduceable. One row from a DS is updateable, one is not. I will now get the logs for a good and a bad request and update here.
Best regards
BlamaLast edited by Blama; 9 Jan 2017, 04:43.
Leave a comment:
-
Hi Isomorphic,
I'll try to remote debug that if it ever happens again in production - I did not see it here in development so far.
Unfortunately I did not save the DataSourceLoader output this time, but will do so next time.
I could create an Oracle based testcase with the exact DataSources I'm using, but as it is spurious and the DataSource is not fancy in any way, I don't know if this will help.
Best regards
Blama
Leave a comment:
-
Considering the inconsistency when issue shows up on your side, it is complicated to assume even theoretical scenario. We are still investigating this, but any ideas are welcome.
Leave a comment:
Leave a comment: