Как добавить новое поле фильтра на экран «Запустить распределение по проектам» - PullRequest
0 голосов
/ 08 октября 2019

Я настраиваю экран «Выполнить выделения по проектам», чтобы добавить другое поле в раздел заголовка / фильтра и использовать его для фильтрации данных сетки. Мне удалось добавить поле PXString для «статуса», используя поле «Статус проекта» в качестве шаблона:

public class AllocationFilterExt : PXCacheExtension<AllocationFilter>
{
    #region UsrStatus
    [PXString(1, IsFixed = true)]
    [ProjectStatus.List()]
    [PXDefault(ProjectStatus.Active)]
    [PXUIField(DisplayName = "Status", Required = true, Visibility = PXUIVisibility.SelectorVisible)]
    public virtual string UsrStatus { get; set; }
    public abstract class usrStatus : IBqlField { }
    #endregion
}

Затем я добавляю это поле в определение представления «Элементы», расширяя BLC. следующим образом (показывая добавленную строку, отделенную от блока в середине):

public class AllocationProcessByProjectExt : PXGraphExtension<AllocationProcessByProject>
{
    public PXCancel<AllocationFilter> Cancel;
    public PXFilter<AllocationFilter> Filter;
    public PXFilteredProcessingJoin<PMProject, AllocationFilter, LeftJoin<Customer, On<Customer.bAccountID, Equal<PMProject.customerID>>>,
            Where2<Where<Current<AllocationFilter.allocationID>, IsNull, Or<PMProject.allocationID, Equal<Current<AllocationFilter.allocationID>>>>,
                    And2<Where<Current<AllocationFilter.projectID>, IsNull, Or<PMProject.contractID, Equal<Current<AllocationFilter.projectID>>>>,
                    And2<Where<Current<AllocationFilter.customerID>, IsNull, Or<PMProject.customerID, Equal<Current<AllocationFilter.customerID>>>>,

                    **And2<Where<Current<AllocationFilterExt.usrStatus>, IsNull, Or<PMProject.status, Equal<Current<AllocationFilterExt.usrStatus>>>>,**

                    And2<Where<Current<AllocationFilter.customerClassID>, IsNull, Or<Customer.customerClassID, Equal<Current<AllocationFilter.customerClassID>>>>,
                    And2<Where<Current<AllocationFilter.customerClassID>, IsNull, Or<Customer.customerClassID, Equal<Current<AllocationFilter.customerClassID>>>>,
                    And2<Match<Current<AccessInfo.userName>>,
                    And<PMProject.nonProject, Equal<False>,
                    And<PMProject.isTemplate, Equal<False>,
                    And<PMProject.baseType, Equal<PMProject.ProjectBaseType>>>>>>
                    >>>>>> Items;

Это прекрасно работает для фильтрации сетки, пока я не попытаюсь фактически обработать выбранные (проверенные) строки, после чего я получаюследующая ошибка. Я не могу понять, что его вызывает / чего не хватает:

enter image description here

Есть мысли о том, почему это может произойти? Нужно ли что-то добавлять в бизнес-логику для использования поля «Пользователь»?

Большое спасибо ...

1 Ответ

0 голосов
/ 09 октября 2019

На странице aspx убедитесь, что для CommitChanges установлено значение true.

using PX.Objects.PM;
using static PX.Objects.PM.AllocationProcessByProject;
namespace ExampleDB.DAC
{
public sealed class AllocationFilterExt : PXCacheExtension<AllocationFilter>
{
    #region UsrStatus
    [PXString(1, IsFixed = true)]
    [ProjectStatus.List()]
    [PXDefault(ProjectStatus.Active, PersistingCheck = PXPersistingCheck.Nothing)]
    [PXUIField(DisplayName = "Status", Required = true, Visibility = PXUIVisibility.SelectorVisible)]
    public string UsrStatus { get; set; }
    public abstract class usrStatus : IBqlField { }
    #endregion
}
}  

В расширении графика

using ExampleDB.DAC;
using PX.Data;
using PX.Objects.CT;
using PX.Objects.PM;
namespace ExampleDB
{
public class AllocationProcessByProjectExt : PXGraphExtension<AllocationProcessByProject>
{
    public PXFilteredProcessingJoin<PMProject, AllocationProcessByProject.AllocationFilter, LeftJoin<AllocationProcessByProject.Customer, On<AllocationProcessByProject.Customer.bAccountID, Equal<PMProject.customerID>>>
        , Where2<Where<Current<AllocationProcessByProject.AllocationFilter.allocationID>, IsNull, Or<PMProject.allocationID, Equal<Current<AllocationProcessByProject.AllocationFilter.allocationID>>>>
            , And2<Where<Current<AllocationProcessByProject.AllocationFilter.projectID>, IsNull, Or<PMProject.contractID, Equal<Current<AllocationProcessByProject.AllocationFilter.projectID>>>>
                ,And2<Where<Current<AllocationFilterExt.usrStatus>, IsNull, Or<PMProject.status, Equal<Current<AllocationFilterExt.usrStatus>>>>
                , And2<Where<Current<AllocationProcessByProject.AllocationFilter.customerID>, IsNull, Or<PMProject.customerID, Equal<Current<AllocationProcessByProject.AllocationFilter.customerID>>>>
                    , And2<Where<Current<AllocationProcessByProject.AllocationFilter.customerClassID>, IsNull, Or<AllocationProcessByProject.Customer.customerClassID, Equal<Current<AllocationProcessByProject.AllocationFilter.customerClassID>>>>
                        , And2<Where<Current<AllocationProcessByProject.AllocationFilter.customerClassID>, IsNull, Or<AllocationProcessByProject.Customer.customerClassID, Equal<Current<AllocationProcessByProject.AllocationFilter.customerClassID>>>>
                            , And2<Match<Current<AccessInfo.userName>>, And<PMProject.nonProject, Equal<False>, And<PMProject.baseType, Equal<CTPRType.project>>>>>>>>>>> Items;
}
}
...