Ok, looks like a stupid mistake :) I'll give it a go. Can you give me pointers on how I could use a scheduled task to remove users in the "toberemoved" state?
Best regards Bob On Jun 28, 2012 4:34 PM, "Francesco Chicchiriccò" <[email protected]> wrote: > On 28/06/2012 16:18, Bob Lannoy wrote: > > Hi guys, > > > > in my activation workflow I want to delete users that present an expired > token. > > As I remember, I cannot delete a user in a workflow step. > > Following Francesco's suggestion, I have a "sink" in my workflow where > > I put those users. > > I wanted to rename them & change the email-address (both unique in my > > schema) so they are free for other (or maybe the same) users. > > > > So what I did in my workflow step: > > ------------ > > SyncopeUser user = (SyncopeUser) > > execution.getVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER); > > UserMod userMod=new UserMod(); > > > > userMod.setUsername("delete_"+user.getUsername()); > > AttributeMod attMod=new AttributeMod(); > > attMod.setSchema("email"); > > String > email=user.getAttribute("email").getUniqueValue().getValueAsString(); > > > > attMod.addValueToBeRemoved(email); > > attMod.addValueToBeAdded("deleted_"+email); > > > > userMod.addAttributeToBeUpdated(attMod); > > > > PropagationByResource propByRes = dataBinder.update(user, userMod); > > > > execution.setVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER, > user); > > execution.setVariable(ActivitiUserWorkflowAdapter.PROP_BY_RESOURCE, > > propByRes); > > ----------- > > The user ends up in the "toberemoved" state in the workflow, which I > > see in console. > > However when I press "delete" in the console I get strange errors > > Cannot delete or update a parent row: a foreign key constraint fails > > (`syncope`.`uattruniquevalue`, CONSTRAINT `uattruniquevalue_ibfk_1` > > FOREIGN KEY (`ATTRIBUTE_ID`) REFERENCES `UAttr` (`id`)) {prepstmnt > > 667215072 DELETE FROM UAttr WHERE id = ? [params=?]} [code=1451, > > state=23000] > > > > I noticed that the UAttrUniqueValue table holds the old emailaddress > > and new emailaddress, both attached to the same attribute which of > > course poses a uniqueness problem. When I delete the row with the old > > address, I can delete the user through console. > > > > Any ideas on what I did wrong? or is there another way to delete a > > user from inside the workflow? > > I think that the problem is due to the code performing user update: you > are doing > > attMod.addValueToBeRemoved(email); > attMod.addValueToBeAdded("deleted_"+email); > > but it should be, instead > > userMod.addAttributeToBeRemoved("email"); > attMod.addValueToBeAdded("deleted_"+email); > > Let me know if this works. > Regards. > > -- > Francesco Chicchiriccò > > ASF Member, Apache Cocoon PMC and Apache Syncope PPMC Member > http://people.apache.org/~ilgrosso/ > >
