2

由于同一部门内特定人员之间存在广泛的可变性,我们正在考虑将 Dynamics AX 2009 中的用户组改进为更精确和微调的分组。有了这个计划,我们的大多数用户属于 5+ 用户组的情况并不少见。

其中一部分将涉及我们将用户组 ID 的默认长度从 10 扩展到 40(根据命名约定的最佳实践),因为 10 个字符没有给我们足够的空间来充分命名每个组(再次,基于最佳实践命名约定)。

我们发现主要信息似乎是从 UserGroupInfo 表中获得的,但该表不存在于数据字典下(它在系统文档下,因此根据我的理解无法以这种方式进行更改)。我们还找到了 UserGroupName EDT,但它已经设置为 40 个字符。表单本身似乎也不限制字段的长度。我们已经讨论过直接更改 SQL 上的字段,但我的理解是,如果我们进行完全同步,它将覆盖此更改。

我们在哪里可以更改此特定设置,或者是否可以更改?

4

2 回答 2

2

用户组 ID 的大小定义为系统扩展数据类型(此处为 \System Documentation\Types\userGroupId),您不能更改任何属性,包括大小为 10 的长度。

您应该接受这一点,不要尝试使用直接 SQL 更改来伪造系统。即使你这样做了,AX 仍然会相信长度是 10。

您可以更改SysUserInfo表单以仅显示组名。groupId也可以在您的上下文中由数字序列分配。

于 2011-12-15T10:49:10.400 回答
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");
}
于 2011-12-15T20:53:35.633 回答