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