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