<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Hello Andrew,</p>
<p>
<blockquote type="cite">
My understanding is that an org-to-org relationship shouldn’t be
an assignment, but a population of the parentOrgRef (see
<a moz-do-not-send="true"
href="https://wiki.evolveum.com/display/midPoint/Organizational+Structure">https://wiki.evolveum.com/display/midPoint/Organizational+Structure</a>)
and then midpoint handles the rest.</blockquote>
Actually, that wiki article is a bit out-of-date in this respect.
Currently, the preferred way of linking any focal objects (users,
roles, orgs, services) to organization structure is via
assignments.</p>
<p>One possibility is to map parent_id column to an extension
attribute of the org object, and then use an object template to
create appropriate assignment for a given Org object. Something
like this: <a
href="https://github.com/Evolveum/midpoint/blob/master/samples/objects/object-template-org.xml">https://github.com/Evolveum/midpoint/blob/master/samples/objects/object-template-org.xml.</a></p>
<p>(But maybe someone would propose a better solution.)<br>
</p>
<p>Best regards,</p>
<pre class="moz-signature" cols="72">--
Pavol Mederly
Software developer
evolveum.com
</pre>
<br>
<div class="moz-cite-prefix">On 28.07.2016 8:38, Andrew Brock wrote:<br>
</div>
<blockquote
cite="mid:11eb3d2ce24942c3a77b9018e97e40a5@shmprdmbx02.sahmri.internal"
type="cite">
<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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-fareast-language:EN-US;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:1905874838;
mso-list-type:hybrid;
mso-list-template-ids:-681262894 -1474414958 201916441 201916443 201916431 201916441 201916443 201916431 201916441 201916443;}
@list l0:level1
{mso-level-text:"%1\.\)";
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></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]-->
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have a database resource that gives me
the following organisation info in its columns:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoListParagraph"
style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><!--[if !supportLists]--><span
style="mso-list:Ignore">1.)<span style="font:7.0pt
"Times New Roman"">
</span></span><!--[endif]-->An ID (an integer)<o:p></o:p></p>
<p class="MsoListParagraph"
style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><!--[if !supportLists]--><span
style="mso-list:Ignore">2.)<span style="font:7.0pt
"Times New Roman"">
</span></span><!--[endif]-->A Name (a string)<o:p></o:p></p>
<p class="MsoListParagraph"
style="text-indent:-18.0pt;mso-list:l0 level1 lfo1"><!--[if !supportLists]--><span
style="mso-list:Ignore">3.)<span style="font:7.0pt
"Times New Roman"">
</span></span><!--[endif]-->The ID of the parent
organisation in a column called parent_id (an integer). This
value is present for all organisations except for the top
parent one.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This resource can be considered the
definitive authority for this data (i.e. it’s not present in
LDAP).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I currently have a schemaHandling like so:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><schemaHandling><o:p></o:p></p>
<p class="MsoNormal"> <objectType><o:p></o:p></p>
<p class="MsoNormal"> <kind>account</kind><o:p></o:p></p>
<p class="MsoNormal"> <intent>HRM</intent><o:p></o:p></p>
<p class="MsoNormal">
<default>true</default><o:p></o:p></p>
<p class="MsoNormal">
<objectClass>ri:AccountObjectClass</objectClass><o:p></o:p></p>
<p class="MsoNormal"> <attribute><o:p></o:p></p>
<p class="MsoNormal">
<c:ref>icfs:uid</c:ref><o:p></o:p></p>
<p class="MsoNormal">
<tolerant>true</tolerant><o:p></o:p></p>
<p class="MsoNormal">
<exclusiveStrong>false</exclusiveStrong><o:p></o:p></p>
<p class="MsoNormal"> <inbound><o:p></o:p></p>
<p class="MsoNormal">
<authoritative>true</authoritative><o:p></o:p></p>
<p class="MsoNormal">
<exclusive>false</exclusive><o:p></o:p></p>
<p class="MsoNormal">
<strength>normal</strength><o:p></o:p></p>
<p class="MsoNormal"> <target><o:p></o:p></p>
<p class="MsoNormal">
<c:path>identifier</c:path><o:p></o:p></p>
<p class="MsoNormal"> </target><o:p></o:p></p>
<p class="MsoNormal"> </inbound><o:p></o:p></p>
<p class="MsoNormal"> </attribute><o:p></o:p></p>
<p class="MsoNormal"> <attribute><o:p></o:p></p>
<p class="MsoNormal">
<c:ref>ri:name</c:ref><o:p></o:p></p>
<p class="MsoNormal">
<tolerant>true</tolerant><o:p></o:p></p>
<p class="MsoNormal">
<exclusiveStrong>false</exclusiveStrong><o:p></o:p></p>
<p class="MsoNormal"> <inbound><o:p></o:p></p>
<p class="MsoNormal">
<authoritative>true</authoritative><o:p></o:p></p>
<p class="MsoNormal">
<exclusive>false</exclusive><o:p></o:p></p>
<p class="MsoNormal">
<strength>normal</strength><o:p></o:p></p>
<p class="MsoNormal"> <target><o:p></o:p></p>
<p class="MsoNormal">
<c:path>name</c:path><o:p></o:p></p>
<p class="MsoNormal"> </target><o:p></o:p></p>
<p class="MsoNormal"> </inbound><o:p></o:p></p>
<p class="MsoNormal"> </attribute><o:p></o:p></p>
<p class="MsoNormal"> </objectType><o:p></o:p></p>
<p class="MsoNormal"> </schemaHandling><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">The current behaviour when I sync from this
resource is all the Organisations are being created with the
correct name and unique ID that is copied to the OrgType
“Identifier” field, but they are all at the same (top) level
in the Org. structure.<o:p></o:p></p>
<p class="MsoNormal">I now want to put them into their proper
hierarchy!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My understanding is that an org-to-org
relationship shouldn’t be an assignment, but a population of
the parentOrgRef (see
<a moz-do-not-send="true"
href="https://wiki.evolveum.com/display/midPoint/Organizational+Structure">https://wiki.evolveum.com/display/midPoint/Organizational+Structure</a>)
and then midpoint handles the rest. What do I need to do to my
current configuration to populate the parentOrgRef property
using the value of the parent_id column from my database? I
can’t assign the parent_id value directly to parentOrgRef as
it’s an integer, so I need to get a reference to the parent
organisation.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve seen some references to a
referenceSearch expression on Github, which I think may be
what I need, but I haven’t seen an example of this in action.
This is what I’ve got so far (which goes just above the
</objectType> tag in my first example), but it doesn’t
appear to do anything when I sync:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> <attribute><o:p></o:p></p>
<p class="MsoNormal">
<c:ref>ri:parent_id</c:ref><o:p></o:p></p>
<p class="MsoNormal"> <matchingRule
xmlns:gen426=<a class="moz-txt-link-rfc2396E" href="http://prism.evolveum.com/xml/ns/public/matching-rule-3">"http://prism.evolveum.com/xml/ns/public/matching-rule-3"</a>>gen426:default</matchingRule><o:p></o:p></p>
<p class="MsoNormal">
<tolerant>true</tolerant><o:p></o:p></p>
<p class="MsoNormal">
<exclusiveStrong>false</exclusiveStrong><o:p></o:p></p>
<p class="MsoNormal">
<fetchStrategy>implicit</fetchStrategy><o:p></o:p></p>
<p class="MsoNormal"> <inbound><o:p></o:p></p>
<p class="MsoNormal">
<authoritative>true</authoritative><o:p></o:p></p>
<p class="MsoNormal">
<exclusive>false</exclusive><o:p></o:p></p>
<p class="MsoNormal">
<strength>normal</strength><o:p></o:p></p>
<p class="MsoNormal"> <expression><o:p></o:p></p>
<p class="MsoNormal"> <referenceSearch><o:p></o:p></p>
<p class="MsoNormal">
<targetType>c:OrgType</targetType><o:p></o:p></p>
<p class="MsoNormal"> <filter><o:p></o:p></p>
<p class="MsoNormal"> <q:equal><o:p></o:p></p>
<p class="MsoNormal"> <!-- Property
from OrgType --> <o:p>
</o:p></p>
<p class="MsoNormal"> <q:path>identifier</q:path><o:p></o:p></p>
<p class="MsoNormal">
<expression><o:p></o:p></p>
<p class="MsoNormal"> <!--
database column --><o:p></o:p></p>
<p class="MsoNormal">
<c:path>$c:account/c:attributes/parent_id</c:path><o:p></o:p></p>
<p class="MsoNormal">
</expression><o:p></o:p></p>
<p class="MsoNormal"> </q:equal><o:p></o:p></p>
<p class="MsoNormal"> </filter><o:p></o:p></p>
<p class="MsoNormal"> </referenceSearch><o:p></o:p></p>
<p class="MsoNormal"> </expression><o:p></o:p></p>
<p class="MsoNormal"> <target><o:p></o:p></p>
<p class="MsoNormal"> <!-- Field on the
organisation that is being created --><o:p></o:p></p>
<p class="MsoNormal">
<c:path>parentOrgRef</c:path><o:p></o:p></p>
<p class="MsoNormal"> </target><o:p></o:p></p>
<p class="MsoNormal"> </inbound><o:p></o:p></p>
<p class="MsoNormal"> </attribute><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The database table is sorted in such a way
that the organisations at level 1 are first, then level 2,
then level 3, etc. so I don’t think it’s trying to create or
update organisations before their parent organisation has
already been created.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any clues?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Andrew<o:p></o:p></p>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
midPoint mailing list
<a class="moz-txt-link-abbreviated" href="mailto:midPoint@lists.evolveum.com">midPoint@lists.evolveum.com</a>
<a class="moz-txt-link-freetext" href="http://lists.evolveum.com/mailman/listinfo/midpoint">http://lists.evolveum.com/mailman/listinfo/midpoint</a>
</pre>
</blockquote>
<br>
</body>
</html>