While searching some issue I have a very interesting blog post about a utility which creates a new user based on an existing user. It copies the Roles and User Options from the existing user and creates a new one.
This utiltiy not limited to copy user roles but can copy User Groups and user Options too.
Some important methods of this utility are;
Create User lookup for FROM USER
public void fromUserLookup(FormStringControl userLookupControl)
{
Query qry = new Query();
QueryBuildDataSource qbd;
QueryBuildRange qbr;
SysTableLookup sysTableLookup;
Userinfo userInfo;
systablelookup = SysTableLookup::newParameters(tableNum(UserInfo), userLookupControl);
SysTableLookup.addLookupfield(fieldNum(UserInfo, ID));
SysTableLookup.addLookupfield(fieldNum(UserInfo, NetworkAlias));
SysTableLookup.addLookupfield(fieldNum(UserInfo, Name));
qbd = qry.addDataSource(tableNum(userInfo));
qbd.addRange(fieldNum(UserInfo,Company)).value(curext());
sysTableLookup.parmQuery(qry);
sysTableLookup.performFormLookup();
}
Create User lookup for TO USER
public void toUserLookup(FormStringControl userLookupControl)
{
Query qry = new Query();
QueryBuildDataSource qbd;
QueryBuildRange qbr;
SysTableLookup sysTableLookup;
Userinfo userInfo;
systablelookup = SysTableLookup::newParameters(tableNum(UserInfo), userLookupControl);
SysTableLookup.addLookupfield(fieldNum(UserInfo, ID));
SysTableLookup.addLookupfield(fieldNum(UserInfo, NetworkAlias));
SysTableLookup.addLookupfield(fieldNum(UserInfo, Name));
qbd = qry.addDataSource(tableNum(userInfo));
qbd.addRange(fieldNum(UserInfo,Company)).value(curext());
qbr = qbd.addRange(fieldNum(UserInfo, Enable));
qbr.value('1');
sysTableLookup.parmQuery(qry);
sysTableLookup.performFormLookup();
}
Function to copy USER ROLES
/// <summary>
/// copy roles assigned to one user to another
/// </summary>
/// <returns>
/// true; roles are copied across. false; roles failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user roles assigned to one user to another user.
/// </remarks>
private boolean copyUserRoles()
{
boolean ret = true;
SecurityRole securityRole;
SecurityUserRole securityUserRole;
SecurityUserRole securityUserRoleExist;
SecurityUserRole securityUserRoleInsert;
OMUserRoleOrganization userRoleOrganization, userRoleOrganization_Insert;
List copiedUserRoles = new List(Types::String);
ListEnumerator lEnumerator;
setPrefix(strFmt("Copy user", fromUser, toUser));
try
{
select securityRole where securityRole.AotName == 'SystemUser';
delete_from securityUserRole where securityUserRole.User == toUser && securityUserRole.SecurityRole == securityRole.RecId;
while select securityUserRole
where securityUserRole.User == fromUser
notExists join * from securityUserRoleExist
where securityUserRoleExist.SecurityRole == securityUserRole.SecurityRole
&& securityUserRoleExist.User == toUser
{
select securityRole where securityRole.RecId == securityUserRole.SecurityRole;
copiedUserRoles.addStart(securityRole.Name);
securityUserRoleInsert.initValue();
securityUserRoleInsert.SecurityRole = securityUserRole.SecurityRole;
securityUserRoleInsert.User = toUser;
securityUserRoleInsert.insert();
securityUserRoleInsert.clear();
while select userRoleOrganization
where userRoleOrganization.User == fromUser
&& userRoleOrganization.SecurityRole == securityUserRole.SecurityRole
{
userRoleOrganization_Insert.initValue();
userRoleOrganization_Insert.OMHierarchyType = userRoleOrganization.OMHierarchyType;
userRoleOrganization_Insert.OMInternalOrganization = userRoleOrganization.OMInternalOrganization;
userRoleOrganization_Insert.SecurityRole = userRoleOrganization.SecurityRole;
userRoleOrganization_Insert.SecurityRoleAssignmentRule = userRoleOrganization.SecurityRoleAssignmentRule;
userRoleOrganization_Insert.User = toUser;
userRoleOrganization_Insert.insert();
userRoleOrganization_Insert.clear();
}
}
}
catch
{
ret = false;
}
if (ret)
{
lEnumerator = copiedUserRoles.getEnumerator();
if (copiedUserRoles.empty())
info(strFmt("User %1 and %2 have already the same user role",fromUser, toUser));
while (lEnumerator.moveNext())
{
info(strFmt('%1',lEnumerator.current()));
}
}
else
error(strFmt("User Roles aborted please review list"));
return ret;
}
Function to copy USER OPTIONS
/// <summary>
/// copy options assigned to one user to another
/// </summary>
/// <returns>
/// true; options are copied across. false; options failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user's options assigned to one user to another user.
/// </remarks>
private boolean copyUserOptions()
{
boolean ret = true;
UserInfo userInfoSource;
UserInfo userInfoTarget;
SysUserInfo sysUserInfoSource;
SysUserInfo sysUserInfoTarget;
setPrefix(strFmt("Copy user options", fromUser, toUser));
try
{
select userInfoSource
where userInfoSource.id == fromUser
join sysUserInfoSource
where sysUserInfoSource.Id == userInfoSource.id;
ttsBegin;
select forUpdate userInfoTarget where userInfoTarget.id == toUser;
userInfoTarget.filterByGridOnByDefault = userInfoSource.filterByGridOnByDefault;
userInfoTarget.statuslineInfo = userInfoSource.statuslineInfo;
userInfoTarget.update();
select forUpdate sysUserInfoTarget where sysUserInfoTarget.Id == toUser;
sysUserInfoTarget.DefaultCountryRegion = sysUserInfoSource.DefaultCountryRegion;
sysUserInfoTarget.update();
ttsCommit;
}
catch
{
ret = false;
}
if (ret)
{
info(strFmt("User %1 and %2 have already the same user options ", fromUser, toUser));
}
else
error(strFmt("User Options aborted please review list "));
return ret;
}
Function to copy USER GROUPS
/// <summary>
/// copy groups assigned to one user to another
/// </summary>
/// <returns>
/// true; groups are copied across. false; groups failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user groups assigned to one user to another user.
/// </remarks>
private boolean copyUserGroups()
{
boolean ret = true;
UserGroupList userGroupList;
UserGroupList userGroupListExist;
UserGroupList userGroupListInsert;
List copiedGroups = new List(Types::String);
ListEnumerator lEnumerator;
setPrefix(strFmt("Copy user groups", fromUser, toUser));
try
{
while select userGroupList
where userGroupList.userId == fromUser
notExists join * from userGroupListExist
where userGroupListExist.groupId == userGroupList.groupId
&& userGroupListExist.userId == toUser
{
copiedGroups.addStart(userGroupList.groupId);
userGroupListInsert.initValue();
userGroupListInsert.groupId = userGroupList.groupId;
userGroupListInsert.userId = toUser;
userGroupListInsert.insert();
userGroupListInsert.clear();
}
}
catch
{
ret = false;
}
if (ret)
{
lEnumerator = copiedGroups.getEnumerator();
if (copiedGroups.empty())
info(strFmt("User %1 and %2 have already the same user Groups ",fromUser, toUser));
while (lEnumerator.moveNext())
{
info(strFmt('%1',lEnumerator.current()));
}
}
else
error(strFmt("User Groups aborted please review list "));
return ret;
}
Credit: http://daxture.blogspot.in/2015/01/assigning-security-roles-to-new-ax-user.html
This utiltiy not limited to copy user roles but can copy User Groups and user Options too.
Some important methods of this utility are;
Create User lookup for FROM USER
public void fromUserLookup(FormStringControl userLookupControl)
{
Query qry = new Query();
QueryBuildDataSource qbd;
QueryBuildRange qbr;
SysTableLookup sysTableLookup;
Userinfo userInfo;
systablelookup = SysTableLookup::newParameters(tableNum(UserInfo), userLookupControl);
SysTableLookup.addLookupfield(fieldNum(UserInfo, ID));
SysTableLookup.addLookupfield(fieldNum(UserInfo, NetworkAlias));
SysTableLookup.addLookupfield(fieldNum(UserInfo, Name));
qbd = qry.addDataSource(tableNum(userInfo));
qbd.addRange(fieldNum(UserInfo,Company)).value(curext());
sysTableLookup.parmQuery(qry);
sysTableLookup.performFormLookup();
}
Create User lookup for TO USER
public void toUserLookup(FormStringControl userLookupControl)
{
Query qry = new Query();
QueryBuildDataSource qbd;
QueryBuildRange qbr;
SysTableLookup sysTableLookup;
Userinfo userInfo;
systablelookup = SysTableLookup::newParameters(tableNum(UserInfo), userLookupControl);
SysTableLookup.addLookupfield(fieldNum(UserInfo, ID));
SysTableLookup.addLookupfield(fieldNum(UserInfo, NetworkAlias));
SysTableLookup.addLookupfield(fieldNum(UserInfo, Name));
qbd = qry.addDataSource(tableNum(userInfo));
qbd.addRange(fieldNum(UserInfo,Company)).value(curext());
qbr = qbd.addRange(fieldNum(UserInfo, Enable));
qbr.value('1');
sysTableLookup.parmQuery(qry);
sysTableLookup.performFormLookup();
}
Function to copy USER ROLES
/// <summary>
/// copy roles assigned to one user to another
/// </summary>
/// <returns>
/// true; roles are copied across. false; roles failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user roles assigned to one user to another user.
/// </remarks>
private boolean copyUserRoles()
{
boolean ret = true;
SecurityRole securityRole;
SecurityUserRole securityUserRole;
SecurityUserRole securityUserRoleExist;
SecurityUserRole securityUserRoleInsert;
OMUserRoleOrganization userRoleOrganization, userRoleOrganization_Insert;
List copiedUserRoles = new List(Types::String);
ListEnumerator lEnumerator;
setPrefix(strFmt("Copy user", fromUser, toUser));
try
{
select securityRole where securityRole.AotName == 'SystemUser';
delete_from securityUserRole where securityUserRole.User == toUser && securityUserRole.SecurityRole == securityRole.RecId;
while select securityUserRole
where securityUserRole.User == fromUser
notExists join * from securityUserRoleExist
where securityUserRoleExist.SecurityRole == securityUserRole.SecurityRole
&& securityUserRoleExist.User == toUser
{
select securityRole where securityRole.RecId == securityUserRole.SecurityRole;
copiedUserRoles.addStart(securityRole.Name);
securityUserRoleInsert.initValue();
securityUserRoleInsert.SecurityRole = securityUserRole.SecurityRole;
securityUserRoleInsert.User = toUser;
securityUserRoleInsert.insert();
securityUserRoleInsert.clear();
while select userRoleOrganization
where userRoleOrganization.User == fromUser
&& userRoleOrganization.SecurityRole == securityUserRole.SecurityRole
{
userRoleOrganization_Insert.initValue();
userRoleOrganization_Insert.OMHierarchyType = userRoleOrganization.OMHierarchyType;
userRoleOrganization_Insert.OMInternalOrganization = userRoleOrganization.OMInternalOrganization;
userRoleOrganization_Insert.SecurityRole = userRoleOrganization.SecurityRole;
userRoleOrganization_Insert.SecurityRoleAssignmentRule = userRoleOrganization.SecurityRoleAssignmentRule;
userRoleOrganization_Insert.User = toUser;
userRoleOrganization_Insert.insert();
userRoleOrganization_Insert.clear();
}
}
}
catch
{
ret = false;
}
if (ret)
{
lEnumerator = copiedUserRoles.getEnumerator();
if (copiedUserRoles.empty())
info(strFmt("User %1 and %2 have already the same user role",fromUser, toUser));
while (lEnumerator.moveNext())
{
info(strFmt('%1',lEnumerator.current()));
}
}
else
error(strFmt("User Roles aborted please review list"));
return ret;
}
Function to copy USER OPTIONS
/// <summary>
/// copy options assigned to one user to another
/// </summary>
/// <returns>
/// true; options are copied across. false; options failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user's options assigned to one user to another user.
/// </remarks>
private boolean copyUserOptions()
{
boolean ret = true;
UserInfo userInfoSource;
UserInfo userInfoTarget;
SysUserInfo sysUserInfoSource;
SysUserInfo sysUserInfoTarget;
setPrefix(strFmt("Copy user options", fromUser, toUser));
try
{
select userInfoSource
where userInfoSource.id == fromUser
join sysUserInfoSource
where sysUserInfoSource.Id == userInfoSource.id;
ttsBegin;
select forUpdate userInfoTarget where userInfoTarget.id == toUser;
userInfoTarget.filterByGridOnByDefault = userInfoSource.filterByGridOnByDefault;
userInfoTarget.statuslineInfo = userInfoSource.statuslineInfo;
userInfoTarget.update();
select forUpdate sysUserInfoTarget where sysUserInfoTarget.Id == toUser;
sysUserInfoTarget.DefaultCountryRegion = sysUserInfoSource.DefaultCountryRegion;
sysUserInfoTarget.update();
ttsCommit;
}
catch
{
ret = false;
}
if (ret)
{
info(strFmt("User %1 and %2 have already the same user options ", fromUser, toUser));
}
else
error(strFmt("User Options aborted please review list "));
return ret;
}
Function to copy USER GROUPS
/// <summary>
/// copy groups assigned to one user to another
/// </summary>
/// <returns>
/// true; groups are copied across. false; groups failed to copied
/// </returns>
/// <remarks>
/// this method is used to copy user groups assigned to one user to another user.
/// </remarks>
private boolean copyUserGroups()
{
boolean ret = true;
UserGroupList userGroupList;
UserGroupList userGroupListExist;
UserGroupList userGroupListInsert;
List copiedGroups = new List(Types::String);
ListEnumerator lEnumerator;
setPrefix(strFmt("Copy user groups", fromUser, toUser));
try
{
while select userGroupList
where userGroupList.userId == fromUser
notExists join * from userGroupListExist
where userGroupListExist.groupId == userGroupList.groupId
&& userGroupListExist.userId == toUser
{
copiedGroups.addStart(userGroupList.groupId);
userGroupListInsert.initValue();
userGroupListInsert.groupId = userGroupList.groupId;
userGroupListInsert.userId = toUser;
userGroupListInsert.insert();
userGroupListInsert.clear();
}
}
catch
{
ret = false;
}
if (ret)
{
lEnumerator = copiedGroups.getEnumerator();
if (copiedGroups.empty())
info(strFmt("User %1 and %2 have already the same user Groups ",fromUser, toUser));
while (lEnumerator.moveNext())
{
info(strFmt('%1',lEnumerator.current()));
}
}
else
error(strFmt("User Groups aborted please review list "));
return ret;
}
No comments:
Post a Comment