incubator-syncope-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Antony Pulicken <antony.pulic...@gmail.com>
Subject Re: Task Listeners in Syncope workflow for <serviceTask>
Date Wed, 28 Mar 2012 09:01:15 GMT
Thanks Fabio. 'CreateBefore' is working now after making the change you
suggested.

"I should know where you call setStringAttributeValues
method; at first sight it seems correct."

I'm calling setStringAttributeValues() from the 'doExecute(final
DelegateExecution execution)' method in the 'UpdateBefore' service task
that I created/configured in the workflow and the update is still not
working. Please let me know in case you need more details.

Regards,
Antony.


On Wed, Mar 28, 2012 at 12:58 PM, Fabio Martelli
<fabio.martelli@gmail.com>wrote:

>
> Il giorno 28/mar/2012, alle ore 07.50, Antony Pulicken ha scritto:
>
> Hi Fabio,
>
> I have configured the ServiceTask(s) as we discussed and those are getting
> triggered appropriately. But what ever changes I'm making while
> create/update are not getting propagated to Syncope. Let me explain what I
> have done:
>
>    - Configured service task before the Create/Update tasks
>    - The tasks that I created are extending AbstractActivitiDelegate
>    (Thought it will help in case I need to make use of UserDataBinder, ConfDAO
>    etc)
>    - Let me give an example of the processing that I need to do in In the
>    doExecute method in my service task. I'm trying to extract the domain name
>    from the email and assign it to another filed that I created in the schema
>    by name 'domain'
>    - In case of createBefore, I'm retrieving the email value from UserTO
>
>           protected void doExecute(final DelegateExecution execution)
> throws Exception {
>             UserTO userTO = (UserTO)
> execution.getVariable(ActivitiUserWorkflowAdapter.USER_TO);
>             attrValue =
> userTO.getAttributeMap().get("email").getValues().get(0);
>             //extract domain .......
>              .......
>                AttributeTO attributeTO = new AttributeTO();
>             attributeTO.setValues(new
> ArrayList<String>(Arrays.asList(domain)));
>             userTO.getAttributeMap().put("domain", attributeTO);
>             execution.setVariable(
>                     ActivitiUserWorkflowAdapter.USER_TO, userTO);
>          }
>
>
> Hi Antony,
> you cannot add attributeTO to the map retrieved by getAttributeMap method.
> It's not your fault but getAttributeMap is a little bit misleading.
> Probably it should return an unmodifiable map.
> Please, add attributeTO by addAttribute method.
>
>
>    - Then the org.syncope.core.workflow.activiti.Create gets invoked and
>    I can' find the above changes in there
>    - In case of update, I tried the approach that we were using with the
>    old version and that also doesn't seem to work. Please see the code snippet
>    below:
>
>     public void setStringAttributeValues(final SyncopeUser user, final
> String attributeName,
>                                          final String[] attributeValues) {
>         logger.info("Setting attribute {} for user {} with value {}.",
> new Object[]{attributeName, user,
>                 attributeValues});
>         UAttr uAttr = user.getAttribute(attributeName);
>         if (uAttr == null) {
>             USchema attributeSchema = this.schemaDAO.find(attributeName,
> USchema.class);
>
>             uAttr = new UAttr();
>             uAttr.setSchema(attributeSchema);
>             uAttr.setOwner(user);
>             user.addAttribute(uAttr);
>
>         }
>         if (attributeValues == null) {
>             uAttr.setValues(new ArrayList<AbstractAttrValue>());
>         } else {
>             List<UAttrValue> valueList = new ArrayList<UAttrValue>();
>             for (String s : attributeValues) {
>                 UAttrValue uAttrValue = new UAttrValue();
>                 uAttrValue.setStringValue(s);
>                 valueList.add(uAttrValue);
>
>             }
>             uAttr.setValues(valueList);
>         }
>
>     }
>
>
> I should know where you call setStringAttributeValues method; at first
> sight it seems correct.
>
> Regards,
> F.
>
>
> Please let me know the correct approach for Create (CreateBefore) and
> Update (UpdateBefore).
>
> Regards,
> Antony.
> On Fri, Mar 23, 2012 at 2:28 PM, Antony Pulicken <
> antony.pulicken@gmail.com> wrote:
>
>> Thanks Fabio. Even I was thinking in the same direction. I will try that.
>>
>> Regards,
>> Antony.
>>
>>
>> On Fri, Mar 23, 2012 at 1:36 PM, Fabio Martelli <fabio.martelli@gmail.com
>> > wrote:
>>
>>>
>>> Il giorno 23/mar/2012, alle ore 08.04, Antony Pulicken ha scritto:
>>>
>>> > Hi,
>>> >
>>> > In the earlier version of Syncope, we could add pre and post functions
>>> for each 'action' in the Syncope OS Workflow XML for doing some additional
>>> processing/transformation of the data before/after the actions are executed.
>>> >
>>> > Does any one know how that can be done in Activiti ? I'm able to add
>>> listeners for the 'userTask' that listens to the events like
>>> create,complete, etc. But this doesn't seem to be working for
>>> 'serviceTask'. I will be posting this question in Activiti forums as well.
>>>  But please let me know in case any one has any suggestion.
>>>
>>> Hi Antony,
>>> I can suggest you to use one or more ServiceTask.
>>>
>>> For example:
>>>
>>> <sequenceFlow id="flow1" sourceRef="theStart" targetRef="beforeCreate"/>
>>> <serviceTask id="beforeCreate" name="BeforeCreate"
>>> activiti:class="org.syncope.core.workflow.activiti.MyBeforeActions"/>
>>> <sequenceFlow id="flow2" sourceRef="beforeCreate" targetRef="create"/>
>>> <serviceTask id="create" name="Create"
>>> activiti:class="org.syncope.core.workflow.activiti.Create"/>
>>> ......
>>> <sequenceFlow id="flow7" sourceRef="... source ref..."
>>> targetRef="afterCreate"/>
>>> <serviceTask id="afterCreate" name="AfterCreate"
>>> activiti:class="org.syncope.core.workflow.activiti.MyAfterActions"/>
>>> <sequenceFlow id="flow8" sourceRef="afterCreate" targetRef="theEnd"/>
>>> <endEvent id="theEnd"/>
>>>
>>> Regards,
>>> F.
>>
>>
>>
>
>

Mime
View raw message