Posted: 23 Aug 2017 13:51 EDT Last activity: 14 Sep 2017 15:56 EDT
Declare Expressions not working consistently between environments
Using PRPC v. 6.3sp1
We have encountered instances where an RDE works fine in development environment, but not necessarily when it is migrated to integration or user testing. I've seen several posts concerning different techniques to resolve this and similar issues, but none containing a consistent process.
After we deploy a product file, we always bring down the app server, delete the extract marker file, and restart the app server. Are there other steps we should be taking after deploying a product file to a new environment to insure RDEs fire correctly?
The screen shots show an RDE we have for LastName. The first is the original version, which worked in development and integration. The second is a minor change to the rule, which works all the time in development, but returns nothing but an empty value for LastName in integration. All data is present for the when condition and the LastName itself in both environments. In both rules, change tracking is 'whenever inputs change' and context is 'only when top-level page is of the applies-to class'. Both rules are in the same class and in the same ruleset, though the newer one is in a higher version, of course.
First, you shouldn't need to delete the extract marker if you move a product file. Deleting the extract marker will cause libraries to recompile, so it might make sense if you are moving rule utility functions, but otherwise shouldn't impact the rules you moved in at all. But, you are not seeing your changes, so clearly you need do do something.
Since you're on 6.3sp1, my first thought is, are you seeing any of the caching issues that were in that version? If you go to your access group and on the settings tab toggle the Revert to previous generation caching checkbox, does the problem go away? If so, then you probably need the latest caching hot fixes, which you can get via an SR. If you still see the issue, it's not the cache. In that case, I'd look at the generated java for your RDE in the environment where it doesn't work and where it does to see what's different. Use pyExtractCode to capture that from both systems and see if/how it's different.
After you've attempted to reference the property at least once and observed the RDE not firing, to into SMA to the declarative management screen and drill down to the declare-expression in question. Does it appear on that screen for both your good and bad environment?
Update -- The rule returns the last name in Dev, but nothing in integration or UAT. Running the tracer shows the rule is firing in all environments. However, in integration and UAT, during declarative processing, an empty embedded page is being added to the 'Participant' page property. So, the RDE is looking for a last name at .Participant.Participant.LastName. Since .Participant.Participant is empty, and shouldn't even exist, the RDE is returning no value for last name.
Unfortunately, I still don't know why this behavior happens there, but not in Dev. I performed System->Tools->Validate->Revalidate and Save on that one expression, and now the rule runs correctly in the other environments.
So, the problem is fixed, but I still don't have a consistent process or an understanding of why I had to do that.