[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