Динамические поиски в 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 };
    }
    ...
}
Другие вопросы по тегам