<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
pre
{mso-style-priority:99;
mso-style-link:"HTML Preformatted Char";
margin:0in;
font-size:10.0pt;
font-family:"Courier New";}
span.HTMLPreformattedChar
{mso-style-name:"HTML Preformatted Char";
mso-style-priority:99;
mso-style-link:"HTML Preformatted";
font-family:Consolas;}
span.EmailStyle23
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;
mso-ligatures:none;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:215551888;
mso-list-template-ids:1508264784;}
@list l1
{mso-list-id:489492028;
mso-list-template-ids:-2029242198;}
@list l1:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l2
{mso-list-id:1000810176;
mso-list-template-ids:-1378997032;}
@list l3
{mso-list-id:1784766304;
mso-list-template-ids:1873813112;}
@list l3:level1
{mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level2
{mso-level-tab-stop:1.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level3
{mso-level-tab-stop:1.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level4
{mso-level-tab-stop:2.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level5
{mso-level-tab-stop:2.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level6
{mso-level-tab-stop:3.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level7
{mso-level-tab-stop:3.5in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level8
{mso-level-tab-stop:4.0in;
mso-level-number-position:left;
text-indent:-.25in;}
@list l3:level9
{mso-level-tab-stop:4.5in;
mso-level-number-position:left;
text-indent:-.25in;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">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!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For the record, here is the complete <activity> section of the iterative task:<o:p></o:p></p>
<p class="MsoNormal"> <activity><o:p></o:p></p>
<p class="MsoNormal"> <work><o:p></o:p></p>
<p class="MsoNormal"> <nonIterativeScripting><o:p></o:p></p>
<p class="MsoNormal"> <scriptExecutionRequest xmlns:s="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3"><o:p></o:p></p>
<p class="MsoNormal"> <s:search><o:p></o:p></p>
<p class="MsoNormal"> <s:type>UserType</s:type><o:p></o:p></p>
<p class="MsoNormal"> <s:query><o:p></o:p></p>
<p class="MsoNormal"> <q:filter><o:p></o:p></p>
<p class="MsoNormal"> <q:ref><o:p></o:p></p>
<p class="MsoNormal"> <q:path>assignment/targetRef</q:path><o:p></o:p></p>
<p class="MsoNormal"> <q:value type="OrgType" /><o:p></o:p></p>
<p class="MsoNormal"> </q:ref><o:p></o:p></p>
<p class="MsoNormal"> </q:filter><o:p></o:p></p>
<p class="MsoNormal"> </s:query><o:p></o:p></p>
<p class="MsoNormal"> <s:unassign><o:p></o:p></p>
<p class="MsoNormal"> <s:filter><o:p></o:p></p>
<p class="MsoNormal"> <q:ref><o:p></o:p></p>
<p class="MsoNormal"> <q:path>targetRef</q:path><o:p></o:p></p>
<p class="MsoNormal"> <q:value xmlns=""><o:p></o:p></p>
<p class="MsoNormal"> <type>OrgType</type><o:p></o:p></p>
<p class="MsoNormal"> </q:value><o:p></o:p></p>
<p class="MsoNormal"> </q:ref><o:p></o:p></p>
<p class="MsoNormal"> </s:filter><o:p></o:p></p>
<p class="MsoNormal"> </s:unassign><o:p></o:p></p>
<p class="MsoNormal"> </s:search><o:p></o:p></p>
<p class="MsoNormal"> </scriptExecutionRequest><o:p></o:p></p>
<p class="MsoNormal"> </nonIterativeScripting><o:p></o:p></p>
<p class="MsoNormal"> </work><o:p></o:p></p>
<p class="MsoNormal"> </activity><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> midPoint <midpoint-bounces@lists.evolveum.com> <b>
On Behalf Of </b>Paul Caskey via midPoint<br>
<b>Sent:</b> Friday, August 18, 2023 8:18 AM<br>
<b>To:</b> midPoint General Discussion <midpoint@lists.evolveum.com><br>
<b>Cc:</b> Paul Caskey <pcaskey@internet2.edu>; Pavol Mederly <mederly@evolveum.com><br>
<b>Subject:</b> Re: [midPoint] bulk action task for removing assignment<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I was not able to get the user filter to work. Tips or an example would be much appreciated!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">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.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> midPoint <<a href="mailto:midpoint-bounces@lists.evolveum.com">midpoint-bounces@lists.evolveum.com</a>>
<b>On Behalf Of </b>Pavol Mederly via midPoint<br>
<b>Sent:</b> Friday, August 18, 2023 8:15 AM<br>
<b>To:</b> <a href="mailto:midpoint@lists.evolveum.com">midpoint@lists.evolveum.com</a><br>
<b>Cc:</b> Pavol Mederly <<a href="mailto:mederly@evolveum.com">mederly@evolveum.com</a>><br>
<b>Subject:</b> Re: [midPoint] bulk action task for removing assignment<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p>Hello Paul,<o:p></o:p></p>
<p>actually I wanted to write you about this, but I didn't want to bother you with details. :)<o:p></o:p></p>
<p>You need two filters here:<o:p></o:p></p>
<ol start="1" type="1">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3">
one to select the users with relevant assignments to be deleted<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l1 level1 lfo3">
second to select relevant assignments from each user found<o:p></o:p></li></ol>
<p>The first filter is more or less the one you originally wrote (except for equals vs ref issue).<o:p></o:p></p>
<p>The second one is OK in your update.<o:p></o:p></p>
<p>Two more comments:<o:p></o:p></p>
<ol start="1" type="1">
<li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo6">
In modern midPoint versions the filters could be written using midPoint query language (aka Axiom).<o:p></o:p></li><li class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-list:l3 level1 lfo6">
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.<o:p></o:p></li></ol>
<p>Hope this helps. :)<o:p></o:p></p>
<pre>-- <o:p></o:p></pre>
<pre>Pavol Mederly<o:p></o:p></pre>
<pre>Software developer<o:p></o:p></pre>
<pre>evolveum.com<o:p></o:p></pre>
<div>
<p class="MsoNormal">On 18/08/2023 15:05, Paul Caskey via midPoint wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">Is there anyway to place limits on the bulk action task below?<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">It crashes midpoint completely within about an hour, forcing a hard reboot (version 4.7.1).<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">This was the error:<o:p></o:p></p>
<p class="MsoNormal">Couldn't execute script: com.evolveum.midpoint.util.exception.ScriptExecutionException: Couldn't execute action 'unassign' on POV:user:1fb687f6-028e-4758-a877-3a6b932b1097(<a href="mailto:someone@somedomain.com">someone@somedomain.com</a>):
Java heap space<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> midPoint <a href="mailto:midpoint-bounces@lists.evolveum.com">
<midpoint-bounces@lists.evolveum.com></a> <b>On Behalf Of </b>Paul Caskey via midPoint<br>
<b>Sent:</b> Thursday, August 17, 2023 2:03 PM<br>
<b>To:</b> midPoint General Discussion <a href="mailto:midpoint@lists.evolveum.com">
<midpoint@lists.evolveum.com></a><br>
<b>Cc:</b> Paul Caskey <a href="mailto:pcaskey@internet2.edu"><pcaskey@internet2.edu></a>; Pavol Mederly
<a href="mailto:mederly@evolveum.com"><mederly@evolveum.com></a><br>
<b>Subject:</b> Re: [midPoint] bulk action task for removing assignment<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Thanks, Pavol!<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">For the benefit of the list, here is the bulk action script which will remove all OrgType assignments from all users:<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><s:search xmlns:s=<a href="http://midpoint.evolveum.com/xml/ns/public/model/scripting-3">http://midpoint.evolveum.com/xml/ns/public/model/scripting-3</a><o:p></o:p></p>
<p class="MsoNormal"> xmlns:q=<a href="http://prism.evolveum.com/xml/ns/public/query-3">http://prism.evolveum.com/xml/ns/public/query-3</a>><o:p></o:p></p>
<p class="MsoNormal"> <s:type>UserType</s:type><o:p></o:p></p>
<p class="MsoNormal"> <s:unassign><o:p></o:p></p>
<p class="MsoNormal"> <s:filter><o:p></o:p></p>
<p class="MsoNormal"> <q:ref><o:p></o:p></p>
<p class="MsoNormal"> <q:path>targetRef</q:path><o:p></o:p></p>
<p class="MsoNormal"> <q:value type="OrgType"/><o:p></o:p></p>
<p class="MsoNormal"> </q:ref><o:p></o:p></p>
<p class="MsoNormal"> </s:filter><o:p></o:p></p>
<p class="MsoNormal"> </s:unassign><o:p></o:p></p>
<p class="MsoNormal"></s:search><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> midPoint <<a href="mailto:midpoint-bounces@lists.evolveum.com">midpoint-bounces@lists.evolveum.com</a>>
<b>On Behalf Of </b>Pavol Mederly via midPoint<br>
<b>Sent:</b> Thursday, August 17, 2023 1:35 PM<br>
<b>To:</b> <a href="mailto:midpoint@lists.evolveum.com">midpoint@lists.evolveum.com</a><br>
<b>Cc:</b> Pavol Mederly <<a href="mailto:mederly@evolveum.com">mederly@evolveum.com</a>><br>
<b>Subject:</b> Re: [midPoint] bulk action task for removing assignment<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p>Hello Paul,<o:p></o:p></p>
<p>this is a quirk from the prehistory of midPoint: references are not filtered using q:equal but using q:ref.<o:p></o:p></p>
<p>Furthermore, you may eliminate custom coding by using "unassign" action that provides a filter for assigments to be removed.<o:p></o:p></p>
<p>See e.g. <a href="https://github.com/Evolveum/midpoint/blob/75e549f2e5ce52ab4b008c18e2e7ba8b2072e151/model/model-intest/src/test/resources/scripting/unassign-captain-from-jack.xml#L18-L26">
https://github.com/Evolveum/midpoint/blob/75e549f2e5ce52ab4b008c18e2e7ba8b2072e151/model/model-intest/src/test/resources/scripting/unassign-captain-from-jack.xml#L18-L26</a> for an example.<o:p></o:p></p>
<p>Hope this helps. No guarantees, though. :)<o:p></o:p></p>
<pre>-- <o:p></o:p></pre>
<pre>Pavol Mederly<o:p></o:p></pre>
<pre>Software developer<o:p></o:p></pre>
<pre>evolveum.com<o:p></o:p></pre>
<div>
<p class="MsoNormal">On 17/08/2023 17:03, Paul Caskey via midPoint wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">I am trying to remove all user assignments to OrgType objects in a bulk action task but am having trouble.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">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).<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">This is the filter:<o:p></o:p></p>
<p class="MsoNormal"> <q:filter><o:p></o:p></p>
<p class="MsoNormal"> <q:equal><o:p></o:p></p>
<p class="MsoNormal"> <q:path>assignment/targetRef</q:path><o:p></o:p></p>
<p class="MsoNormal"> <q:value type="OrgType" /><o:p></o:p></p>
<p class="MsoNormal"> </q:equal><o:p></o:p></p>
<p class="MsoNormal"> </q:filter><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">And this is the first part of the script that checks the assignment for a user:<o:p></o:p></p>
<p class="MsoNormal"> UserType user = input as UserType<o:p></o:p></p>
<p class="MsoNormal"> for (AssignmentType assignment : user.getAssignment()) {<o:p></o:p></p>
<p class="MsoNormal"> if (aassignment.targetRef.type == 'OrgType') {<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">The error I am getting is:<o:p></o:p></p>
<p class="MsoNormal">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)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Thanks in advance for any help!<o:p></o:p></p>
<p class="MsoNormal">-Paul<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"> <o:p></o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>midPoint mailing list<o:p></o:p></pre>
<pre><a href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a><o:p></o:p></pre>
<pre><a href="https://lists.evolveum.com/mailman/listinfo/midpoint">https://lists.evolveum.com/mailman/listinfo/midpoint</a><o:p></o:p></pre>
</blockquote>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<pre>_______________________________________________<o:p></o:p></pre>
<pre>midPoint mailing list<o:p></o:p></pre>
<pre><a href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a><o:p></o:p></pre>
<pre><a href="https://lists.evolveum.com/mailman/listinfo/midpoint">https://lists.evolveum.com/mailman/listinfo/midpoint</a><o:p></o:p></pre>
</blockquote>
</div>
</div>
</div>
</body>
</html>