Как установить значение по умолчанию в сетке? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть элемент управления селектором, и я хочу установить значение по умолчанию, когда пользователь нажимает кнопку «+», я пробовал событие по умолчанию для полей, CacheAttached и RowInserted, но ни один из них не работает.

Ниже приведен код для справки.

//Cache Attached
[PXDBString(4, IsFixed = true, IsKey = true, InputMask = "####")]
[PXDefault(typeof(Search<AMShiftMst.shiftID, Where<AMShiftMst.shiftID, Equal<AMShiftID>>>), PersistingCheck = PXPersistingCheck.Nothing)]
[PXSelector(typeof(Search<AMShiftMst.shiftID>))]
[PXUIField(DisplayName = "Shift")]
protected virtual void AMShift_ShiftID_CacheAttached(PXCache sender)
{

}

//RowInserted
protected virtual void AMShift_RowInserted(PXCache sender, PXRowInsertedEventArgs e, PXRowInserted InvokeBaseHandler)
{
    if (InvokeBaseHandler != null)
        InvokeBaseHandler(sender, e);

    AMShift row = e.Row as AMShift;

    if (row == null)
        return;

    row.ShiftID = "1";            
}

//Defaulting Event
protected virtual void AMShift_ShiftID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
{
    AMShift doc = e.Row as AMShift;

    if (doc != null)
    {
        AMShiftMst AMShiftMstData = PXSelectReadonly<AMShiftMst, Where<AMShiftMst.shiftID, Equal<Required<AMShiftMst.shiftID>>>>.Select(Base, "1");

        if (AMShiftMstData != null)
        {
            e.NewValue = AMShiftMstData.ShiftID;
        }
    }
}

1 Ответ

0 голосов
/ 06 июля 2018

По умолчанию, как вы их работаете, однако они требуют, чтобы пользователь сначала вошел в новую строку. На этом графике пользователю потребуется как минимум заполнить одно значение поля, чтобы получить значения по умолчанию для запуска.

Я обновил свой код по сравнению с моим предыдущим ответом, добавив в него автоматическую вставку строки, которая затем с использованием ваших значений по умолчанию автоматически установит значения. Обратите внимание, что вы также можете переместить глобальные вызовы SetVisible в Initialize, как я показал ниже.

public class MyGraphExtensionTest : PXGraphExtension<WCMaint>
{
    public override void Initialize()
    {
        base.Initialize();

        PXUIFieldAttribute.SetVisible<AMShift.crewSize>(Base.WCShifts.Cache, null, false);
        PXUIFieldAttribute.SetVisible<AMShift.machNbr>(Base.WCShifts.Cache, null, false);
        PXUIFieldAttribute.SetVisible<AMShift.shftEff>(Base.WCShifts.Cache, null, false);
    }

    protected virtual void AMWC_RowInserted(PXCache sender, PXRowInsertedEventArgs e, PXRowInserted del)
    {
        if (del != null)
        {
            del(sender, e);
        }

        var row = (AMWC) e.Row;
        if (string.IsNullOrWhiteSpace(row?.WcID) || Base.IsImport || Base.IsContractBasedAPI || Base.WCShifts.Cache.Inserted.Any_())
        {
            return;
        }

        Base.WCShifts.Insert(new AMShift
        {
            WcID = row.WcID
        });
    }

    protected virtual void AMShift_ShiftID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e, PXFieldDefaulting del)
    {
        if (del != null)
        {
            del(sender, e);
        }

        AMShift doc = e.Row as AMShift;

        if (doc != null)
        {
            AMShiftMst AMShiftMstData = PXSelect<AMShiftMst, Where<AMShiftMst.shiftID, Equal<Required<AMShiftMst.shiftID>>>>.Select(Base, "1");

            if (AMShiftMstData != null)
            {
                e.NewValue = AMShiftMstData.ShiftID;
            }
        }
    }

    protected virtual void AMShift_CalendarID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e, PXFieldDefaulting del)
    {
        if (del != null)
        {
            del(sender, e);
        }

        AMShift doc = e.Row as AMShift;

        if (doc != null)
        {
            CSCalendar CSCalendarData = PXSelect<CSCalendar, Where<CSCalendar.calendarID, Equal<Required<CSCalendar.calendarID>>>>.Select(Base, "OFFICE");

            if (CSCalendarData != null)
            {
                e.NewValue = CSCalendarData.CalendarID;
            }
        }
    }
    protected virtual void AMShift_LaborCodeID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e, PXFieldDefaulting del)
    {
        if (del != null)
        {
            del(sender, e);
        }

        AMShift doc = e.Row as AMShift;

        if (doc != null)
        {
            AMLaborCode AMLaborCodeData = PXSelect<AMLaborCode, Where<AMLaborCode.laborCodeID, Equal<Required<AMLaborCode.laborCodeID>>>>.Select(Base, "DIRECT");

            if (AMLaborCodeData != null)
            {
                e.NewValue = AMLaborCodeData.LaborCodeID;
            }
        }
    }
}
...