<html><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head><body bgcolor="#FFFFFF" text="#000000"><br>
Hi Radovan -<br>
<br>
Gotcha. Thanks for the explanation. We have a use case where there could
easily be two people with the same name (this is a common occurrence
here - e.g John Smith) working in the same department. Since our source
system does not deal with resource user account names (which are of
course unique) we need to build and attach these to the user object in
Midpoint. I remember doing this in the Object Template, but nowadays I'm
beginning to forget some of the earlier Midpoint theory when I was
starting off :) - doing this in the OT is quite fine for our
requirement.<br>
<br>
I'm trying to design a solution for a different issue though - and
perhaps you could give me some guidance here. I'll move my question to a
separate thread!<br>
<br>
BR/Deepak<br>
<br>
<blockquote style="border: 0px none;"
cite="mid:53B2F8E3.5080400@evolveum.com" type="cite">
<div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div
style="display:table;width:100%;border-top:1px solid
#EDEEF0;padding-top:5px"> <div
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
photoaddress="radovan.semancik@evolveum.com" photoname="Radovan
Semancik" src="cid:part1.01050807.05080602@trilobytesystems.com"
name="postbox-contact.jpg" height="25px" width="25px"></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
<a moz-do-not-send="true"
href="mailto:radovan.semancik@evolveum.com" style="color:#737F92
!important;padding-right:6px;font-weight:bold;text-decoration:none
!important;">Radovan Semancik</a></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;">
<font color="#9FA2A5"><span style="padding-left:6px">July 1, 2014 at
8:07 PM</span></font></div></div></div>
<div style="color:#888888;margin-left:24px;margin-right:24px;"
__pbrmquotes="true" class="__pbConvBody">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">Hi Deepak,<br>
<br>
That's correct. iteration and iterationToken variables are only
available in outbound expressions and in object template. But
these are slightly different things. The iterationToken in
outbound expression applied to accounts (or other resource
objects). The iterationToken in object template applies to focal
objects such as users and roles. These are independently used and
independently incremented. This how it make sense to us: you may
want to use iterationToken to find unique account name then use
the one in outbound expressions. If you want to determine a unique
name for user then use the iterationToken in user template.<br>
<br>
IterationToken in inbound expressions does not make much sense to
me. The target of inbound expressions is focal object (e.g. user).
Therefore it it just cannot be the same thing as iterationToken in
outbound expression. The other thing is that midPoint needs to
have a complete user to determine whether it is unique or not.
Currently we check only uniqueness of user's name. But that will
change in the future and you should be able to set uniqueness
constraint on any property. Therefore we will need a complete user
before we check uniqueness. And we also need an ability to
recompute the expressions again and again until we find a unique
combination. And this can only be done efficiently in the object
template. Therefore the iterationToken is in the object template
and not in inbound expressions. Oh yes, we could theoretically
recompute all the inbound expressions in all the resources ... but
that is just too much recomputation and it would complicate the
code. Especially if resource dependencies are used. Therefore we
have decided that having iterationToken just in object template is
OK.<br>
<br>
However there are "tricks" how to use the iterationTokens almost
everywhere. It is mostly passing it as an extension property. Or
pre-computing some "stem" names in object template and placing
these in the extension and then use them in outbound expressions.
Similarly you can pass pass interim values from inbound to user
extension and the use object template to iterate and find unique
combination. There are many ways. We haven't found a use case that
we could not easily implement with this approach. Maybe if you
could describe your specific use case we can help you with your
configuration.<br>
<br>
<div>-- <br><br> Radovan
Semancik<br> Software
Architect<br> evolveum.com<br></div>
<br>
<br>
On 07/01/2014 02:46 PM, Deepak Natarajan wrote:<br>
</div>
<br>
<br>
<div>_______________________________________________<br>midPoint
mailing list<br><a class="moz-txt-link-abbreviated" href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a><br><a class="moz-txt-link-freetext" href="http://lists.evolveum.com/mailman/listinfo/midpoint">http://lists.evolveum.com/mailman/listinfo/midpoint</a><br></div></div>
<div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div
style="display:table;width:100%;border-top:1px solid
#EDEEF0;padding-top:5px"> <div
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
photoaddress="dnataraj@trilobytesystems.com" photoname="Deepak
Natarajan" src="cid:part2.02090804.08060506@trilobytesystems.com"
name="compose-unknown-contact.jpg" height="25px" width="25px"></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
<a moz-do-not-send="true"
href="mailto:dnataraj@trilobytesystems.com" style="color:#737F92
!important;padding-right:6px;font-weight:bold;text-decoration:none
!important;">Deepak Natarajan</a></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;">
<font color="#9FA2A5"><span style="padding-left:6px">July 1, 2014 at
2:46 PM</span></font></div></div></div>
<div style="color:#888888;margin-left:24px;margin-right:24px;"
__pbrmquotes="true" class="__pbConvBody">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<br>
Hi Ivan -<br>
<br>
Thanks - yes, this is the first time I am trying using the script var in
inbound mappings as well - apparently Midpoint doesn't like it - so I
will have to do it in a template (like in your previous examples). I was
already setting the user name in an inbound expression - just needed
the iteration token to resolve conflicts. <br>
<br>
I already have your example - I was just trying to move it into the
schema handling, rather than the object template, so I'll just do it
like you did.<br>
<br>
Thanks!<br>
<br>
BR/Deepak<br>
<br>
<br>
</div>
<div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div
style="display:table;width:100%;border-top:1px solid
#EDEEF0;padding-top:5px"> <div
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
photoaddress="ivan.noris@evolveum.com" photoname="Ivan Noris"
src="cid:part2.02090804.08060506@trilobytesystems.com"
name="compose-unknown-contact.jpg" height="25px" width="25px"></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
<a moz-do-not-send="true" href="mailto:ivan.noris@evolveum.com"
style="color:#737F92
!important;padding-right:6px;font-weight:bold;text-decoration:none
!important;">Ivan Noris</a></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;">
<font color="#9FA2A5"><span style="padding-left:6px">July 1, 2014 at
1:29 PM</span></font></div></div></div>
<div style="color:#888888;margin-left:24px;margin-right:24px;"
__pbrmquotes="true" class="__pbConvBody">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Hi Deepak,<br>
<br>
just a note from a practice: I've never used iterations on inbound.
But you can use them in object template to generate (for example)
unique user/name property.<br>
<br>
So in a few words, you would not set user/name from inbound
expressions, but you would compute it from object template.<br>
<br>
I believe I've dropped some example to the list before, if not, I
can drop one later today if you're interested.<br>
<br>
Regards<br>
<br>
Ivan<br>
<br>
<div class="moz-cite-prefix">On 07/01/2014 12:41 PM, Deepak
Natarajan wrote:<br>
</div>
<br>
<div>-- <br> Ing. Ivan Noris<br> Senior Identity Management
Engineer<br> evolveum.com<br>
___________________________________________<br> "Idem per idem
- semper idem Vix."<br></div>
<div>_______________________________________________<br>midPoint
mailing list<br><a class="moz-txt-link-abbreviated" href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a><br><a class="moz-txt-link-freetext" href="http://lists.evolveum.com/mailman/listinfo/midpoint">http://lists.evolveum.com/mailman/listinfo/midpoint</a><br></div></div>
<div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div
style="display:table;width:100%;border-top:1px solid
#EDEEF0;padding-top:5px"> <div
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
photoaddress="dnataraj@trilobytesystems.com" photoname="Deepak
Natarajan" src="cid:part2.02090804.08060506@trilobytesystems.com"
name="compose-unknown-contact.jpg" height="25px" width="25px"></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
<a moz-do-not-send="true"
href="mailto:dnataraj@trilobytesystems.com" style="color:#737F92
!important;padding-right:6px;font-weight:bold;text-decoration:none
!important;">Deepak Natarajan</a></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;">
<font color="#9FA2A5"><span style="padding-left:6px">July 1, 2014 at
12:41 PM</span></font></div></div></div>
<div style="color:#888888;margin-left:24px;margin-right:24px;"
__pbrmquotes="true" class="__pbConvBody">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<br>
Hmmm. Looking at the documentation again, it seems inbound mappings are
mentioned nowhere.<br>
<br>
Are these iteration tokens only valid for outbound mappings (i.e should I
move this usage on inbound mappings to a user creation template?)<br>
<br>
Why is this so....? <br>
<br>
<br>
</div>
<div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div
style="display:table;width:100%;border-top:1px solid
#EDEEF0;padding-top:5px"> <div
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
photoaddress="dnataraj@trilobytesystems.com" photoname="Deepak
Natarajan" src="cid:part2.02090804.08060506@trilobytesystems.com"
name="compose-unknown-contact.jpg" height="25px" width="25px"></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
<a moz-do-not-send="true"
href="mailto:dnataraj@trilobytesystems.com" style="color:#737F92
!important;padding-right:6px;font-weight:bold;text-decoration:none
!important;">Deepak Natarajan</a></div> <div
style="display:table-cell;white-space:nowrap;vertical-align:middle;">
<font color="#9FA2A5"><span style="padding-left:6px">July 1, 2014 at
12:37 PM</span></font></div></div></div>
<div style="color:#888888;margin-left:24px;margin-right:24px;"
__pbrmquotes="true" class="__pbConvBody"><div>Hi -<br><br>I'm trying to
formulate unique uid's for the user on an inbound mapping.<br>I am using
iterationToken (I am using a snippet from one of Ivan's<br>examples).<br><br>This
is my attribute mapping<br><br> <attribute><br>
<ref>icfs:name</ref><br>
<limitations><br>
<minOccurs>0</minOccurs><br>
<access><br>
<read>true</read><br>
<add>true</add><br>
<modify>true</modify><br>
</access><br> </limitations><br>
<inbound><br>
<c:expression><br> <c:script><br>
<c:code><br>
input + '-apos' + iterationToken<br>
</c:code><br>
</c:script><br> </c:expression><br>
<target><br>
<path>$user/name</path><br>
</target><br> </inbound><br>
</attribute><br><br>followed by the iteration definition :<br><br>
<iteration><br>
<maxIterations>999</maxIterations><br>
<tokenExpression><br> <script><br>
<code><br>
if (iteration == 0) {<br> return "";<br>
} else {<br>
return "" + (iteration + 1)<br> }<br>
</code><br>
</script><br> </tokenExpression><br>
</iteration><br><br>I am getting the following
exception, when I import users :<br><br>Caused by:<br>com.evolveum.midpoint.util.exception.ExpressionEvaluationException:<br>groovy.lang.MissingPropertyException:
No such property: iterationToken<br>for class: Script17 expression in
mapping in inbound expression for<br>{<a class="moz-txt-link-freetext" href="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3">http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3</a>}name<br>in
<a class="moz-txt-link-freetext" href="resource:036f0100-2fe8-49e1-a8fd-5548374f8703(APOS">resource:036f0100-2fe8-49e1-a8fd-5548374f8703(APOS</a> CSV Feeder<br>Resource
Definition)<br> at<br>com.evolveum.midpoint.model.common.expression.script.jsr223.Jsr223ScriptEvaluator.evaluate(Jsr223ScriptEvaluator.java:124)<br>~[model-common-3.0.jar:na]<br>
at<br>com.evolveum.midpoint.model.common.expression.script.ScriptExpression.evaluate(ScriptExpression.java:108)<br>~[model-common-3.0.jar:na]<br>
at<br>com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluator.transformSingleValue(ScriptExpressionEvaluator.java:58)<br>~[model-common-3.0.jar:na]<br>
at<br>com.evolveum.midpoint.model.common.expression.evaluator.AbstractValueTransformationExpressionEvaluator$1.process(AbstractValueTransformationExpressionEvaluator.java:420)<br>~[model-common-3.0.jar:na]<br>
... 50 common frames omitted<br>Caused by:
javax.script.ScriptException:<br>groovy.lang.MissingPropertyException:
No such property: iterationToken<br>for class: Script17<br> at<br>org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:323)<br>~[groovy-1.8.6.jar:1.8.6]<br>
at<br>org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:41)<br>~[groovy-1.8.6.jar:1.8.6]<br>
at javax.script.CompiledScript.eval(CompiledScript.java:92)<br>~[na:1.7.0_45]<br>
at<br>com.evolveum.midpoint.model.common.expression.script.jsr223.Jsr223ScriptEvaluator.evaluate(Jsr223ScriptEvaluator.java:122)<br>~[model-common-3.0.jar:na]<br>
... 53 common frames omitted<br>Caused by:
groovy.lang.MissingPropertyException: No such property:<br>iterationToken
for class: Script17<br> at<br>org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)<br>~[groovy-1.8.6.jar:1.8.6]<br>
at<br>org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49)<br>~[groovy-1.8.6.jar:1.8.6]<br>
at<br>org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231)<br>~[groovy-1.8.6.jar:1.8.6]<br>
at Script17.run(Script17.groovy:2) ~[na:na]<br> at<br>org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:320)<br>~[groovy-1.8.6.jar:1.8.6]<br>
... 56 common frames omitted<br><br>I seem to be following the
general guidelines here :<br><a class="moz-txt-link-freetext" href="https://wiki.evolveum.com/display/midPoint/Unique+Account+Username+HOWTO">https://wiki.evolveum.com/display/midPoint/Unique+Account+Username+HOWTO</a><br><br>Am
I missing something?<br><br>Thanks in advance -<br>BR/Deepak<br><br><br><br><br></div></div>
</blockquote>
<br>
<div class="moz-signature">-- <br>Deepak Natarajan<br>
Director<br>
<br>
Trilobyte Systems ApS<br>
<br>
Falkoner Alle 1, 3 Frederikinkatu 61A, 6th Floor<br>
2000 Frederiksberg Business Center Papula<br>
Denmark
00100 Helsinki<br>
Finland<br>
<br>
Tel : +45 29375068<br>
<a class="moz-txt-link-freetext" href="http://www.trilobytesystems.com">http://www.trilobytesystems.com</a><br>
<br>
<br>
</div>
</body></html>