由于同一部门内特定人员之间的差异很大,我们正在考虑将Dynamics AX 2009中的用户组细化为更精确和精细的分组。通过这个计划,我们的大多数用户使用5个以上的用户群并不罕见。
部分原因是我们将用户组ID的默认长度从10扩展到40(根据命名约定的最佳实践),因为10个字符没有给我们足够的空间来充分命名每个组,因为我们希望(再次,基于最佳实践命名约定)。
我们发现主要信息似乎是从UserGroupInfo表中获得的,但是该表并不存在于数据字典下(它位于系统文档下,因此根据我的理解不可能以这种方式进行更改)。我们还找到了UserGroupName EDT,但已经设置为40个字符。表单本身似乎也不限制字段的长度。我们已经讨论过直接更改SQL上的字段,但我的理解是,如果我们进行完全同步,它将覆盖此更改。
我们可以在哪里更改此特定设置,还是可以更改?
答案 0 :(得分:2)
用户组ID的大小定义为系统扩展数据类型(此处为\ System Documentation \ Types \ userGroupId),您无法更改任何属性,包括10长度。
你应该忍受这一点,不要试图使用直接的SQL更改伪造系统。即使你这样做,AX仍然认为长度为10。
您可以更改SysUserInfo
表单以仅显示组名称。 groupId
也可能由您的上下文中的数字序列分配。
答案 1 :(得分:1)
我写了一个工作来通过X ++更改字符串大小,它适用于EDT,但它似乎找不到“userGroupId”。从我得到的AX的一般感觉,我愿意猜测他们只是在不同的位置,但也许不是。我想知道这是否可以调整工作:
static void Job9(Args _args)
{
#AOT
TreeNode treeNode;
Struct propertiesExt;
Map mapNewPropertyValues;
void setTreeNodePropertyExt(
Struct _propertiesExt,
Map _newProperties
)
{
Counter propertiesCount;
Array propertyInfoArray;
Struct propertyInfo;
str propertyValue;
int i;
;
_newProperties.insert('IsDefault', '0');
propertiesCount = _propertiesExt.value('Entries');
propertyInfoArray = _propertiesExt.value('PropertyInfo');
for (i = 1; i <= propertiesCount; i++)
{
propertyInfo = propertyInfoArray.value(i);
if (_newProperties.exists(propertyInfo.value('Name')))
{
propertyValue = _newProperties.lookup(propertyInfo.value('Name'));
propertyInfo.value('Value', propertyValue);
}
}
}
;
treeNode = TreeNode::findNode(#ExtendedDataTypesPath);
// This doesn't seem to be able to find the system type
//treeNode = treeNode.AOTfindChild('userGroupId');
treeNode = treeNode.AOTfindChild('AccountCategory');
propertiesExt = treeNode.AOTgetPropertiesExt();
mapNewPropertyValues = new Map(Types::String, Types::String);
mapNewPropertyValues.insert('StringSize', '30');
setTreeNodePropertyExt(propertiesExt, mapNewPropertyValues);
treeNode.AOTsetPropertiesExt(propertiesExt);
treeNode.AOTsave();
info("Done");
}