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/
>
>

Reply via email to