Динамические поиски в Acumatica
Есть ли способ динамически создавать поиски в Acumatica? Вроде как вы можете делать с сетками, используя делегат вида. По сути, мне нужно иметь возможность выполнять некоторые вычисления над таблицей INLotSerialStatus, которая показывает количество лотов. На основании этих расчетов я хотел бы отобразить правильные лоты и обновленные количества.
До сих пор я делал это, создавая временную таблицу и ЦАП, чтобы заполнить ее откуда-то (не знаю точно, откуда это можно сделать) и использовал эту временную таблицу в качестве справочной. Я вижу всевозможные проблемы с этим, например, правильное обновление этого поиска несколькими пользователями, даже если в этой временной таблице у меня есть идентификатор пользователя и идентификатор инвентаря.
1 ответ
Концепция, идентичная делегатам представления данных, также реализована для PXCustomSelectorAttribute. Вы должны просто наследовать от PXCustomSelectorAttribute и объявить метод GetRecords(), возвращающий IEnumerable:
public class PXWeekSelectorAttribute : PXCustomSelectorAttribute
{
...
protected IEnumerable GetRecords()
{
...
var cache = _Graph.Caches[_CacheType];
var startDate = cache.GetValue(cache.Current, _startDateOrdinal);
return GetRecordsByDate((DateTime?)startDate);
}
...
public static IEnumerable GetRecordsByDate(DateTime? startDate)
{
if (startDate == null) yield break;
var date = (DateTime)startDate;
var dateWeek = PX.Data.EP.PXDateTimeInfo.GetWeekNumber(date);
var utcDate = PXTimeZoneInfo.ConvertTimeToUtc(date, LocaleInfo.GetTimeZone());
var utcDateWeek = PX.Data.EP.PXDateTimeInfo.GetWeekNumber(utcDate);
if (dateWeek != utcDateWeek)
{
if (date > utcDate)
{
yield return new EPWeek { WeekID = utcDate.Year * 100 + utcDateWeek };
yield return new EPWeek { WeekID = date.Year * 100 + dateWeek };
}
else
{
yield return new EPWeek { WeekID = date.Year * 100 + dateWeek };
yield return new EPWeek { WeekID = utcDate.Year * 100 + utcDateWeek };
}
}
else
yield return new EPWeek { WeekID = date.Year * 100 + dateWeek };
}
...
}