0
Answered

How to configure Adapter's DN with the attribute name containing the underscore, "_" character

Shane Lim 14 years ago updated by anonymous 9 years ago 7

All the fields name for all the SQL tables at client site (ACG CEO) contains the underscore, "_" character.

When configuring DN (<dnComponent>) for Empower Adapter to specify the attribute (field) hr_empl_code the Identity Broker service could not start.

The following error is generated:

og Name:      Application
Source:        The following error in Adapters occurred during start of the server: hr_empl_code is not a valid LDAP attribute name
Parameter name: attributeName
Date:          2/17/2011 3:01:36 PM
Event ID:      0
Task Category: None
Level:         Error
Keywords:      Classic
User:          N/A
Computer:      w2k8r2x64-fim.fim.uns.com
Description:
Error occurred in module: Adapters

The following error occurred: 
System.ArgumentException: hr_empl_code is not a valid LDAP attribute name
Parameter name: attributeName
   at Unify.Framework.AdapterEntityValueCollectionKey..ctor(String valueName)
   at Unify.Framework.AdapterEntityValueCollectionKey.op_Implicit(String field)
   at Unify.Framework.AdapterEntityDistinguishedNameGeneratorXmlGenerator.ConvertKey(String value)
   at Unify.Framework.EntityFieldValueDistinguishedNameComponentGeneratorFactory`2.CreateComponentGenerator(XElement factoryInformation, DNAttributeType attributeType)
   at Unify.Framework.EntityDistinguishedNameComponentGeneratorXmlFactoryBase`2.CreateComponent(XElement factoryInformation)
   at Unify.Framework.PlugInGeneratorBase`4.CreateComponent(TFactoryInfo factoryInformation)
   at Unify.Framework.EntityDistinguishedNameGeneratorXmlGeneratorBase`2.<>c__DisplayClass1.<CreateComponent>b__0(XElement dnComponentElement)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
   at Unify.Framework.EntityDistinguishedNameGeneratorXmlGeneratorBase`2.CreateComponent(XElement factoryInformation)
   at Unify.Framework.GenericEntityDistinguishedNameGeneratorXmlGenerator.CreateComponent[TKey,TEntity]()
   at Unify.Framework.AdapterConfigurationFactory.CreateComponent(XElement factoryInformation)
   at Unify.Framework.AdapterConfigurationGenerator.<>c__DisplayClass4.<CreateComponent>b__1(XElement configurationElement)
   at System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource x)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Unify.Framework.AdapterConfigurationGenerator.CreateComponent(XElement factoryInformation)
   at Unify.Framework.AdapterEngine.Start()
   at Unify.Framework.UnifyEngine.Start()
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="The following error in Adapters occurred during start of the server: hr_empl_code is not a valid LDAP attribute name&#xD;&#xA;Parameter name: attributeName" />
    <EventID Qualifiers="0">0</EventID>
    <Level>2</Level>
    <Task>0</Task>
    <Keywords>0x80000000000000</Keywords>
    <TimeCreated SystemTime="2011-02-17T04:01:36.000000000Z" />
    <EventRecordID>15370</EventRecordID>
    <Channel>Application</Channel>
    <Computer>w2k8r2x64-fim.fim.uns.com</Computer>
    <Security />
  </System>
  <EventData>
    <Data>Error occurred in module: Adapters

The following error occurred: 
System.ArgumentException: hr_empl_code is not a valid LDAP attribute name
Parameter name: attributeName
   at Unify.Framework.AdapterEntityValueCollectionKey..ctor(String valueName)
   at Unify.Framework.AdapterEntityValueCollectionKey.op_Implicit(String field)
   at Unify.Framework.AdapterEntityDistinguishedNameGeneratorXmlGenerator.ConvertKey(String value)
   at Unify.Framework.EntityFieldValueDistinguishedNameComponentGeneratorFactory`2.CreateComponentGenerator(XElement factoryInformation, DNAttributeType attributeType)
   at Unify.Framework.EntityDistinguishedNameComponentGeneratorXmlFactoryBase`2.CreateComponent(XElement factoryInformation)
   at Unify.Framework.PlugInGeneratorBase`4.CreateComponent(TFactoryInfo factoryInformation)
   at Unify.Framework.EntityDistinguishedNameGeneratorXmlGeneratorBase`2.&lt;&gt;c__DisplayClass1.&lt;CreateComponent&gt;b__0(XElement dnComponentElement)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
   at Unify.Framework.EntityDistinguishedNameGeneratorXmlGeneratorBase`2.CreateComponent(XElement factoryInformation)
   at Unify.Framework.GenericEntityDistinguishedNameGeneratorXmlGenerator.CreateComponent[TKey,TEntity]()
   at Unify.Framework.AdapterConfigurationFactory.CreateComponent(XElement factoryInformation)
   at Unify.Framework.AdapterConfigurationGenerator.&lt;&gt;c__DisplayClass4.&lt;CreateComponent&gt;b__1(XElement configurationElement)
   at System.Linq.Enumerable.&lt;&gt;c__DisplayClass12`3.&lt;CombineSelectors&gt;b__11(TSource x)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Unify.Framework.AdapterConfigurationGenerator.CreateComponent(XElement factoryInformation)
   at Unify.Framework.AdapterEngine.Start()
   at Unify.Framework.UnifyEngine.Start()</Data>
  </EventData>
</Event>

The sample Empower Adapter configuration is

<AdapterEngine>
	<!-- Adapter configuration for Empower Person -->
	<AdapterEngineConfigurations>
		<!-- Adapter configuration for Empower Person consist of Person and Position Connectors -->
		<AdapterConfiguration BaseConnectorId="{862A68B4-377C-41b5-AFB9-2A705076285F}"
							AdapterId="{706D4F9A-D291-43CB-9A24-3467DE6B588A}"
							AdapterName="Empower Person Adapter" 
							class="person" >
			<dn>
				<dnComponent name="Field" key="hr_empl_code" attributeType="UID" />
			</dn>
			<adapterEntityTransformationFactory name="ChainList">
				<!-- Renaming (mapping) the Person connector attributes for the Person connector -->
				<adapter name="Move" >
					<columnMappings>
						<columnMapping TargetAttribute="EmployeeCode" SourceAttribute="hr_empl_code" />
						<columnMapping TargetAttribute="MonthNumb" SourceAttribute="hr_mnth_numb" />
						<columnMapping TargetAttribute="StatusCode" SourceAttribute="hr_stus_code" />
						<columnMapping TargetAttribute="StatusDate" SourceAttribute="hr_stus_date" />
						<columnMapping TargetAttribute="StatusDati" SourceAttribute="hr_stus_dati" />
						<columnMapping TargetAttribute="Surname" SourceAttribute="hr_empl_surn" />
						<columnMapping TargetAttribute="GivenName" SourceAttribute="hr_empl_givn" />
						<columnMapping TargetAttribute="EmployeeName" SourceAttribute="hr_empl_name" />
						<columnMapping TargetAttribute="EmployeeTitle" SourceAttribute="hr_empl_title" />
						<columnMapping TargetAttribute="EmailAddress" SourceAttribute="hr_email_adr" />
						<columnMapping TargetAttribute="Mobile" SourceAttribute="hr_mobile_ph" />
						<columnMapping TargetAttribute="PreferredName" SourceAttribute="hr_pref_name" />
						<columnMapping TargetAttribute="NoneFlag" SourceAttribute="hr_none_flag" />
					</columnMappings>
				</adapter>
			</adapterEntityTransformationFactory>
			<image>omitted-for-brevity</image>
		</AdapterConfiguration>
	</AdapterEngineConfigurations>
</AdapterEngine>

Could you please advise me how I could specify the DN?

The Empower Connector and Adapter configuration file attached.


AdapterEngine.extensibility.config.xml
ConnectorEngine.extensibility.config.xml

Hi Addam,

I have been using the IDB305:Move attributes transformation but I do not see any referrence on how I can specify the Adapter's DN.

In addition, using IDB305:Move attributes transformation, I encounterred another issue, see ACGCEO-10

I like to note that the information is not up to date for Identity Broker v3.0.5 or later. The columnMapping attribute listed at IDB305:Move attributes transformation is out of date.

•The LeftAttribute should be SourceAttribute
•The RightAttributeshould be TargetAttribute

You should be able to use the EmployeeCode as the anchor rather then hr_empl_code.

Hi Peter,

That allows the Identity Broker service to start successfully. Thanks.

As a side note: Interestingly, when configuring the DN (<dnComponent>) within the Relation.Group, the Identity Broker doesn't complain and I can start Identity Broker service succesfully.

An example of the Relation.Group is

				<adapter name="Relation.Group" 
					 InputKey="hr_empl_code"
					 RelationshipConnectorId="{1A342DF5-70D2-441D-B79A-A84202E5BEF1}"
					 RelationKey="hr_empl_code"
					 RelationReference="hr_posn_numb"
					 GroupTarget="Positions" >
					<dn>
						<dnComponent name="Field" key="hr_posn_numb" attributeType="UID" />
					</dn>
				</adapter>	

Question answered. Resolved.

Shane
I assume that the DN is being ignored there. I think it will only see it as part of the adapterconfiguration, not a transformation.