在列表页面中添加显示方法

时间:2016-05-18 13:36:33

标签: axapta microsoft-dynamics dynamics-ax-2012-r2 aot

我想在listpage表单的数据源中添加一个display方法。我无法直接添加,因为数据源来自AOT查询。我该怎么做? 提前感谢您的帮助。 显示方法:

public display String255 UserNames()
{
    DirPartyName        partyName;
    DirPersonUser       personUser;
    DirPerson           person;
    UserInfo            userInfo;
    String255           userList = "";



    partyName = DirPersonUser::userId2Name(this.UserId);

    if(partyName)
    {
        while select Name from person
            exists join personUser
                where personUser.PersonParty == person.RecId
                    && personUser.User == this.UserId
        {
            userList += person.Name + ",";
        }
    }

    if (!partyName)
    {
        while select Name from userInfo 
            where userInfo.Id == this.UserId
        {
            userList += userInfo.name + ",";
        } 
    }
        partyName = (select firstonly Name from userInfo where userInfo.Id == this.UserId).Name;
    if (!partyName)
        userList += this.UserId + ",";

    strDel(userList,strLen(userList),1);
    return userList;
}

2 个答案:

答案 0 :(得分:0)

为什么不尝试在表格方法中编写显示方法,因为在列表页面中使用相同的方法?这是个不错的选择。 如果您仍想在表单数据源级别编写显示方法,请更改您的显示方法,如下所示。

public display String255 UserNames(DataSourcetablename _tableName) {....

在任何地方使用_tableName"这"。

您可以参考标准Ax 2012中的PurchEditLines表格并查看 显示ImageRes backOrder(PurchParmLine _purchParmLine)。

有关显示方法click here

的详细信息

答案 1 :(得分:0)

我有同样的要求,我们在表格TrvExpTable中使用了一个真实的物理字段,我们在打开列表页面时将其填入表格中。

在init()中,在表单的super()之前,您可以调用该方法:

public void updateTrvExpTableApprovers()
{
    TrvExpTable             trvExpTable;
    TrvExpTrans             trvExpTrans;
    WorkflowWorkItemTable   workflowItemTable;
    String255               approversNames;
    HcmWorker               HcmWorker;
    DirPersonUser           dirPersonUser;
    Name                    name;

    ttsBegin;
    while select forUpdate trvExpTable where trvExpTable.ApprovalStatus == TrvAppStatus::Pending
    {
        approversNames = "";
        while select userId from workflowItemTable
            where workflowItemTable.RefRecId == trvExpTable.RecId &&
                  workflowItemTable.RefTableId == trvExpTable.TableId &&
                  workflowItemTable.Status == WorkflowWorkItemStatus::Pending
        {
            select firstonly hcmWorker
                join firstonly PersonParty, ValidFrom, ValidTo from dirPersonUser
                    where dirPersonUser.User == workflowItemTable.userId &&
                            hcmWorker.Person == dirPersonUser.PersonParty;
            name = HcmWorker.name();

            if (!name)
            {
                name = workflowItemTable.userId;
            }

            if(approversNames)
            {
                if (!strScan(approversNames, name, 0, 255))
                {
                    approversNames += ', ' + name;
                }
            }
            else
            {
                approversNames = name;
            }
        }

        trvExpTable.ApproversNames = approversNames;
        trvExpTable.update();
    }

    update_recordSet trvExpTable
        setting ApproversNames = ""
        where trvExpTable.ApprovalStatus != TrvAppStatus::Pending && trvExpTable.ApproversNames != "";

    ttsCommit;
}

这不是最有效的方式,但在我们的情况下,它现在已经超过一年了。

同样,用户可以在网格中的该字段上按CTRL + G,这不是使用显示方法的选项。

最诚挚的问候, 克里斯蒂安