[midPoint] get extended attribute in notification

Pavol Mederly mederly at evolveum.com
Tue May 12 10:55:56 CEST 2015


Hello MiSo, 

basic.getExtensionPropertyValue(requestee, NS_FOO, INTERNSHIP_NAME) should work in 3.0. I've just looked in the sources. 

You could even leave out NS_FOO from this call (by replacing with an empty string), and it should still work. 

Actually I'm quite surprised that the call results in null. Could you try to log the value of the requestee object? Use something like this: 

log.info("Requestee = {}", requestee.asPrismObject().debugDump()); 

Best regards, 
Pavol 


----- Original Message -----

From: "Steklac Michal" <Michal_Steklac at datalan.sk> 
To: "midPoint General Discussion" <midpoint at lists.evolveum.com> 
Sent: Sunday, May 10, 2015 7:23:06 PM 
Subject: Re: [midPoint] get extended attribute in notification 

Hi, 

I modified the code 
... 
INTERNSHIP_NAME = 'internship'; 
INTERNSHIP_QNAME = new QName(NS_FOO, INTERNSHIP_NAME); 
INTERNSHIP_PATH = new ItemPath(com.evolveum.midpoint.xml.ns._public.common.common_3.UserType.F_EXTENSION, INTERNSHIP_QNAME); 
log.info("delta.findPropertyDelta(INTERNSHIP_PATH) != null " + (delta.findPropertyDelta(INTERNSHIP_PATH)!=null)); 
if (delta.findPropertyDelta(INTERNSHIP_PATH)!=null) { 
log.info("internship="+basic.getExtensionPropertyValue(requestee, NS_FOO, INTERNSHIP_NAME)); 
} 
... 
it works better. Only when I call basic.getExtensionPropertyValue(requestee, NS_FOO, INTERNSHIP_NAME) get null. It is possible get value for extension property in midpoint 3.0?? 

Thanks, 
MiSo 

On Po, 2015-05-04 at 20:10 +0200, Pavol Mederly wrote: 

Hello, 

3.0 is quite old, and many things work differently there. 

In particular, ItemPath(String... names) constructor is not available; you have to provide the QNames. 

So, something like this: 

INTERNSHIP_QNAME = new QName(NS_FOO, INTERNSHIP_PATH) 
INTERNSHIP_PATH = new ItemPath( com.evolveum.midpoint.xml.ns._public.common.common_3.UserType.F_EXTENSION, INTERNSHIP_QNAME) 
... 

should be needed. 

But I'm not sure if the other methods would work. (They probably will.) 

If possible, upgrade to 3.1.1. :-) 

Best regards, 
Pavol 

On 4. 5. 2015 19:56, Steklac Michal wrote: 




<blockquote>

<blockquote>
Hi, 

when call this code i got exception 
... 
INTERNSHIP_NAME = 'internship'; 
log.info('INTERNSHIP_NAME='+INTERNSHIP_NAME); 
INTERNSHIP_PATH = new ItemPath('extension', INTERNSHIP_NAME); 
log.info('INTERNSHIP_PATH='+INTERNSHIP_PATH.toString()); 
log.info("delta.findPropertyDelta(INTERNSHIP_PATH) != null " + (delta.findPropertyDelta(INTERNSHIP_PATH)!=null)); 
if (delta.findPropertyDelta(INTERNSHIP_PATH)!=null) { 
log.info("internship="+basic.getExtensionPropertyValue(requestee, NS_FOO, INTERNSHIP_NAME)); 
} 
... 
2015-05-04 19:46:41,976 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-4] INFO (com.evolveum.midpoint.expression): INTERNSHIP_NAME=internship 
2015-05-04 19:46:41,980 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-4] ERROR (com.evolveum.midpoint.model.common.expression.script.ScriptExpression): Expression error: groovy.lang.GroovyRuntimeE 
xception: Could not find matching constructor for: com.evolveum.midpoint.prism.path.ItemPath(java.lang.String, java.lang.String) (new) event filter expression 
com.evolveum.midpoint.util.exception.ExpressionEvaluationException: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.evolveum.midpoint.prism.path.ItemPath(java.lang.String, ja 
va.lang.String) (new) event filter expression 
at com.evolveum.midpoint.model.common.expression.script.jsr223.Jsr223ScriptEvaluator.evaluate(Jsr223ScriptEvaluator.java:124) ~[model-common-3.0.jar:na] 
at com.evolveum.midpoint.model.common.expression.script.ScriptExpression.evaluate(ScriptExpression.java:108) ~[model-common-3.0.jar:na] 
at com.evolveum.midpoint.model.common.expression.script.ScriptExpressionEvaluator.transformSingleValue(ScriptExpressionEvaluator.java:58) [model-common-3.0.jar:na] 
at com.evolveum.midpoint.model.common.expression.evaluator.AbstractValueTransformationExpressionEvaluator.evaluateScriptExpression(AbstractValueTransformationExpressionEvaluator.java:276) [model-comm 
on-3.0.jar:na] 

I try it in midpoint 3.0. 

Thanks, 
MiSo 

On Po, 2015-05-04 at 12:38 +0200, Pavol Mederly wrote: 

<blockquote>
Miso, 

the problem is primarily in this line: 

QName USER_INTERNSHIP_QNAME = new QName(NS_FOO, "internship", "extension"); 

because what is required, is not simply a QName, but a two-name item path (extension/internship). You have to use new ItemPath(...) constructor to create the path. Arguments are either QNames or (when there is no ambiguity) simple strings. 

This code works - note that I've put the code into <subjectExpression> just as an example. Tested with 'piracy' sample - changes names to match your situation. 

<notificationConfiguration> 
<handler> 
<simpleUserNotifier> 
<subjectExpression> 
<script> 
<code> 
import javax.xml.namespace.QName 
import com.evolveum.midpoint.prism.path.ItemPath 
import com.evolveum.midpoint.prism.delta.ObjectDelta 
import com.evolveum.midpoint.notifications.api.events.ModelEvent 

NS_FOO = ' http://whatever.com/my ' 
INTERNSHIP_NAME = 'shipName' 
INTERNSHIP_PATH = new ItemPath('extension', INTERNSHIP_NAME) 

delta = ((ModelEvent) event).getSummarizedFocusDeltas() 

log.info("delta.findPropertyDelta(INTERNSHIP_PATH) != null " + (delta.findPropertyDelta(INTERNSHIP_PATH)!=null)) 
if (delta.findPropertyDelta(INTERNSHIP_PATH)!=null) { 
log.info("internship="+basic.getExtensionPropertyValue(requestee, NS_FOO, INTERNSHIP_NAME)) 
} 

'abcdef' 
</code> 
</script> 
</subjectExpression> 
<transport>mail</transport> 
</simpleUserNotifier> 
</handler> 
<mail> 
<debug>false</debug> 
<redirectToFile>d:\midpoint\home\mail-notifications.log</redirectToFile> 
</mail> 
</notificationConfiguration> 

Best regards, 
Pavol 

On 3. 5. 2015 15:52, Steklac Michal wrote: 


<blockquote>
Hi, 

I made an example in which obtains the value of the attribute family name and attribute internship. Attribute value family name received. When I trying to get the value for attribute internship, then I get null. 

---------------------------------------------------------------------- 
* code to get family name 
... 
def NS_FOO = ' http://midpoint.evolveum.com/xml/ns/test/foo-1.xsd'; 
delta = ObjectDelta.summarize(((ModelEvent) event).getUserDeltas()); 
if(delta != null){ 
log.info("delta = " + delta.toString()); 
QName USER_FAMILYNAME_QNAME = new QName(NS_FOO,"familyName"); 
if(delta.findPropertyDelta(USER_FAMILYNAME_QNAME)!=null){ 
log.info("familyname="+requestee.getFamilyName()); 
} 
} 
... 
* output 
... 
2015-05-03 15:24:43,391 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-5] INFO (com.evolveum.midpoint.expression): delta = ObjectDelta(UserType:cbd8aee0-802e-43ef-a1c7-30cb79c811f0,MODIFY: Property 
Delta( / fullName, REPLACE), PropertyDelta( / familyName, REPLACE), PropertyDelta(metadata / {.../common/common-3}modifyChannel, REPLACE), PropertyDelta(metadata / {.../common/common-3}modifyTimestamp, REPLA 
CE), ReferenceDelta(metadata / {.../common/common-3}modifierRef, REPLACE)) 
2015-05-03 15:24:43,397 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-5] INFO (com.evolveum.midpoint.expression): familyname=Malá 
... 
---------------------------------------------------------------------- 

---------------------------------------------------------------------- 
* code to get intership, which is extension attribute 
... 
def NS_FOO = ' http://midpoint.evolveum.com/xml/ns/test/foo-1.xsd'; 
delta = ObjectDelta.summarize(((ModelEvent) event).getUserDeltas()); 
if(delta != null){ 
log.info("delta = " + delta.toString()); 
QName USER_INTERNSHIP_QNAME = new QName(NS_FOO, "internship", "extension"); 
log.info("delta.findPropertyDelta(USER_INTERNSHIP_QNAME)!=null " + (delta.findPropertyDelta(USER_INTERNSHIP_QNAME)!=null).toString()); 
if(delta.findPropertyDelta(USER_INTERNSHIP_QNAME)!=null){ 
log.info("internship="+basic.getExtensionPropertyValue(requestee, ' http://evolveum.com/my', 'internship')); 
} 
} 
... 
* output 
... 
2015-05-03 15:32:57,490 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-4] INFO (com.evolveum.midpoint.expression): delta = ObjectDelta(UserType:cbd8aee0-802e-43ef-a1c7-30cb79c811f0,MODIFY: Property 
Delta(extension / internship, REPLACE), PropertyDelta(metadata / {.../common/common-3}modifyChannel, REPLACE), PropertyDelta(metadata / {.../common/common-3}modifyTimestamp, REPLACE), ReferenceDelta(metadata 
/ {.../common/common-3}modifierRef, REPLACE)) 
2015-05-03 15:32:57,491 [RESOURCEOBJECTCHANGELISTENER] [midPointScheduler_Worker-4] INFO (com.evolveum.midpoint.expression): delta.findPropertyDelta(USER_INTERNSHIP_QNAME)!=null false 
... 
---------------------------------------------------------------------- 

Please tell me what I'm doing wrong. 

Thanks, 
Miso 

On So, 2015-05-02 at 20:51 +0000, Steklac Michal wrote: 

<blockquote>
Hi, 

i have extend schema with attribute internship. It is possible get their value in notification. 

This works for me for attribute givenName 
... 
QName USER_GIVENNAME_QNAME = new QName(NS_FOO,"givenName"); 
if(delta.findPropertyDelta(USER_GIVENNAME_QNAME)!=null){ 
attr = attr+'\nmeno='+requestee.getGivenName(); 
} 
... 

Thanks 
MiSo 

</blockquote>



_______________________________________________
midPoint mailing list midPoint at lists.evolveum.com http://lists.evolveum.com/mailman/listinfo/midpoint 

</blockquote>


</blockquote>



_______________________________________________
midPoint mailing list midPoint at lists.evolveum.com http://lists.evolveum.com/mailman/listinfo/midpoint 

</blockquote>


</blockquote>


_______________________________________________ 
midPoint mailing list 
midPoint at lists.evolveum.com 
http://lists.evolveum.com/mailman/listinfo/midpoint 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20150512/13e24685/attachment.htm>


More information about the midPoint mailing list