AX 2009:调整用户组长度

时间:2011-12-14 17:46:45

标签: axapta dynamics-ax-2009 ax

由于同一部门内特定人员之间的差异很大,我们正在考虑将Dynamics AX 2009中的用户组细化为更精确和精细的分组。通过这个计划,我们的大多数用户使用5个以上的用户群并不罕见。

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

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

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

2 个答案:

答案 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");
}