Identity Broker Forum

Welcome to the community forum for Identity Broker.

Browse the knowledge base, ask questions directly to the product group, or leverage the community to get answers. Leave ideas for new features and vote for the features or bug fixes you want most.

0
Fixed

New Aderant Expert connector failing to clear HPPhoneNumber attribute

Adrian Corston 4 years ago in UNIFYBroker/Aderant Expert updated 4 years ago 3

MIM has around 940 pending export deletes for HPPhoneNumber attributes, and they are being processed successfully by UNIFYBroker and the Aderant Expert connector (i.e. no export errors).  However, during a subsequent Full Import by MIM that attribute is being restored to the non-NULL value, meaning that the next Full Sync results in each of those objects having a new pending export, ad infinitum.

0
Not a bug

The latest version of the Aderant Expert connector no longer truncates long attribute values; PowerShell transform has been written to prototype a solution in DEV but will need to be ported into the C# connector

Adrian Corston 4 years ago in UNIFYBroker/Aderant Expert updated 4 years ago 7

Here's the PowerShell transform that was required (so it can be ported to C#):

Image 5516


# Truncate long fields

function Invoke-FieldTruncator {
param(
$Entity,
[string] $Field,
[int] $Length
)

$old = $Entity[$Field].Value
if ($old) {
$old = $old.ToString()
if ($old.Length -gt $Length) {
$new = $old.Substring(0, $Length)
$Logger.LogInformation("Truncated long $Field '$old' to '$new'")
$Entity[$Field] = $new
}
}
}

foreach ($entity in $entities) {
Invoke-FieldTruncator -Entity $entity -Field HPPhoneNumber -Length 17
Invoke-FieldTruncator -Entity $entity -Field NameSort -Length 30
}

Note that these are only the fields that had long data which needed truncation in the DEV environment.  When we move to UAT and PROD it is likely there will be other fields with long data that needs to be truncated.  A lot of time and debugging effort was expended by the consultant (me) to identify and remediate these two fields in DEV, and this will add to the time required for UAT and PROD deployments.  The extra time required will be a particular issue when we come to PROD as it will significantly increase the deployment time during which time the system will be down for the customer.

As a consequence, I suggest that all fields be truncated to their maximum database lengths, not just those listed in the DEV workaround above.

0
Fixed

Aderant Expert connector fails with "The transaction associated with the current connection has completed but has not been disposed" after a previous SQL timeout failure

After a SQL timeout it appears the SQL connection to Aderant Expert remains with a SQL transaction that has not been disposed.  The error is:

20191203,23:22:24,UNIFYBroker,Connector,Warning,"Update entities to connector failed.
Update entities [Count:2071] to connector Global Aderant Expert Connector failed with reason The transaction associated with the current connection has completed but has not been disposed. The transaction must be disposed before the connection can be used to execute SQL statements.. Duration: 00:01:01.0504286

The previous timeout error responsible for the undisposed transaction is:

20191203,23:16:16,UNIFYBroker,Connector,Warning,"Update entities to connector failed.
System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
Update entities [Count:2071] to connector Global Aderant Expert Connector failed with reason Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.. Duration: 00:01:16.0479697

The workaround is to restart the UNIFYBroker service, to stop it reusing the bad SQL connection.

See also https://voice.unifysolutions.net/communities/6/topics/3995-aderant-expert-agent-ui-doesnt-save-changes-to-the-operation-timeout-parameter for more information about SQL operation timeouts on a Global Aderant Expert connector.

0
Fixed

Aderant Expert agent UI doesn't save changes to the Operation Timeout parameter

After changing and saving the "Operation Timeout" parameter on the Aderant Expert agent UI the value is not saved.  In the extensibility file, the value "PT0S" is always written.

As a workaround I have edited the extensibility file instead.

Image 5515


0
Answered

Aderant Expert MA 'string or binary data would be truncated' error on export

Using the new version of the Aderant Expert connector I'm seeing this error.  This is the first time I've attempted an export with the new connector.  The configuration is a migration of the old version of the connector, talking to a database which is a copy of the one used by the old version of the connector.

Image 5489


UNIFYBroker v5.3.2 Revision #0
Aderant Expert Connector 5.3.1.1
Chris21 Connector 5.3.0.0

Could you please assist in working out what's wrong?

Answer

That means there's a field in the Aderant database with a length limit, and you're trying to write a value to it that exceeds that limit.

0
Fixed

Entity Search hangs with "Processing..." for Aderant Expert connector and adapter

Adrian Corston 4 years ago in UNIFYBroker/Aderant Expert updated by anonymous 4 years ago 16

UNIFYBroker Entity Search hangs for the Aderant Expert connector and adapter, but works just fine for all other connectors and adapters.  MIM is able to read data from the Aderant Expert adapter via the LDAP gateway very quickly.

The Aderant Expert connector and adapter each have 170 attributes and around 16K records.  For comparison, the Chris21 adapter has 155 attributes and around 11K records and displays just fine.

The problem occurs with both the built-in web server and IIS.  While the browser is "Processing..." none of the SQL server, UNIFYBroker service or IIS are showing any significant load or unusual memory consumption.  The browser is IE11.0.145, which is the only one available.

UNIFYBroker v5.3.2 Revision #0
Aderant Expert Connector 5.3.1.1
Chris21 Connector 5.3.0.0

Image 5440

Answer

Hey Adrian,

Thanks for this. As discussed, this is due to a high number of attributes on the page which is tripping the maxQueryStringLength setting in the web.config file while attempting to retrieve the values for these attributes.


Updating the setting to a higher value and restarting the service resolves this issue.

0
Fixed

Aderant Express v.5.3.1.0 connector reports "Invalid column name 'OBSOLETE_1'" on Import All

I am upgrading from IDB to UNIFYBroker and recreating the Aderant Expert connector (using a SQL Agent).  Test Connection on the Agent returns successfully with no warnings or errors.

When I run an Import All I immediately see the following error logged:

Image 5377

Looking at the Aderant Expert database in SSMS I see that the HSM_PERSNL table has an OBSOLETE_1 field as might be expected:

Image 5378

Image 5379

Image 5380

Can you advise what SQL command is being executed, or otherwise help work out why it's failing?

0
Answered

Attribute Table Mapping Request

I have a customer that has modified their database schema and has had a flow on effect to IDB where it will not run as there is an extra column.  Problem being the extra column has been added in multiple places and need to be able to isolate exactly which db/table/column each attribute connects to so I can inform the customer which instance of the extra column is causing IDB to fail so they can remove.

Answer

Hi Todd,

Out of the 5 tables listed in the ticket, i've done a mapping of which tables expect the field based on the OBSOLETE_1 field:

HBM_NAME: No

HBL_WORK_GROUP: No

HBM_PERSNL: Yes

HBM_ADDRESS: No

HBM_NAME_PEOPLE: Yes

So if they've added the field to HBM_NAME, HBM_WORK_GROUP or HBM_ADDRESS then it's likely one (or more) of these tables is what's causing the issue. The connector gets relational data from all of the tables listed, so it's unlikely to just be a single table.

0
Answered

Aderant Expert Connector for UNIFYBroker

Daniel Walters 5 years ago in UNIFYBroker/Aderant Expert updated by anonymous 5 years ago 10

Is this a custom connector? I can't see it in the KB. What's the situation if it is a custom connector? It's installed with a v4IdB currently but I don't have the connector installation. Would further development be required for the connector to work with 5?

Answer
Adam van Vliet 5 years ago

The intention was always to commercialise it, but the API's were not ready in time so we had to go straight to the database. Since then client specific fields were also added in. The connector was upgraded for a new version of Aderant Expert, but I don't believe they ended up using it. The connector would need to be upgraded, please loop in Richard.

0
Not a bug

Global Aderant Expert Connector failed with reason String or binary data would be truncated.

Jerry Natarajan 7 years ago in UNIFYBroker/Aderant Expert updated by anonymous 7 years ago 5

Unify Identity Broker: 4.1.x;
Unify Identity Broker Connector for Expert: v4.1.x;
Unify Identity Broker Connector for Microsoft FIM : v4.1.x.

Backround information:

I added a new field (HP Telephone Number) in Expert and created the field in FIM. The attribute is already present in IDB

The phone number field seems to be already part of the schema in the Global Expert Connector:

Image 4436


Length of field in Expert:

Image 4437

I added a rule to trim the spaces from the phone number when it gets imported into MV from MDR, and re-ran the export/import/sync for Global Expert, and the issue is still the same.

In FIM it looks like the Exports go through, but when you re-import and re-sync, the values don’t get re-imported.

Detailed error:

Error1:

The extensible extension returned an unsupported error.
The stack trace is:
"System.Exception: Error occurred when attempting to save entity with distinguished name
 
UID=53864
 
Error:
 
Cannot insert duplicate key row in object 'dbo.TBM_PERSNL_GL' with unique index 'TBM_PERSNL_GL2'. The duplicate key value is (50014997, 64).
The statement has been terminated.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
   at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
   at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
   at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
   at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
   at Unify.Product.IdentityBroker.AderantExpert8EmployeeConnector.SaveEntities(IEnumerable`1 entities)
   at Unify.Product.IdentityBroker.EventNotifierUpdatingConnectorDecorator.UpdateEntities(IEnumerable`1 entities)
   at Unify.Product.IdentityBroker.Adapter.UpdateEntities(IEnumerable`1 entities, EntityToConnectorEntityBridge[]& connectorEntities)
   at Unify.Product.IdentityBroker.Adapter.UpdateEntities(IEnumerable`1 entities)
   at Unify.Product.IdentityBroker.AdapterNotifierDecoratorBase`1.UpdateEntity(IAdapterEntity entityToSave)
   at Unify.Product.IdentityBroker.LDIFAdapterBase.HandleExportUpdate(IAdapter adapter, IAdapterEntitySaveChange pendingUpdate, IDictionary`2 getEntityCache)
   at Unify.Product.IdentityBroker.LDIFAdapterBase.ExportChanges(ExportedLDIFForAdapter exportedLdifForAdapter)
   at SyncInvokeExportChanges(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
   at Unify.Product.IdentityBroker.IdentityBrokerManagementAgentProxy.ExportEntry(ModificationType modificationType, String[] changedAttributes, CSEntry csentry)
Forefront Identity Manager 4.1.3508.0"

 Error 2:

Update entities to connector failed.
Update entities [Count:1] to connector Global Aderant Expert Connector failed with reason String or binary data would be truncated.
The statement has been terminated.. Duration: 00:00:00.2910291
Error details:
System.Data.SqlClient.SqlException (0x80131904): String or binary data would be truncated.
The statement has been terminated.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at Unify.Product.IdentityBroker.AderantExpert8EmployeeConnector.SaveEntities(IEnumerable`1 entities)
at Unify.Product.IdentityBroker.EventNotifierUpdatingConnectorDecorator.UpdateEntities(IEnumerable`1 entities)
at Unify.Product.IdentityBroker.Adapter.UpdateEntities(IEnumerable`1 entities, EntityToConnectorEntityBridge[]& connectorEntities)
at Unify.Product.IdentityBroker.Adapter.UpdateEntities(IEnumerable`1 entities)
at Unify.Product.IdentityBroker.AdapterNotifierDecoratorBase`1.UpdateEntity(IAdapterEntity entityToSave)
at Unify.Product.IdentityBroker.LDIFAdapterBase.HandleExportUpdate(IAdapter adapter, IAdapterEntitySaveChange pendingUpdate, IDictionary`2 getEntityCache)
at Unify.Product.IdentityBroker.LDIFAdapterBase.ExportChanges(ExportedLDIFForAdapter exportedLdifForAdapter)
at SyncInvokeExportChanges(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

When I kick off Exports from FIM Global Expert MA, they seem to go through ok, but when re-imported, “data has not been re-imported” issues comes up every time for the HPPhoneNumber field.

When manually updated a record in Expert with a phone number (using ID Broker sql account), there are no issues.


Answer
anonymous 7 years ago
Hi Curtis, I had a look at the errors and it clearly sending 20+ chars for Phone_No where as the allowed length in Target is 17. So I have mentioned this to Client and they will fix it up in the source.