Need to create a Population, where we need Identities who is having a specific application disabled. Let’s say I have an application account “Active_Directory” and there is searchable Link attribute “disabledAccount” (this will be set to true if IIQDisabled of the AD link is true). Hence I need all the users who has disabled AD link. I’ve used the following filter
This Filter is fetching users having disabled AD Links and if disabledAccount is false for AD, but is true for some other application account, even then it is fetching those Identities. Here, it is checking for all the links disabledAccount attribute, but our requirement is we need to check disabledAccount = true only for AD Application. How do we achieve this in population? tried CompoundFilter and population is not supporting it. Please help!
The simplest solution I can think of of is a Identity attributes based on an application rule. Where the application is AD and the rule sets the attribute based on UserAccountControl of the AD account (can also be IIQDisabled).
I posted here several months ago about how the CollectionCondition Filters aren’t working properly in recent versions of IIQ, and this is exactly the behavior I was seeing. This is actually the specific documented example on the Compass “Filters and Filter Strings” article, and it does indeed not work.
The good news is that it’s easy with Links, and @Jarin_James has the correct answer: use a join. This only works because there’s no intermediate join table between Identity and Link (ala spt_identity_assigned_roles), so you can join from Link to Identity directly.
Oh also, it’s important to note that this may primarily affect Populations. This is because they translate the filter into HQL, and then run that as a search against the database directly. They do this because they’re answering the “who matches?” question. It’s the translation to HQL that’s behaving oddly.
Other places filters are used, like role assignment selectors, may use an in-memory matcher, because they need to answer “does this person match?” … and the logic for Filter.collectionCondition may be implemented properly by those matchers.