在列表页表单中添加显示方法
Add display method in a listpage form
我想在列表页表单的数据源中添加一个显示方法。我无法直接添加,因为数据源来自 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;
}
为什么不尝试在 table 方法中编写显示方法,因为在列表页中使用相同的方法?那是个不错的选择。
如果您仍然想在表单数据源级别编写显示方法,请像下面这样更改您的显示方法。
public 显示 String255 UserNames(DataSourcetablename _tableName)
{ ....
在你使用 "this" 的地方使用 _tableName。
你可以参考标准Ax 2012中的PurchEditLines表格看看
显示 ImageRes backOrder(PurchParmLine _purchParmLine).
更多展示方式click here
我有同样的要求,我们在 table TrvExpTable 中使用一个真实的物理字段,然后 table 我们在打开列表页面时填写它。
在 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,这不是使用显示方法的选项。
此致,
克里斯蒂安
我想在列表页表单的数据源中添加一个显示方法。我无法直接添加,因为数据源来自 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;
}
为什么不尝试在 table 方法中编写显示方法,因为在列表页中使用相同的方法?那是个不错的选择。 如果您仍然想在表单数据源级别编写显示方法,请像下面这样更改您的显示方法。
public 显示 String255 UserNames(DataSourcetablename _tableName) { ....
在你使用 "this" 的地方使用 _tableName。
你可以参考标准Ax 2012中的PurchEditLines表格看看 显示 ImageRes backOrder(PurchParmLine _purchParmLine).
更多展示方式click here
我有同样的要求,我们在 table TrvExpTable 中使用一个真实的物理字段,然后 table 我们在打开列表页面时填写它。
在 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,这不是使用显示方法的选项。
此致, 克里斯蒂安