incubator-syncope-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fabio Martelli <fabio.marte...@gmail.com>
Subject Re: Task Listeners in Syncope workflow for <serviceTask>
Date Wed, 28 Mar 2012 09:18:51 GMT

Il giorno 28/mar/2012, alle ore 11.01, Antony Pulicken ha scritto:

> 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.

You must work on UserMod bean.
Try to retrieve userMod variable by using the following statement

UserMod userMod = (UserMod) execution.getVariable(ActivitiUserWorkflowAdapter.USER_MOD);

Remove and add attribute on the retrieved userMod.

Regards,
F.

> 
> 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