Добавить метод отображения в форме страницы списка
Я хочу добавить метод отображения в источник данных формы страницы списка. Я не могу добавить прямо, потому что источники данных поступают из запроса 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 ответа
У меня было такое же требование, и мы сделали это с реальным физическим полем в таблице 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 в этом поле в сетке, что невозможно при использовании методов отображения.
С наилучшими пожеланиями, Кристиан
Почему бы вам не попробовать написать метод отображения в табличном методе, как использовать то же самое на странице списка? Это хороший вариант. Если вы все еще хотите написать метод отображения на уровне источника данных формы, измените метод отображения, как показано ниже.
общедоступное отображение String255 UserNames(DataSourcetablename _tableName) { ....
Используйте _tableName везде, где вы используете "это".
Вы можете ссылаться на форму PurchaseEditLines в стандартном Ax 2012 и увидеть отображение ImageRes backOrder(PurchaseParmLine _purchParmLine).
Для более подробной информации о методе отображения нажмите здесь