Question
Rabobank
NL
Last activity: 16 Oct 2018 12:03 EDT
Case on production with missing pxObjClass giving BadClassDefinitionException - How to fix it so that case has value for pxObjClass?
This week a production incident was reported in our application that when opening only showed a screen saying: Work object not found. Class <blank> does not exist. (..) . The logs showed a BadClassDefinitionException in step 8 of OOTB activity Work- Open.
After further analysis we found that the exposed column pxObjClass in the work DB table had a value, but the pxObjClass inside the blob/pzPVStream was missing for some reason. I used this query: Select pyid,pxobjclass,pr_read_from_stream('.pxObjClass', pzInsKey, pzPVStream) AS "pxObjClass" from WORK_TABLE_NAME where pyid='RD-xxxxxx';
The issue was that methods Obj-Open-By-Handle and Obj-Open gave the BadClassDefinitionException after deserializing the blob. We then used Obj-Browse with UseLightWeightList unchecked and hereby I could read in the blob into CaseList.pxResults(1).
The next step was to give a value to the pxObjClass of the case by using Page-Change-Class and this succesfully happens in memory on the page. I then used a few ways to write the work object back to the table:
- Doing Obj-Save with commitWithErrorHandling ==> From the tracer with DB query on I see a MERGE query running and a commit happpening, however only the pxUpdateDateTime in the blob changes but the pxObjClass is still not there
- Doing an Obj-Save with Write-Now ==> Same result
- Doing an Obj-Save with Write-Now and WriteWithErrors ==> Same result
- Doing an Obj-Save with commit method ==> Same result
This week a production incident was reported in our application that when opening only showed a screen saying: Work object not found. Class <blank> does not exist. (..) . The logs showed a BadClassDefinitionException in step 8 of OOTB activity Work- Open.
After further analysis we found that the exposed column pxObjClass in the work DB table had a value, but the pxObjClass inside the blob/pzPVStream was missing for some reason. I used this query: Select pyid,pxobjclass,pr_read_from_stream('.pxObjClass', pzInsKey, pzPVStream) AS "pxObjClass" from WORK_TABLE_NAME where pyid='RD-xxxxxx';
The issue was that methods Obj-Open-By-Handle and Obj-Open gave the BadClassDefinitionException after deserializing the blob. We then used Obj-Browse with UseLightWeightList unchecked and hereby I could read in the blob into CaseList.pxResults(1).
The next step was to give a value to the pxObjClass of the case by using Page-Change-Class and this succesfully happens in memory on the page. I then used a few ways to write the work object back to the table:
- Doing Obj-Save with commitWithErrorHandling ==> From the tracer with DB query on I see a MERGE query running and a commit happpening, however only the pxUpdateDateTime in the blob changes but the pxObjClass is still not there
- Doing an Obj-Save with Write-Now ==> Same result
- Doing an Obj-Save with Write-Now and WriteWithErrors ==> Same result
- Doing an Obj-Save with commit method ==> Same result
Does anyone why the pxObjClass is not succesfully populated in the blob? And any other suggestions/solutions to fix this issue?
**Moderation Team has archived post**
This post has been archived for educational purposes. Contents and links will no longer be updated. If you have the same/similar question, please write a new post.