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 <[email protected]> 
> 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 <[email protected]> 
> 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.
> 
> 

Reply via email to