Il 26/06/2013 21:27, Maarten Winkels ha scritto:
Hi Fabio,

The problem here is that the ID generated by the resource cannot be guessed based on the values known. The resource returns the value, after creation and this value is returned through the ConnId Connector interface (public Uid create(ObjectClass objectClass, Set<Attribute> attributes, OperationOptions operationOptions)). However, Syncope seems to ignore the return value of this method. I really don't understand why this is. Why can Syncope not retain this return value and use it later for updates. That seems to be how the ConnId Connector interface was intended (create returns a Uid and update requires one as per interface definition). Can you shed some light on this issue?
Hi Maarten, now it is clearer.
Actually your connector is the first one implementing this behavior ... but, from my ppov, your requirement is not so strange.

Fortunately, Apache Syncope can be instrumented to take care of the create method's returned value.
You have to develop your simple propagation action:
1. [before action] in case of update replace __UID__ value with the value of the attribute XXX (see below) 2 [after action] in case of create take care to set XXX user attribute with the value returned by the create operation.

Maybe, as a work around, I can store the value in some attribute that is returned by the connector. However, I have no idea how to configure this correctly in Syncope and it seems like a strange work around: the return value should simply be picked up. Is this the correct approach, you think?

This is not a strange workaround: [sync/propagation] actions give you a great flexibility about target resources exchanged data management.

Rgds,
F.


Thanks,
-Maarten Winkels

On Jun 26, 2013, at 6:13 PM, Fabio Martelli <[email protected] <mailto:[email protected]>> wrote:

Il 26/06/2013 18:05, Maarten Winkels ha scritto:
On Jun 26, 2013, at 5:28 PM, Fabio Martelli <[email protected] <mailto:[email protected]>> wrote:

Il 26/06/2013 15:01, Maarten Winkels ha scritto:
Hi Fabio,

Thanks, it is much clearer now.
A few questions (see inline below).

On Jun 26, 2013, at 2:20 PM, Fabio Martelli <[email protected] <mailto:[email protected]>> wrote:

Il 26/06/2013 12:01, Maarten Winkels ha scritto:
Hi Fabio,

Thanks for your reply!
The screenshots shows the user mapping.
<Mail Attachment.png>
As you can see, no account link is configured. I do see the account link when I create a new user:
<Mail Attachment.png>
This is normal. If AccountLink is not specified, AccountId value will be used in place of it. The AccountId reported above should be the value of __UID__ attribute.

I mean, it seems that your connector is returning
__NAME__: data\identities\fabio
__UID__: fabio

This is correct


I think that your update method is expecting "data\identities\fabio" as __UID_ parameter but you are providing "fabio".

..or as __NAME__ parameter, or any other parameter.
Does syncope store the __NAME__ returned by the connector somehow?
It depends on the AccountId mapping: internal attribute will be the one mapped as AccountId.

So is there a way to configure the Account Link to achieve what I want?
That would be: use the value provided by the connector (picked up by Syncope as __NAME__) as __UID__ value?
Try to use a derived attribute mapped as AccountId.
Rgds,
F.



If I try to change this user, however, I do not get the Account Link value in any of the attributes.
This is normal. See above.

Is there a way to configure Syncope to do this?
I think you have to change your connector: as per LDAP connector, your update method should expect the actual uid (not the full dn). If this is not possible, you have to define a derived attribute (like 'data\identities\' + username) to set as AccountId.

I can see two possible ways to fix this right now:
1) Use a derived attribute (or the account link?) to construct the id to update. 2) Do a search in the connector.update to find the correct ID and then update it.

However, I'm still not sure why the __NAME__ value that the connector provides is not being used to update the value. What is the rational for this?
see the signature of ConnId connectors.
__UID__ will be used to search for entry to be modified.

Anyway, nothing prevents to you to change this behavior on connector side: use a derived attribute to send a __UID__ valued with a dn.

Regards,
F.

Thanks,
-Maarten Winkels


HTH,
F.

Thanks!!

-Maarten Winkels

On Jun 26, 2013, at 11:11 AM, Fabio Martelli <[email protected] <mailto:[email protected]>> wrote:

Il 26/06/2013 10:56, Maarten Winkels ha scritto:
Dear all,

I'm trying to created a connector for an SPML interface. I need to implement the following scenario:

- A User object is provisioned through the connector. The resource returns a SPML PsoID as identifier for the newly created object. - A change to the user is provisioned through the connector. The resource uses the PsoID to identify the User object.

Provisioning a new user using the SPML addRequest works fine and in the syncope-console I can see the correct PsoID mentioned as "AccountLink". *This surprises me, because I have no account Link configured in the mapping.*
*
*
When a change is made, however, I do not get the correct accountLink in the connector and thus cannot create a correct modifyRequest.

How do I configure syncope to store the accountLink and provide it to the connector on changes?

Hi Marteen,
please, post your mapping configuration (maybe a screenshot).
Provided information are insufficient to make a diagnosis.

Best regards,
F.

Thanks in advance!
Best regards,

-Maarten Winkels











Reply via email to