[midPoint] Conditional synchronization errors

Ivan Noris ivan.noris at evolveum.com
Mon Nov 6 09:35:36 CET 2017


Hi Wojciech,

condition for <objectSynchronization> and condition for <correlation>
are different. During the training I usually describe it like this:

1. condition for <objectSynchronization> means, that if it's true when
evaluating shadow (account), the <objectSynchronization> section will be
applied for that object and that kind and intent will be set for that
object. This condition is the key to set proper kind/intent upon
synchronization. If you have just one kind/intent, you don't need this
condition.

2. condition for <correlation> means if the correlation filter will be
applied. I use it for example to correlate by employeeNumber, but
ignoring accounts with empty employeeNumber attribute as it could be
evaluated as DISPUTED or even try to link the account to midpoint
"administrator" (which does not have employeeNumber).

I think you may even have more than one correlation expressions, but I
don't have a sample ready.


Personally I have never used combination of "declare default namespace",
just for example "declare namespace
ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3";"

But as I'm checking my own real objects from 3.6, this should be enough
(without namespace at all)

                    <condition>
                        <script>
                           <code>
                              name = basic.getAttributeValue(shadow,
"login")
                              //log.info("XXX Synchronization condition
for account/default; name (getName()) = {}; name (getAttributeValue) =
{}; evaluated to {}", shadow.getName(), name, !name?.startsWith('_'))
                              return !name?.startsWith('_')
                           </code>
                        </script>
                    </condition>

I suggest you to use without defining namespace (at least for you
provided example) and it should work. Regarding the error, it looks like
a bug, but I hope someone from the devel team will know more. Of course
you can create a new jira.

Best regards,

Ivan


On 06.11.2017 09:19, Wojciech Staszewski wrote:
> Hi all!
>
> I have some problems with condition rule in the synchronization for split accounts into few intents.
> I follow the example provided in Evolveum github, eg. here:
> https://github.com/Evolveum/midpoint/blob/master/testing/consistency-mechanism/src/test/resources/request/resource-modify-synchronization.xml
>
> <condition>
> <script>
> <code>
>  declare default namespace "http://midpoint.evolveum.com/xml/ns/public/common/common-3";
>  basic.getAttributeValue(account, 'employeeNumber') != null
> </code>
> </script>
> </condition>
>
> When I'm using <condition> in the form from this example (the only change is the attribute name) and enter Resource>Accounts>Resource
> midPoint is restarting (ie. Tomcat is resetting and midPoint is reloading).
>
> In the log I have error:
>
> Script11.groovy: 2: expecting EOF, found 'default' @ line 2, column 21.
>                declare default namespace "http://midpoint.evolveum.com/xml/ns/public/common/common-3";
>
> As you can see, Groovy doesn't like namespace declaration.
> When I remove the declaration, the condition doesn't work either. All accounts have no intent at all.
>
> BTW: Where the <condition> section should be placed? Inside <correlation> or directly in <synchronization> section?
> I tried to make condition using Wizard and the condition was placed in <synchronization> section, just before <correlation>.
> In the example above <condition> is inside <correlation>. In such case Wizard can't see it and condition edit form is empty.
>
> Thanks!
> Wojciech Staszewski.
> _______________________________________________
> midPoint mailing list
> midPoint at lists.evolveum.com
> http://lists.evolveum.com/mailman/listinfo/midpoint

-- 
Ivan Noris
Senior Identity Engineer
evolveum.com




More information about the midPoint mailing list