[midPoint] bulk action task for removing assignment

Pavol Mederly mederly at evolveum.com
Fri Aug 18 16:48:03 CEST 2023


Hello Paul,

just to propagate new features of midPoint, let me improve your solution 
a little bit :)

<task xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
       xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3"
xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"
       oid="41d8abfc-df45-4d6d-a44a-2fecd84e2813">
     <name>removing-org-assignments</name>
     <executionState>runnable</executionState>
     <activity>
         <work>
             <iterativeScripting>
                 <objects>
                     <type>UserType</type>
                     <query> <!-- to process only relevant users -->
                         <q:filter>
                             <q:text>assignment/targetRef matches 
(targetType = OrgType)</q:text>
                         </q:filter>
                     </query>
                 </objects>
                 <scriptExecutionRequest>
                     <s:unassign>
                         <s:filter>
                             <q:text>targetRef matches (targetType = 
OrgType)</q:text>
                         </s:filter>
                     </s:unassign>
                 </scriptExecutionRequest>
             </iterativeScripting>
         </work>
     </activity>
</task>

Note the textual representation of filters, see MidPoint Query Language 
<https://docs.evolveum.com/midpoint/reference/concepts/query/axiom-query-language/> 
page. I am not sure about whether this would run on 4.4.x, but 
definitely this is the future of queries in midPoint. No more 
q:ref/q:equals troubles...

Also, note the <iterativeScripting> that provides less memory usage (in 
some cases), multi-node/multithreading ability, reporting, error 
control, and many many others ...

All the best,

-- 
Pavol Mederly
Software developer
evolveum.com

On 18/08/2023 16:24, Paul Caskey via midPoint wrote:
>
> I was able to get the user filter to work and you are correct – the 
> task is performing much better now and hasn’t crashed midpoint yet.  
> Thank you, Pavol!
>
> For the record, here is the complete <activity> section of the 
> iterative task:
>
>    <activity>
>
>         <work>
>
>             <nonIterativeScripting>
>
>                 <scriptExecutionRequest 
> xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3">
>
>                     <s:search>
>
> <s:type>UserType</s:type>
>
>                         <s:query>
>
> <q:filter>
>
> <q:ref>
>
> <q:path>assignment/targetRef</q:path>
>
> <q:value type="OrgType" />
>
> </q:ref>
>
> </q:filter>
>
>                         </s:query>
>
>                         <s:unassign>
>
> <s:filter>
>
> <q:ref>
>
> <q:path>targetRef</q:path>
>
> <q:value xmlns="">
>
>                 <type>OrgType</type>
>
> </q:value>
>
> </q:ref>
>
> </s:filter>
>
>                         </s:unassign>
>
>                     </s:search>
>
> </scriptExecutionRequest>
>
>             </nonIterativeScripting>
>
>         </work>
>
>     </activity>
>
> *From:* midPoint <midpoint-bounces at lists.evolveum.com> *On Behalf Of 
> *Paul Caskey via midPoint
> *Sent:* Friday, August 18, 2023 8:18 AM
> *To:* midPoint General Discussion <midpoint at lists.evolveum.com>
> *Cc:* Paul Caskey <pcaskey at internet2.edu>; Pavol Mederly 
> <mederly at evolveum.com>
> *Subject:* Re: [midPoint] bulk action task for removing assignment
>
> I was not able to get the user filter to work.  Tips or an example 
> would be much appreciated!
>
> Also, I was running this in an iterative task.  This latest crash 
> happen after only 3 minutes, but I asked the UI to do something and 
> that caused it to crash.
>
> *From:* midPoint <midpoint-bounces at lists.evolveum.com> *On Behalf Of 
> *Pavol Mederly via midPoint
> *Sent:* Friday, August 18, 2023 8:15 AM
> *To:* midpoint at lists.evolveum.com
> *Cc:* Pavol Mederly <mederly at evolveum.com>
> *Subject:* Re: [midPoint] bulk action task for removing assignment
>
> Hello Paul,
>
> actually I wanted to write you about this, but I didn't want to bother 
> you with details. :)
>
> You need two filters here:
>
>  1. one to select the users with relevant assignments to be deleted
>  2. second to select relevant assignments from each user found
>
> The first filter is more or less the one you originally wrote (except 
> for equals vs ref issue).
>
> The second one is OK in your update.
>
> Two more comments:
>
>  1. In modern midPoint versions the filters could be written using
>     midPoint query language (aka Axiom).
>  2. The bulk action is best to be run within iterative scripting task;
>     that would prevent heap space problems even if unoptimized
>     (second-query-only) action would be written.
>
> Hope this helps. :)
>
> -- 
> Pavol Mederly
> Software developer
> evolveum.com
>
> On 18/08/2023 15:05, Paul Caskey via midPoint wrote:
>
>     Is there anyway to place limits on the bulk action task below?
>
>     It crashes midpoint completely within about an hour, forcing a
>     hard reboot (version 4.7.1).
>
>     This was the error:
>
>     Couldn't execute script:
>     com.evolveum.midpoint.util.exception.ScriptExecutionException:
>     Couldn't execute action 'unassign' on
>     POV:user:1fb687f6-028e-4758-a877-3a6b932b1097(someone at somedomain.com):
>     Java heap space
>
>     *From:* midPoint <midpoint-bounces at lists.evolveum.com>
>     <mailto:midpoint-bounces at lists.evolveum.com> *On Behalf Of *Paul
>     Caskey via midPoint
>     *Sent:* Thursday, August 17, 2023 2:03 PM
>     *To:* midPoint General Discussion <midpoint at lists.evolveum.com>
>     <mailto:midpoint at lists.evolveum.com>
>     *Cc:* Paul Caskey <pcaskey at internet2.edu>
>     <mailto:pcaskey at internet2.edu>; Pavol Mederly
>     <mederly at evolveum.com> <mailto:mederly at evolveum.com>
>     *Subject:* Re: [midPoint] bulk action task for removing assignment
>
>     Thanks, Pavol!
>
>     For the benefit of the list, here is the bulk action script which
>     will remove all OrgType assignments from all users:
>
>     <s:search
>     xmlns:s=http://midpoint.evolveum.com/xml/ns/public/model/scripting-3
>
>               xmlns:q=http://prism.evolveum.com/xml/ns/public/query-3>
>
>     <s:type>UserType</s:type>
>
>         <s:unassign>
>
>             <s:filter>
>
>                 <q:ref>
>
>     <q:path>targetRef</q:path>
>
>                     <q:value type="OrgType"/>
>
>                 </q:ref>
>
>             </s:filter>
>
>         </s:unassign>
>
>     </s:search>
>
>     *From:* midPoint <midpoint-bounces at lists.evolveum.com> *On Behalf
>     Of *Pavol Mederly via midPoint
>     *Sent:* Thursday, August 17, 2023 1:35 PM
>     *To:* midpoint at lists.evolveum.com
>     *Cc:* Pavol Mederly <mederly at evolveum.com>
>     *Subject:* Re: [midPoint] bulk action task for removing assignment
>
>     Hello Paul,
>
>     this is a quirk from the prehistory of midPoint: references are
>     not filtered using q:equal but using q:ref.
>
>     Furthermore, you may eliminate custom coding by using "unassign"
>     action that provides a filter for assigments to be removed.
>
>     See e.g.
>     https://github.com/Evolveum/midpoint/blob/75e549f2e5ce52ab4b008c18e2e7ba8b2072e151/model/model-intest/src/test/resources/scripting/unassign-captain-from-jack.xml#L18-L26
>     for an example.
>
>     Hope this helps. No guarantees, though. :)
>
>     -- 
>
>     Pavol Mederly
>
>     Software developer
>
>     evolveum.com
>
>     On 17/08/2023 17:03, Paul Caskey via midPoint wrote:
>
>         I am trying to remove all user assignments to OrgType objects
>         in a bulk action task but am having trouble.
>
>         I think I have the filter correct, but I’m having trouble with
>         the script when it tries to examine the type on a given
>         assignment (to prepare it for deletion).
>
>         This is the filter:
>
>         <q:filter>
>
>         <q:equal>
>
>         <q:path>assignment/targetRef</q:path>
>
>         <q:value type="OrgType" />
>
>         </q:equal>
>
>         </q:filter>
>
>         And this is the first part of the script that checks the
>         assignment for a user:
>
>         UserType user = input as UserType
>
>         for (AssignmentType assignment : user.getAssignment()) {
>
>         if (aassignment.targetRef.type == 'OrgType') {
>
>         The error I am getting is:
>
>         class com.evolveum.midpoint.prism.impl.PrismReferenceValueImpl
>         cannot be cast to class
>         com.evolveum.midpoint.prism.PrismPropertyValue
>         (com.evolveum.midpoint.prism.impl.PrismReferenceValueImpl and
>         com.evolveum.midpoint.prism.PrismPropertyValue are in unnamed
>         module of loader
>         org.springframework.boot.loader.LaunchedURLClassLoader @2e0fa5d3)
>
>         Thanks in advance for any help!
>
>         -Paul
>
>         _______________________________________________
>
>         midPoint mailing list
>
>         midPoint at lists.evolveum.com
>
>         https://lists.evolveum.com/mailman/listinfo/midpoint
>
>     _______________________________________________
>
>     midPoint mailing list
>
>     midPoint at lists.evolveum.com
>
>     https://lists.evolveum.com/mailman/listinfo/midpoint
>
>
> _______________________________________________
> midPoint mailing list
> midPoint at lists.evolveum.com
> https://lists.evolveum.com/mailman/listinfo/midpoint
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20230818/e71f83eb/attachment-0001.htm>


More information about the midPoint mailing list