[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