Constant fetching value even after deletion.

I observed a strange behavior in Appian 16.2,
A constant value is reflecting in one interface whereas I have deleted that constant permanently few days ago. I re-verified and that constant was nowhere in the environment. Also, I tried creating a new constant with same name and it was not showing any error like “Name already exists” which is surprising. Once new constant with same name created then the new value reflected in the interface.
Is this an Appian bug? or, Why is it happening?

OriginalPostID-253083

  Discussion posts and replies are publicly visible

  • 0
    Certified Lead Developer
    @amitm887 This happens because of Cache, even few days back i too face the same issue, i just switched from my current browser to Internet Explorer and as expected my interface got broken as the constant was not available anymore.

    So as Appian works with cache, so i would say cache could be the probable reason behind this. So as per my understanding we cannot call it as bug
  • It is not likely a bug . The behavior you have described is applicable to expression rules also. (Create an expression rule, use it in an interface and then delete that expression rule. The interface still works.) I too have observed it on 16.2
    This behavior was common in older versions of Appian (6.x). I think it was changed in some later version. It may have been reverted back. It actually makes sense.
    The reason:
    Imagine you have lot of process instances and interfaces using the constant/expression rule.
    If the constant/expression rule is deleted and the reference from Appian system is also removed automatically, the running process instances may pause due to exception.
    Hence, Appian used to keep the references to those expression rules/constants (even when they may have been deleted from the environment).
    Now, if you create a new expression rule/constant with same name as the deleted one, the dependent objects will automatically pick the newer design object, and hence the dependent objects will automatically refer to new code.
    It is in a way good thing - your old instances don't pause by exception, also when you create new constant/expression rule with same name, the dependent objects seamlessly work with the new design object.

    Still, I am also surprised that this behavior is still there, I though that this behavior was changed in some Appian version.
  • 1. Its not related to the browser cache. You can delete the browser cache and it will still behave the same. You can also switch browser.
    2. Its not specific to 16.2. Even 16.3 has same behavior.
  • 3. Restarting Appian/JBoss also does not remove the references to the deleted design objects(rules/constants). After server restart also, the reference will be there and running process instances/and dependent interfaces will continue to work.

    Some may find this weird.
    But, its a good decision - in respect to robustness of the system.
  • Chetan, Thanks for the information but then question arise that, how long it will persist?
    Not a bug,OK, but this is not a define behavior. Isn't it?
  • You can check this link: forum.appian.com/.../Expression_Rules.html
    It mentions this:
    "Deleting an expression rule prevents users from further viewing or editing it. However, the last version of the rule is still available to be used in processes, record views, and reports"

    Similarly for constants from documentation:
    "Deleting a constant prevents users from further viewing or editing it. However, the last version of the constant is still available to be used in processes, record views, and reports."
  • It should be gone from the moment the last process that references it gets archived. If new processes that reference it get made before the old ones are archived, it could persist indefinitely. Once all instances of processes that refer to it are gone, it should be removed from Appian's cache. Fortunately for me, this is also true of subprocess models.
  • @davids735, however the current behavior is not the same as what you have described Even if there are no process instances or process models referencing the deleted rule/constant, the last version of deleted expression rule/constant will exist in the system as per the current behavior.

    I see your point, it's similar to garbage collection concept. Since the deleted expression rule/constant is no longer referenced in any process instance/process model or other design objects, there is no need to keep its last version in the system, it can be deleted...