0
Fixed

Items with null key values fail to save to connector context

Matthew Clark 7 years ago • updated by anonymous 4 years ago 3

When entities with null keys are exported (as in the case initially for SharePoint Org Profile), they fail to save to the connector context. This leaves Identity Broker in a state where the item exists in the connected system but not the connector context. Error message as follows:

Value cannot be null.
Parameter name: item
> Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.EntityLinqQueryExecutorInformation<Unify.Framework.Collections.GroupedNameValueCollectionKey>.AddValue(System.Guid searchGuid, Unify.Framework.Collections.GroupedNameValueCollectionKey keyValue, Unify.Framework.IValue item, int columnSequence, int valueSequence, Unify.Product.IdentityBroker.Repository.IEntityCollectionKeyUtility<Unify.Framework.Collections.GroupedNameValueCollectionKey> collectionKeyUtility) Line 151 C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.EntityExpressionQueryVisitor<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey>.CreateMultiValueRangeExpression.AnonymousMethod__16(Unify.Framework.MultiKeyValue itemValue, int itemValueIndex) Line 575 + 0x155 bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<Unify.Framework.MultiKeyValue>(System.Collections.Generic.IEnumerable<Unify.Framework.MultiKeyValue> visitCollection, System.Action<Unify.Framework.MultiKeyValue,int> visitor) Line 48 C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.EntityExpressionQueryVisitor<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey>.CreateMultiValueRangeExpression.AnonymousMethod__15(Unify.Framework.Collections.GroupedNameValueCollectionKey key, int keyIndex) Line 571 + 0x9f bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<Unify.Framework.Collections.GroupedNameValueCollectionKey>(System.Collections.Generic.IEnumerable<Unify.Framework.Collections.GroupedNameValueCollectionKey> visitCollection, System.Action<Unify.Framework.Collections.GroupedNameValueCollectionKey,int> visitor) Line 48 C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.EntityExpressionQueryVisitor<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey>.CreateMultiValueRangeExpression(Unify.Product.IdentityBroker.IMultiKey<Unify.Framework.Collections.GroupedNameValueCollectionKey> multiKey, System.Collections.Generic.IEnumerable<Unify.Framework.MultiKeyValue> sourceValueList, System.Linq.IQueryable<Unify.Product.IdentityBroker.Repository.Entity> sourceQueryable) Line 570 + 0xff bytes C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.VisitMethodWhereWithMultiValueEnumerableContains<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey>.Transform(System.Linq.Expressions.MethodCallExpression expression) Line 76 + 0x3a bytes C#
Unify.IdentityBroker.Entity.Repository.Sql.dll!Unify.Product.IdentityBroker.Repository.EntityExpressionQueryVisitor<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.IEntity,Unify.Framework.Collections.GroupedNameValueCollectionKey>.VisitMethodCall(System.Linq.Expressions.MethodCallExpression m) Line 367 + 0x50 bytes C#
Unify.Framework.Linq.dll!Unify.Framework.ExpressionVisitorBase<System.Linq.Expressions.Expression,System.Linq.Expressions.MemberBinding,System.Linq.Expressions.ElementInit,System.Collections.ObjectModel.ReadOnlyCollection<System.Linq.Expressions.Expression>,System.Linq.Expressions.MemberAssignment,System.Linq.Expressions.MemberMemberBinding,System.Linq.Expressions.MemberListBinding,System.Collections.Generic.IEnumerable<System.Linq.Expressions.MemberBinding>,System.Collections.Generic.IEnumerable<System.Linq.Expressions.ElementInit>,System.Linq.Expressions.ParameterExpression,System.Linq.Expressions.NewExpression>.Visit(System.Linq.Expressions.Expression exp) Line 177 + 0x41 bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqContextConversionExpressionVisitorBase<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,System.Linq.IQueryable<Unify.Product.IdentityBroker.IEntity>,Unify.Product.IdentityBroker.Repository.IEntityLinqQueryExecutorInformation<Unify.Framework.Collections.GroupedNameValueCollectionKey>,Unify.Product.IdentityBroker.Repository.EntityDataContext>.ConvertExpression(System.Linq.Expressions.Expression partitionExpression) Line 96 + 0x22 bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqQueryConversionProvider<Unify.Product.IdentityBroker.Repository.Entity,Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.Repository.IEntityLinqQueryExecutorInformation<Unify.Framework.Collections.GroupedNameValueCollectionKey>,Unify.Product.IdentityBroker.Repository.EntityDataContext,System.Data.SqlClient.SqlConnection>.GetOrderedQuery(System.Linq.Expressions.Expression businessExpression, System.Linq.IQueryable<Unify.Product.IdentityBroker.Repository.Entity> sourceQueryable, Unify.Product.IdentityBroker.Repository.EntityDataContext sourceContext) Line 44 + 0x7f bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqWhereQuery<Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.Repository.IEntityLinqQueryExecutorInformation<Unify.Framework.Collections.GroupedNameValueCollectionKey>,Unify.Product.IdentityBroker.Repository.EntityDataContext,Unify.Product.IdentityBroker.Repository.Entity,System.Data.SqlClient.SqlConnection>.EvaluateQuery(Unify.Product.IdentityBroker.Repository.EntityDataContext context) Line 172 + 0x96 bytes C#
Unify.Framework.Data.dll!Unify.Framework.Data.LinqWhereQuery<Unify.Product.IdentityBroker.IEntity,Unify.Product.IdentityBroker.Repository.IEntityLinqQueryExecutorInformation<Unify.Framework.Collections.GroupedNameValueCollectionKey>,Unify.Product.IdentityBroker.Repository.EntityDataContext,Unify.Product.IdentityBroker.Repository.Entity,System.Data.SqlClient.SqlConnection>.GetEnumerator() Line 92 + 0x10 bytes C#
System.Core.dll!System.Linq.Enumerable.ToDictionary<Unify.Product.IdentityBroker.IEntity,Unify.Framework.MultiKeyValue,System.Guid>(System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IEntity> source, System.Func<Unify.Product.IdentityBroker.IEntity,Unify.Framework.MultiKeyValue> keySelector, System.Func<Unify.Product.IdentityBroker.IEntity,System.Guid> elementSelector, System.Collections.Generic.IEqualityComparer<Unify.Framework.MultiKeyValue> comparer) + 0xc8 bytes
System.Core.dll!System.Linq.Enumerable.ToDictionary<Unify.Product.IdentityBroker.IEntity,Unify.Framework.MultiKeyValue,System.Guid>(System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IEntity> source, System.Func<Unify.Product.IdentityBroker.IEntity,Unify.Framework.MultiKeyValue> keySelector, System.Func<Unify.Product.IdentityBroker.IEntity,System.Guid> elementSelector) + 0x5a bytes
Unify.IdentityBroker.Entity.Repository.dll!Unify.Product.IdentityBroker.EntityRepositoryExtensions.ConvertConnectorEntities(System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IConnectorEntity> connectorEntities, Unify.Product.IdentityBroker.IMultiKey<Unify.Framework.Collections.GroupedNameValueCollectionKey> schemaKey, System.Linq.IQueryable<Unify.Product.IdentityBroker.IEntity> sourceEntities, System.Guid connectorId, System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IEntity> wellKnownEntities) Line 55 + 0x28 bytes C#
Unify.IdentityBroker.ChangeDetection.dll!Unify.Product.IdentityBroker.EntityChangeDetector.ProcessConnectorChangedEntities(System.Guid connectorId, System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IConnectorEntity> connectorEntities, System.Collections.Generic.IEnumerable<Unify.Product.IdentityBroker.IEntity> wellKnownItems) Line 145 + 0x89 bytes C#
Unify.IdentityBroker.Adapter.Engine.dll!Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.DetectChanges(System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport> connectorEntities) Line 236 + 0xc0 bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>>.AnonymousMethod__0(System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport> item, int index) Line 23 + 0x43 bytes C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>> visitCollection, System.Action<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>,int> visitor) Line 48 C#
Unify.Framework.DesignPatterns.dll!Unify.Framework.Visitor.Visit<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>> visitCollection, System.Action<System.Collections.Generic.KeyValuePair<System.Guid,Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.CollatorReport>> visitor) Line 24 C#
Unify.IdentityBroker.Adapter.Engine.dll!Unify.Product.IdentityBroker.AdapterEntityChangeDetectorCollator.Run() Line 163 + 0x4e bytes C#

Affected Versions:
Fixed by Version:

Fixed such that null keys do not do the check that breaks.

Also fixed an issue where the connector entity DN breadcrumb was blocked from being added to the connector context because it wasn't in the schema.

Resolved, tested with 2 connectors, and closed.

Reopening to log time

Closing following logging of time