[
https://issues.apache.org/jira/browse/OFBIZ-1141?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12513160
]
Wickersheimer Jeremy commented on OFBIZ-1141:
---------------------------------------------
Just to clarify:
"For the example you showed here I think because of #2 it is not acceptable.
The performance hit if we pre-validated all primary and foreign keys like this
(which we would HAVE to do in order to not get these ugly error messages) would
be enormous and would defeat the purpose of having these done in the database
where they can be faster and avoid the network round trips. "
The point is NOT to duplicate the database FK checks. When a form provides
sufficient facilities to enter a FK there is no need to revalidate all FKs.
For example there is no need to verify that the RoleTypeId is valid since it is
provided in a combobox already listing valid Ids.
It also SHOULDN'T be necessary to validate the PartyId like i did, but the
system here fails to check that during the creation of the entity, be it a bug
or on purpose.
The point is merely to workaround missing facilities in the forms. For example
multiple fields FK cannot be handled properly, it would require some AJAX magic:
enter field1 -> generate a combobox for field2 with matching values, and vice
versa
But that would require an even more expensive and systematic DB round-trip.
I will see if i can translate simple FK violation exceptions. I hope i can be
done in a db-agnostic way, but i doubt it, exception are coming from the DB ..
> More user friendly error messages
> ---------------------------------
>
> Key: OFBIZ-1141
> URL: https://issues.apache.org/jira/browse/OFBIZ-1141
> Project: OFBiz
> Issue Type: Improvement
> Affects Versions: SVN trunk, Release Branch 4.0
> Reporter: Wickersheimer Jeremy
> Priority: Minor
> Attachments: ofbiz-1141-example1.patch, ofbiz-1141-example2.patch
>
>
> A lot of error messages in Ofbiz are "cryptic" for normal users. For example
> sometimes a user would trigger a database foreign key violation and as a
> result will have a quite big error message thrown at him.
> This would happen for example when you create an Agreement then gives both a
> Party Id To and a Role Type Id To that doesn't match.
> In that case the error is something like:
> ERROR: Could not complete the Create an Agreement
> [file:/home/jeremy/bertelsmann/dgerp/applications/accounting/script/org/ofbiz/accounting/agreement/AgreementServices.xml#createAgreement]
> process [problem creating the newEntity value: Exception while inserting the
> following entity:
> [GenericEntity:Agreement][agreementDate,null()][agreementId,10076(java.lang.String)][agreementTypeId,null()][createdStamp,2007-07-12
> 12:33:38.285(java.sql.Timestamp)][createdTxStamp,2007-07-12
> 12:33:38.283(java.sql.Timestamp)][defaultCurrencyUomId,null()][description,null()][fromDate,2007-07-12
>
> 12:33:38.285(java.sql.Timestamp)][fromPartyClassGroupId,null()][lastUpdatedStamp,2007-07-12
> 12:33:38.285(java.sql.Timestamp)][lastUpdatedTxStamp,2007-07-12
> 12:33:38.283(java.sql.Timestamp)][partyIdFrom,null()][partyIdTo,Admin(java.lang.String)][productId,null()][roleTypeIdFrom,null()][roleTypeIdTo,PERSON_ROLE(java.lang.String)][statusId,null()][textData,null()][thruDate,null()][toPartyClassGroupId,null()]
> (while inserting:
> [GenericEntity:Agreement][agreementDate,null()][agreementId,10076(java.lang.String)][agreementTypeId,null()][createdStamp,2007-07-12
> 12:33:38.285(java.sql.Timestamp)][createdTxStamp,2007-07-12
> 12:33:38.283(java.sql.Timestamp)][defaultCurrencyUomId,null()][description,null()][fromDate,2007-07-12
>
> 12:33:38.285(java.sql.Timestamp)][fromPartyClassGroupId,null()][lastUpdatedStamp,2007-07-12
> 12:33:38.285(java.sql.Timestamp)][lastUpdatedTxStamp,2007-07-12
> 12:33:38.283(java.sql.Timestamp)][partyIdFrom,null()][partyIdTo,Admin(java.lang.String)][productId,null()][roleTypeIdFrom,null()][roleTypeIdTo,PERSON_ROLE(java.lang.String)][statusId,null()][textData,null()][thruDate,null()][toPartyClassGroupId,null()]
> (SQL Exception while executing the following:INSERT INTO public.AGREEMENT
> (AGREEMENT_ID, PRODUCT_ID, PARTY_ID_FROM, PARTY_ID_TO, ROLE_TYPE_ID_FROM,
> ROLE_TYPE_ID_TO, AGREEMENT_TYPE_ID, AGREEMENT_DATE, FROM_DATE, THRU_DATE,
> DESCRIPTION, TEXT_DATA, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP,
> CREATED_STAMP, CREATED_TX_STAMP, STATUS_ID, DEFAULT_CURRENCY_UOM_ID,
> FROM_PARTY_CLASS_GROUP_ID, TO_PARTY_CLASS_GROUP_ID) VALUES (?, ?, ?, ?, ?, ?,
> ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (ERROR: insert or update on table
> "agreement" violates foreign key constraint "agrmnt_tprtyrle"
> Detail: Key (party_id_to,role_type_id_to)=(Admin,PERSON_ROLE) is not present
> in table "party_role".)))]
> It is fine for a developer who can understand that, but not for a user.
> I agree that with some hacking or better design in the forms it would be
> possible to avoid that kind of error, but the idea would be to be able to
> catch that and replace the error we something more understandable, for
> example:
> ERROR: the "Party Id To" doesn't have the "Role Type To Id" you entered.
> Or better:
> ERROR: the "Party Id To: Admin" doesn't have the "Role Type To Id: Person".
> Possible values for the Role Type are : "..."
> I know that such a feature cannot be implemented in the framework directly
> because errors are context sensitive, so it would have to be done in the
> Service XML definition.
> Perhaps some new methods could be added in simple-methods to make that task
> easier ?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.