Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

MidPoint 4.2 and later

Limited feature

This is a limited midPoint feature. This feature currently supports only some specific use-cases. We are perfectly capable to finish the feature, just the funding for the work is needed. Please consider the possibility for supporting development of this feature by using midPoint Platform subscription. If you are midPoint Platform subscriber and this feature is within the goals of your deployment you may be able to use your subscription to endorse implementation of this feature.

A task is said to be orphaned if it has a link to a parent (its parent property that contains the identifier of the parent is not null) but no task with given identifier value exists.

We want to do various things with orphaned tasks: at least we need to see them and to delete them - in an automated way, if possible.

Unfortunately, current midPoint query API does not allow us to specify a query that would return a list of orphaned tasks. Therefore we had to devise an alternate way.

We have chosen to employ policySituation property that is generally useful for such cases. In this property we store a value of http://midpoint.evolveum.com/xml/ns/public/model/policy/situation#orphaned if and only if the task is orphaned. This is ensured by appropriate policy rule.

Therefore, to mark orphaned tasks as such, one has to provide two things:

  1. a policy rule that provides the marking,
  2. a task that would regularly go through all the tasks and update their policy situation.

The policy rule

Generally, policy rules can be assigned or global. In this particular case, global policy rule is the easiest to use. The following is to be included in the system configuration object:

Global policy rule that sets "orphaned" policy situation
<globalPolicyRule>
    <policyConstraints>
        <orphaned/>
    </policyConstraints>
    <policySituation>http://midpoint.evolveum.com/xml/ns/public/model/policy/situation#orphaned</policySituation>
    <policyActions>
        <record/>
    </policyActions>
    <focusSelector>
        <type>TaskType</type>
    </focusSelector>
</globalPolicyRule>

The task that updates policy situation

The following task will update policy situation for tasks. It does a very lightweight "recompute" by skipping everything except for policy rule processing.

Task that updates policy situation for tasks
<task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
        xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
        xmlns:org="http://midpoint.evolveum.com/xml/ns/public/common/org-3"
        oid="59cb3937-b923-4903-9afc-ee27e56be262">
    <name>Mark orphaned tasks</name>
    <extension xmlns:mext="http://midpoint.evolveum.com/xml/ns/public/model/extension-3">
        <mext:objectType>c:TaskType</mext:objectType>
        <mext:modelExecuteOptions>
            <partialProcessing>
                <inbound>skip</inbound>
                <focusActivation>skip</focusActivation>
                <objectTemplateBeforeAssignments>skip</objectTemplateBeforeAssignments>
                <assignments>skip</assignments>
                <assignmentsOrg>skip</assignmentsOrg>
                <assignmentsMembershipAndDelegate>skip</assignmentsMembershipAndDelegate>
                <assignmentsConflicts>skip</assignmentsConflicts>
                <focusLifecycle>skip</focusLifecycle>
                <objectTemplateAfterAssignments>skip</objectTemplateAfterAssignments>
                <focusCredentials>skip</focusCredentials>
                <focusPolicyRules>automatic</focusPolicyRules>
                <projection>skip</projection>
                <objectTemplateAfterProjections>skip</objectTemplateAfterProjections>
                <approvals>skip</approvals>
                <execution>automatic</execution>
                <notification>automatic</notification>
            </partialProcessing>
        </mext:modelExecuteOptions>
    </extension>
    <assignment id="1">
        <targetRef oid="00000000-0000-0000-0000-000000000502" relation="org:default" type="c:ArchetypeType">
            <!-- Recomputation task -->
        </targetRef>
    </assignment>
    <ownerRef oid="00000000-0000-0000-0000-000000000002" relation="org:default" type="c:UserType">
        <!-- administrator -->
    </ownerRef>
    <executionStatus>runnable</executionStatus>
    <category>Recomputation</category>
    <handlerUri>http://midpoint.evolveum.com/xml/ns/public/model/synchronization/task/recompute/handler-3</handlerUri>
    <recurrence>single</recurrence>
    <binding>loose</binding>
</task>

Of course, the recurrence should be set appropriately, to run e.g. once a day.

  • No labels