I am not trying an update to an external resource, I am trying a provisioning, but not on the creation of a user, but at a later point.
I cannot find anything in the logs, in the connid log this user simply does not occur after activation. What logs would I have to look at? How does the console do it? The console is able to actually provision a user, and then the PropagationTO fields will be filled. In my activation, they are not. Jesse On Wed, May 15, 2013 at 9:24 AM, Francesco Chicchiriccò <ilgro...@apache.org > wrote: > On 14/05/2013 15:14, Jesse van Bekkum wrote: > > Hi Francesco > > I have used the code above to provision a resource. On a user that has > not been created yet (id = null) it works fine. However, on another user > who already existed, it does not provision. When I do another update action > on that user, even on a completely unrelated attribute, it triggers the > provisioning. > > I think I did not see this behavior on 1.0.7, but I see it on 1.1.1. Any > idea what the cause is? > > > It might be related on some optimizations made in the provisioning layer: > in 1.1.X an update is triggered towards an external resource only if one or > more of the mapped attributes is different from what is actually read from > the same resource. In this respect, this might not be a bug. > > I cannot tell you more, some additional investigation - with DEBUG logging > - is required. > > Regards. > > > I tried setting the usermod with the id of the existing user, but that > did not work. > > Jesse > > > > On Tue, Apr 30, 2013 at 10:22 AM, Francesco Chicchiriccò < > ilgro...@apache.org> wrote: > >> On 30/04/2013 10:21, Jesse van Bekkum wrote: >> >> No, I was just reading the requirements. I will get to it, but I will >> also need permission from Everett. The complete procedure will probably >> take a while I see. >> >> >> Ok, let's wait for that. >> >> >> Regards. >> >> On Tue, Apr 30, 2013 at 10:15 AM, Francesco Chicchiriccò < >> ilgro...@apache.org> wrote: >> >>> On 30/04/2013 10:09, Jesse van Bekkum wrote: >>> >>> Hi Francisco >>> >>> Sounds like a fine idea. My username is Jesse van Bekkum. You can give >>> me write access. >>> >>> >>> We have to wait for your ICLA to be received and notified: have you >>> already sent it? >>> >>> Regards. >>> >>> >>> On Tue, Apr 30, 2013 at 8:52 AM, Francesco Chicchiriccò < >>> ilgro...@apache.org> wrote: >>> >>>> On 29/04/2013 15:42, Jesse van Bekkum wrote: >>>> >>>> Hi Francesco >>>> >>>> Thanks for your help. There was one small issue with your example, >>>> since on user creation you do not have a usermod on the execution yet. But >>>> that was easily fixed. >>>> >>>> I have used the following code and rule in my workflow to get this >>>> working. Might I suggest that we use this in the standard deployment of >>>> Syncope? I think that provisioning via the workflow is functionality that >>>> should be included out of the box. The version I made is parameterized via >>>> the workflow (description of usage is included) so it is not specific to my >>>> project. >>>> >>>> >>>> Jesse, >>>> this sounds like a nice extension: why don't you report it in a wiki >>>> page under [2]? >>>> >>>> You need to: >>>> 1. complete and submit an ICLA [3] >>>> 2. create a wiki user (if not already done) and tell me the username >>>> so that I can grant you write access to the wiki >>>> >>>> WDYT? >>>> >>>> Regards. >>>> >>>> >>>> import org.activiti.engine.delegate.DelegateExecution; >>>> import org.activiti.engine.delegate.Expression; >>>> import org.apache.syncope.client.mod.UserMod; >>>> import org.apache.syncope.core.persistence.beans.user.SyncopeUser; >>>> import org.apache.syncope.core.propagation.PropagationByResource; >>>> import org.apache.syncope.core.workflow.ActivitiUserWorkflowAdapter; >>>> import org.apache.syncope.core.workflow.WorkflowException; >>>> import >>>> org.apache.syncope.core.workflow.activiti.AbstractActivitiDelegate; >>>> import org.slf4j.Logger; >>>> import org.slf4j.LoggerFactory; >>>> >>>> /** >>>> * This workflow service task allows to provision a resource to a user >>>> from the workflow. >>>> * >>>> * Use the following code in the workflow: >>>> * >>>> * <serviceTask id="addResource" name="Add Resource" >>>> >>>> activiti:class="org.apache.syncope.core.workflow.activiti.ProvisionResources"> >>>> <extensionElements> >>>> <activiti:field name="resource" >>>> stringValue="%%YOUR_RESOURCE%%"/> >>>> </extensionElements> >>>> </serviceTask> >>>> */ >>>> public class ProvisionResources extends AbstractActivitiDelegate { >>>> >>>> protected static final Logger LOG = >>>> LoggerFactory.getLogger(ProvisionResources.class); >>>> >>>> private Expression resource; >>>> >>>> public void setResource(Expression resource) { >>>> this.resource = resource; >>>> } >>>> >>>> @Override >>>> protected void doExecute(DelegateExecution execution) throws >>>> Exception { >>>> String resourceName = (String) resource.getValue(execution); >>>> >>>> if (resourceName == null || resourceName.isEmpty()) { >>>> throw new WorkflowException(new >>>> IllegalStateException("Please specify a resource")); >>>> } >>>> >>>> SyncopeUser user = (SyncopeUser) >>>> execution.getVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER); >>>> UserMod userMod = (UserMod) >>>> execution.getVariable(ActivitiUserWorkflowAdapter.USER_MOD); >>>> if (userMod == null) { >>>> userMod = new UserMod(); >>>> } >>>> >>>> userMod.addResourceToBeAdded(resourceName); >>>> >>>> // update SyncopeUser >>>> PropagationByResource propByRes = dataBinder.update(user, >>>> userMod); >>>> >>>> // report updated user and propagation by resource as result >>>> execution.setVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER, >>>> user); >>>> >>>> execution.setVariable(ActivitiUserWorkflowAdapter.PROP_BY_RESOURCE, >>>> propByRes); >>>> >>>> } >>>> } >>>> >>>> >>>> On Tue, Apr 23, 2013 at 10:38 AM, Francesco Chicchiriccò < >>>> ilgro...@apache.org> wrote: >>>> >>>>> On 22/04/2013 21:40, Jesse van Bekkum wrote: >>>>> >>>>> Hi >>>>> >>>>> Quick question. >>>>> >>>>> How can you provision a resource to a user from the workflow? I have >>>>> a workflow, and after creating a user with a rest call, I want, depending >>>>> on the path through the workflow, to automatically provision a resource. >>>>> >>>>> I tried this in a workflow step: >>>>> >>>>> ResourceDAO resourceDAO = CONTEXT.getBean(ResourceDAO.class); >>>>> ExternalResource idp = resourceDAO.find("IDP_RESOURCE"); >>>>> SyncopeUser user = (SyncopeUser) >>>>> >>>>> execution.getVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER); >>>>> user.addResource(idp); >>>>> >>>>> But after creation the user had no resources. In the past (0.7) we >>>>> have used manual propagation, by retrieving the propagation handler from >>>>> the context and firing it, but that seems a bit inelegant to me. >>>>> >>>>> What is the preferred solution to this (I think common) scenario? >>>>> >>>>> >>>>> Hi Jesse, >>>>> please take a look at the Update task [1]: you could change the >>>>> doExecute() method there to match the logic expressed above >>>>> >>>>> >>>>> SyncopeUser user = (SyncopeUser) >>>>> execution.getVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER); >>>>> UserMod userMod = (UserMod) >>>>> execution.getVariable(ActivitiUserWorkflowAdapter.USER_MOD); >>>>> >>>>> // YOUR step, e.g. add resource >>>>> userMod.addResourceToBeAdded("IDP_RESOURCE"); >>>>> >>>>> // update SyncopeUser >>>>> PropagationByResource propByRes = dataBinder.update(user, >>>>> userMod); >>>>> >>>>> // report updated user and propagation by resource as result >>>>> >>>>> execution.setVariable(ActivitiUserWorkflowAdapter.SYNCOPE_USER, user); >>>>> >>>>> execution.setVariable(ActivitiUserWorkflowAdapter.PROP_BY_RESOURCE, >>>>> propByRes); >>>>> >>>>> Please note the final statements execution.setVariable() - without >>>>> these the changes are not propagated back to the flow. >>>>> >>>>> Regards. >>>>> >>>>> [1] >>>>> https://svn.apache.org/repos/asf/syncope/branches/1_1_X/core/src/main/java/org/apache/syncope/core/workflow/user/activiti/task/Update.java >>>>> >>>> [2] >>>> https://cwiki.apache.org/confluence/display/SYNCOPE/Extending+Syncope >>>> [3] http://www.apache.org/dev/new-committers-guide.html#cla >>>> >>> -- > Francesco Chicchiriccò > > ASF Member, Apache Syncope PMC chair, Apache Cocoon PMC > Memberhttp://people.apache.org/~ilgrosso/ > >