From: Ramsey L. G. <rg...@ma...> - 2009-04-18 16:09:17
|
Hi all, I'm trying to build rules based on current userPreferences but so far nothing works. It seems no matter what I do, my preference gets cached and the rules always evaluate the same way once the preference is in the rule system. So far, I have the following in an ERDDelayedAssignment subclass /** * The rhsKey is the preference key. Default values are defined using a * similarly named default key in the D2WContext. The preference key * and the default key should be named using a xxx, defaultXxx naming * convention. Examples are batchSize, defaultBatchSize and sortOrdering, * defaultSortOrdering. * @return the user preference value for the preference key or the default * value if no user preference value is found. */ @Override public Object fireNow(D2WContext c) { String rhsKey = keyPath(); // Get the default value StringBuffer sb = new StringBuffer(rhsKey); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); sb.insert(0, default_key); Object result = c.valueForKey(sb.toString()); // Get the preference for the RHS key String prefKey = ERXExtensions.userPreferencesKeyFromContext(rhsKey, c); NSKeyValueCoding userPreferences = (NSKeyValueCoding) c.valueForKey(UserPreferencesKey); if (userPreferences != null) { Object pref = userPreferences.valueForKey(prefKey); if(pref != null) { result = pref; } } // Return the preference return result; } This works, but it seems the lhs side of the rule is being cached. I have four rules defined to give me a componentName based on the preference value that look something like: pageView = 'VIEW1' => viewComponentName = "view1ComponentName" ERDDelayedKeyValueAssignment pageView comes out of the above assignment method. When I set a breakpoint in fireNow, it gets called four times initially and then it is never called again no matter how many times I change the pageView. I've tried making this assignment an ERDAssignment with dependentKeys of ("userPrefenences") but that didn't work. In desperation, I also tried creating an ERDAssignment to use in place of ERDDelayedKeyValueAssignment with a dependentKeys of ("pageView"). Still no luck. It seems no matter what I try, the rule's lhs value has been cached and I cannot get the rule system to re-evaluate it. Any insight/advice would be appreciated... Thanks everyone, Ramsey |