Synchronizing user data by using administrative commands
Synchronize user data between the HCL Connections application membership tables and the configured directory for the deployment.
Each Connections application has its own database with membership tables that contain a users external ID and user data that is related to that application. These databases must be synchronized with the configured directory in the deployment. The configured directory is typically the Profiles database in deployments where Profiles is installed and Profiles integration is enabled. If Profiles is not installed or is installed but Profiles integration is not enabled, then the configured directory is the corporate LDAP directory.
The following administrative commands synchronize user data between the application databases and the configured directory in your environment. They also log entries in the application_nameUlcSyncCmd.log file that reports updated data items.
Many of the synchronization commands have a matching preview command that shows you what the synchronization command does when you run it. For example, the FilesMemberService.previewSyncAllMembersByExtId command generates a log showing what the FilesMembersService.syncAllMemberByExtId command would do if you ran it. This preview can be useful when mismatches are suspected. The logs are in the standard logging directory for the server; for example, where the cluster'sSystemOut.log file is located. The log uses the following naming convention: application_nameUlcSyncCmd.log. If the log file already exists, the new output is appended to the file.
You should run preview versions of commands before you run the actual commands. When you are sure that the command will do what you want, run the actual command.
- Initialize the Communities commands and then preview what the synchronize all
command would
do.
wsadmin>execfile("communitiesAdmin.py") wsadmin>CommunitiesMemberService.previewSyncAllMembersByExtId({"updateOnEmailLoginMatch": "true", "verbose" : "true"}) UpDt ExtId: f1a8d8c0-a59b-1030-85a9-c32c2f3a2ad1XX Name: Jane Doe has a superseded external ID, and would have been updated: New ExtId: f1a8d8c0-a59b-1030-85a9-c32c2f3a2ad1 [2012-08-07 14:50:54] Additional application possibly-stale member data: Email: jane_doe@us.acme.com Logins: [Doe, jane_doe@us.acme.com, Jane Doe] [2012-08-07 14:50:54] Directory service basic user data: Display name: Jane Smith Update External id: f1a8d8c0-a59b-1030-85a9-c32c2f3a2ad1 [2012-08-07 14:50:54] Directory service email and logins: Email: sTestuser5@janet.iris.com Logins: [Smith, Jane Smith, jane_doe@us.acme.com]
The command reveals that the user's external ID in Communities is obsolete.
- Run the following command to update the user's external
ID. Note that the preview sync all users command is
replaced by the more specific sync by email command.
You could use the syncAllMembersByExtId() parameter
that is associated with the preview but it is best to use the most
specific command.
wsadmin>CommunitiesMemberService.syncMemberExtIdByEmail("jane_doe@us.acme.com ") CLFWY0263I: The synchronize command found that active member Jane Smith [current external id: f1a8d8c0-a59b-1030-85a9-c32c2f3a2ad1XX, application id 6a716827-5fc8-438a-beb2-777f6f5d96df] could not be matched via external id, but could be matched via login or email to external id f1a8d8c0-a59b-1030-85a9-c32c2f3a2ad1. The member was updated because this action was enabled by the command.
- Profiles is not installed or Profiles integration is disabled.
- You migrated from an earlier version of Connections.
- You want to synchronize data for a specific application or a specific person in a specific application.
- You want to determine whether any application member data is out of sync with the configured directory.
Administrative commands
Use the following commands to update the identifying data and state (active or inactive) of the users who are listed in the application database, except for Profiles. For the Profiles application, use Tivoli® Directory Integrator (TDI) to synchronize users with a source LDAP database.
The use of square brackets indicates that the enclosed parameters are optional; the square brackets are not part of the command line.
- Activities
- Blogs
- Dogear (Bookmarks)
- Communities
- Files
- Forums
- NewsNote: The Home page, News repository, and Search applications share the same database, so that running the synchronization command against News applies to all three applications.
- Wikis
- Metrics
- application_nameMemberService.syncAllMembersByExtId( {"updateOnEmailLoginMatch": ["true" | "false"] } )
- This command checks to see whether the external ID found in the
member database table is present in the configured directory:
- If the external ID is present, then the command gets the display name, email address, and login names from the configured directory and updates the application database tables with the values from the directory, if they are different. This refresh update operation is not logged to the output file.
- If a match for the user's external ID is not found in the directory,
then the command uses the email address and login names that are contained
in the application database tables to continue to search for the user.
If none of the credentials match, the user is inactivated. How the
command works when a match on the login names or email address is
found differs depending on the parameter that you specified with the
command:Parameter: updateOnEmailLoginMatch: String. Options are true or false. The default is false.
- true
- Specifies that when a match is found in the configured directory based on the login names or email address of the user, the external ID in the application database is automatically updated with the external ID in the configured directory.
- false
- Specifies that when a match is found in the configured directory based on the login names or email address of the user, the external ID in the application database is written to the application_nameUIcSyncCmd.log file. You can manually make the update after confirming that the change should be made.
- If a match for the user's external ID is not found in the configured directory, nor is a match found for the user's email address and login names, then the state of the user is changed to inactive in the application database.
Note: When none of the credentials match, the Boolean (true or false) parameter is ignored; the user is always inactivated. - application_nameMemberService.syncMemberByExtId("currentExternalId"[, {"newExtId" : "id-string" [, "allowExtIdSwap" : ["true" | "false"] ] } ] )
- This determines whether the user identified by the first parameter,
which is an eternal ID, should be is active or inactive by checking
the configured directory for the external ID. The main purpose of
this command is to reactivate a user.Note: This is a complicated command that should be used carefully, particularly when swap is allowed.You can perform the following tasks with this command:
- When only currentExternalId parameter is provided,
the intent is to correct the state information for that user in the
application database.Parameters:
- currentExternalId
- String. Unique external ID that represents a user. The command looks for this external ID in the application member table. If it does not find the ID, an error is generated. If the member is found, but is currently defined as inactive, an attempt is made to activate the member. To do so, the command looks up whether the member exists in the configured directory, and if so, then the member is activated in the application member table and the associated display name, email and login values for that member are restored. When this action is taken, the update is logged in the applicationUIcSyncCmd.log file. If the member is found and is currently defined as "active" in the application database, the code first looks up currentExternalId in the configured directory. If currentExternalId is not found, the command attempts to find the member by email or login value. If this succeeds, the external ID is updated along with a refresh of display name, email, and logins, and the change is logged. If this does not succeed, then the user is inactivated and the change is logged.
CommunitiesMemberService.syncMemberByExtId("F8E59CA4-7FE1-4195-AA96-A49CE5F8E17F")
- When multiple parameters are provided, the intent is to activate
the user identified by currentExternalId with the
identity of the user defined by the newExtId. This
command might be used when a user has application content, such as
a Community, on the server but then leaves the company. The user is
removed from the LDAP and the user's state is set to inactive in the
application database tables. However, if that person is rehired by
the company, the person is added back into LDAP and is assigned a
new external ID. For this person to gain access to their old content,
you can use the following command to swap their external IDs.Parameters:
- currentExternalId
- String. Unique ID that represents a user.
- newExtId
- Optional. String. If you provide this parameter:
- The same person is being represented by two different external IDs: the currentExternalId is in the application database where the member is marked as inactive and the newExtId, is stored in the configured directory.
- The newExtId updates that person's external ID in the application database and the person is marked active.
Important: Only use this command when you are sure that the two IDs represent the same person. - allowExtIdSwap
- Optional. String. Accepts the values true or false. The default value is false. Specifies whether to swap the new and current ID of the user in the two records that represent the same person. This parameter is only needed if the user was previously employed by the organization and existed in the application member tables with the current ID, departed the organization, and was given a new ID upon returning. After that person logs in to an application for the first time with their new ID, the new ID is added to the application member tables. If you want this new user to have access to the content that she created previously using the current ID, provide this parameter and set it to true. However, be sure to run this command soon after the person returns because once the IDs are swapped, the user is not able to access any new content that she created using the new ID, just her previous content. You cannot merge the data associated with the current and new IDs. If you provide this parameter and set it to false, an error message is displayed in the wsadmin client that indicates that the command could not complete because the newExtId already exists.
CommunitiesMemberService.syncMemberByExtId("7d71d8b2-7de511df-80b6c81b-5330ca0e", {"newExtId": "7d71d8b3-7de511df-80b6c81b-5330ca0e", "allowExtIdSwap": "true"})
- When only currentExternalId parameter is provided,
the intent is to correct the state information for that user in the
application database.
- application_nameMemberService.previewSyncAllMembersByExtId( {"updateOnEmailLoginMatch": ["true" | "false" ][, "multiLine" : ["true" | "false"] ] [, "verbose" : ["false" | "true"] ] }] )
The preview command reports the action the corresponding syncAllMembersByExtId command would take (or not take) depending on the updateOnEmailLoginMatch parameter value. The results are placed in the application_nameUlcSyncCmd.log file.
There are two optional parameters, multiLine and verbose, both of which take a Boolean string value. The default value is true for multiLine and false for verbose. If multiLine is true, each action report is broken into multiple short lines to make it easier to read. If multiline is false, each action report is a single line for ease of searching the file programmatically, for example with a grep utility. If verbose is false, only out of sync results are reported independent of the value of updateOnEmailLoginMatch. This includes members that would simply be refreshed. A member is refreshed if the member is active and the external ID is a match, but the display name, email, or the logins don't match. If verbose is true, all members are reported, including active and inactive members.
The format of each reported action is timestamp, action code, action data and action message. The code is a four letter code, listed at the end of this section. At the end of the file five numbers are reported. These are also explained at the end of this section. At the very end of the file is a number that is the total actionable items found.
- application_nameMemberService.inactivateMemberByEmail("email-address")
- This marks the person identified by email-address as inactive
in the application's membership database tables, for example it changes
the state of the specified user to inactive. In addition, the email
address and login names for this user are removed from the application's
database tables. The user's external ID and Display Name are not modified.
The command also writes a status message to the application_nameUlcSyncCmd.log file
indicating that the user has been deactivated.Parameter:
- email-address
- String. Email address of the user you want to mark as inactive in the application membership database tables.
- application_nameMemberService.inactivateMemberByExtId("externalID")
- This marks the person identified by external ID as inactive in
the application's membership database tables. This command changes
the state of the specified user to inactive. In addition, the email
address and login names for this user are removed from the application's
database tables. The user's external ID and Display Name are not modified.
The command also writes a status message to the application_nameUlcSyncCmd.log file
indicating that the user has been deactivated.Parameter:
- externalID
- String. Unique ID that represents the user you want to mark as inactive in the application membership database tables.
- application_nameMemberService.getMemberExtIdByEmail("email")
- This retrieves the external ID of the person identified in the
email parameter and returns it to the wsadmin console. The external
ID returned from this command can be used as input to some of the
other wsadmin commands that require the user's external ID as an input
parameter.Parameter:
- String. Email address of the user whose external ID you want to retrieve.
- Command:
wsadmin>CommunitiesMemberService.getMemberExtIdByEmail("userB@example.com")
- Result:
510b99c0-0101-102e-8923-f78755f7e0ed
- application_nameMemberService.getMemberExtIdByLogin("login")
- This retrieves the external ID of the person identified in the
login parameter and returns it to the wsadmin console. The external
ID returned from this command can be used as input to some of the
other wsadmin commands that require the user's external ID as an input
parameter.Parameter:
- login
- String. Login name of the user whose external ID you want to retrieve.
- Command:
wsadmin>CommunitiesMemberService.getMemberExtIdByLogin("User A")
- Result:
806edb40-e8ba-102e-91cd-d74ea1c96b51
Additional administrative commands
- To synchronize a batch of users from a file based on their login names and emails instead of external IDs.
- To synchronize a particular user by login name or email, instead of by external ID.
- Activities
- Blogs
- Dogear (Bookmarks)
- Communities
- Files
- Forums
- NewsNote: The Home page, News repository, and Search applications share the same database, so running the synchronization command against News applies to all three areas.
- Wikis
- application_nameMemberService.syncBatchMemberExtIdsByLogin("loginFile" [, {"allowInactivate" : ["true" | "false"] } ] )
The command application_nameMemberService.syncBatchMemberExtIds(filename) was deprecated in version 2.5. Use this command or the application_nameMemberService.syncBatchMemberExtIdsByEmail(emailFile) command instead.
This synchronizes a list of users contained in the specified text file. The text file must define one login name per line. For each login name, if a match is found the command checks the external ID in the application member table against the value in the configured directory to see if it matches. If the external ID matches, then the user's email address and display name and any additional login names are refreshed if needed so that they match those in the configured directory. The refresh operation is not logged.
If the external ID is not found in the configured directory, then a synchronize operation is performed based on the email and login values and the user's external ID in the member table in the application database is updated with the external ID in the configured directory. Also, the user's email, display name, and any additional login names are refreshed. Each user that is synchronized by this operation is logged in the log file. If the user cannot be found in the configured directory by any means (external ID, login names, or email) then the user may be inactive. The command can do one of two things in this situation, depending on whether the allowInactivate input parameter is set to true or false (see the following explanation of the two flags).
Parameters:- loginFile
- String. Path and name of a text file that contains one user login name entry per line.
- allowInactivate
- String. Options are true or false. Specify one of these values to allow changes to the state of the user.
For example:ActivitiesMemberService.syncBatchMemberExtIdsByLogin("c:/apps/activities/login_sync_file.txt", { "allowInactivate":"false"})
- application_nameMemberService.syncBatchMemberExtIdsByEmail("emailFile" [, {"allowInactivate" : ["true" | "false"] } ] )
The command application_nameMemberService.syncBatchMemberExtIds(filename) was deprecated in version 2.5. Use this command or the syncBatchMemberExtIdsByLogin(loginFile) command instead.
This synchronizes a list of users contained in the specified text file. The text file must define one email address per line. If a match is found, for example the email address identifies a member, the command retrieves the external ID in the application member table and looks it up in the configured directory. If the external ID is found, then the user's display name and any additional login names are refreshed if needed, so that they match those in the configured directory. The refresh operation is not logged.
If the external ID is not found in the configured directory, then a synchronize operation is performed based on the email and login values and the user's external ID in the member table is updated with the external ID in the configured directory. Also, the user's display name, and any additional login names are refreshed. Each user that is synchronized by this operation is logged in the log file. If the user cannot be found in the configured directory by any means (external ID, login names, or email) then the user may be inactive. The command can do one of two things in this situation, depending on whether the following allowInactivate input parameter is set to true or false.
Parameters:- emailFile
- String. Path and name of text file that contains one entry per line of user email addresses (jdoe@example.com).
- allowInactivate
- String. Options are true or false. Specify one of these values to allow changes to the state of the user.
For example:ActivitiesMemberService.syncBatchMemberExtIdsByEmail("c:/apps/activities/my_sync_file.txt", { "allowInactivate":"true"})
- application_nameMemberService.previewSyncBatchMemberExtIdsByEmail("emailFile"[, { "allowInactivate" : ["true" | "false"] [, "multiLine" : ["true" | "false"] ] [, "verbose" : ["true" | " false"] ] } ] )
- See the description of preview commands under the previewSyncAllMembersByExtId() command at the beginning of this section. Note that the default value for the verbose parameter is true.
- application_nameMemberService.previewSyncBatchMemberExtIdsByLogin("loginFile" [, { "allowInactivate" : ["true" | "false"] [, "multiLine" : ["true" | "false"] ] [, "verbose" : ["true" | " false"] ] } ] )
- See the description of preview commands under the previewSyncAllMembersByExtId() command at the beginning of this section. Note that the default value for the verbose parameter is true.
- application_nameMemberService.syncMemberExtIdByEmail("email" [, { "allowInactivate" : ["true" | "false"] } ])
The command application_nameMemberService.syncMemberExtId(java.lang.String key) was deprecated in version 2.5. Use this command or the syncMemberExtIdByLogin(java.lang.String loginName) command instead.
This synchronizes the member record in the application member table identified by the member's email address parameter. If a match is found, for example the email address identifies a member, the command retrieves the external ID in the application member table and looks it up in the configured directory. If the external ID is found, then the user's email address and display name and any additional login names are refreshed as needed so that they match those in the configured directory. The refresh operation is not logged.
If the external ID is not found in the configured directory, then a synchronize operation is performed based on the email and login values and the user's external ID in the member table is updated with the external ID in the configured directory. Also, the user's email, display name, and any additional login names are refreshed. Each user that is synchronized by this operation is logged in the log file. If the user cannot be found in the configured directory by any means (external ID, login names, or email) then the user may be inactive. The command can do one of two things in this situation, depending on whether the allowInactivate input parameter is set to true or false (see the following explanation of the two flags).
Parameters:- String. A user's email address.
- allowInactivate
- String. Options are true or false. Specify one of these values to allow changes to the state of the user.
For example:ActivitiesMemberService.syncMemberExtIdByEmail("jdoe@example.com", {"allowInactivate":"false"})
- application_nameMemberService.previewSyncMemberExtIdByEmail("emailAddr" [, { "allowInactivate" : ["true" | "false"] [, "multiLine" : ["true" | "false"] ] [, "verbose" : ["true" | " false"] ] } ] )
- See the description of preview commands under the previewSyncAllMembersByExtId() command at the beginning of this section. Note that the default value for the verbose parameter is true.
- application_nameMemberService.syncMemberExtIdByLogin("name" [, {"allowInactivate": ["true" | "false"] } ])
The command application_nameMemberService.syncMemberExtId(java.lang.String key) was deprecated in version 2.5. Use this command or the application_nameMemberService.syncMemberExtIdByEmail(java.lang.String emailAddress) command instead.
This synchronizes the member record in the application member table identified by the user login name parameter. If a match is found, for example the email address identifies a member, the command retrieves the external ID in the application member table and looks it up in the configured directory. If the external ID is found, then the user's email address and display name and any additional login names are updated so that they match those in the configured directory. The refresh operation is not logged.
If the external ID is not found n the configured directory, then a synchronize operation is performed and the user's external ID in the member table is updated with that of the external ID in the configured directory. Also, the user's email, display name, and any additional login names are refreshed. Each user that is synchronized by this operation is logged in the log file. If the user cannot be found in the configured directory by any means (external ID, login names, or email) then the user may be inactive. The command can do one of two things in this situation, depending on whether the allowInactivate input parameter is set to true or false.
Parameters:- name
- String. User login name.
- allowInactivate
- String. Options are true or false. Specify one of these values to allow changes to the state of the user.
For example:ActivitiesMemberService.syncMemberExtIdByLogin("jdoe", {"allowInactivate":"true"})
To understand the 'preview' version of the command see the explanation of preview under the previewSyncAllMembersByExtId() command at the beginning of this section. Note that the default value for the verbose parameter is true.
- application_nameMemberService.previewSyncMemberExtIdByLogin("name"[, { "allowInactivate" : ["true" | "false"] [, "multiLine" : ["true" | "false"] ] [, "verbose" : ["true" | " false"] ] } ])
- See the description of preview commands under the previewSyncAllMembersByExtId() command at the beginning of this section. Note that the default value for the verbose parameter is true.