Как проверить несохраненную запись сетки, когда заголовок снят? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть структура заголовка / строки на экране, которая должна обеспечивать большую гибкость при вводе данных, но не позволяю удерживать запись до тех пор, пока все позиции не будут иметь идентификатор инвентаря.В момент создания записи идентификатор инвентаризации может не существовать, поэтому я не могу сделать поле идентификатора инвентаря обязательным при первоначальном вводе.

Я ожидал, что PXSelect будет извлекать любые новые записи из базы данных, но удерживатьна в настоящее время кэшированные данные из записи.Вместо этого я обнаружил, что запись новой позиции не доступна через PXSelect, пока я не сохраню запись.Это означает, что снятие флажка Удерживать игнорирует идентификатор инвентаря, который я вижу на экране, и приведенный ниже код создает исключение для «NoInventoryID».

#region MyHdr_Hold_FieldVerifying
protected virtual void _(Events.FieldVerifying<MyHdr.hold> e)
{
    if ((bool?)e.NewValue == true) return;

    MyHdr row = (MyHdr)e.Row;

    MyLine line =
    PXSelect<MyLine, Where<MyLine.hdrID, Equal<Current<MyHdr.hdrID>>>>
        .SelectSingleBound(this, new object[] { e.Row });
    if (line == null)
        throw new PXSetPropertyException(Messages.NoLines, PXErrorLevel.Warning);

    line =
    PXSelect<MyLine, Where<MyLine.hdrID, Equal<Current<MyHdr.hdrID>>, And<MyLine.inventoryID, NotEqual<Null>>>>
        .SelectSingleBound(this, new object[] { e.Row });
    if (line != null)
        throw new PXSetPropertyException(Messages.NoInventoryID, PXErrorLevel.Warning);
}
#endregion

У меня есть CommitChanges = True в поле Идентификатор инвентаря, поэтомуКажется, для проверки линий сетки при проверке поля удержания заголовка требуется специальный метод.

Как просмотреть несохраненные данные в сетке (дочерние строки заголовка), чтобы проверить, не заставляя пользователя сохранятьсначала записи?

1 Ответ

1 голос
/ 25 июня 2019

Поиск имени представления данных: enter image description here

Затем вызывается метод Select представления данных для получения записей.

Для новыхнаследование графа от PXGraph:

foreach (SOLine line in Transactions.Select())
{
}

Для наследования расширений графа от PXGraphExtension необходимо добавить префикс Base:

foreach (SOLine line in Base.Transactions.Select())
{
}

Для представлений данных, содержащих несколько ЦАП, вы можете получить к ним доступ с помощьюPXResult.

> PXSelect<DAC1, InnerJoin<DAC2>, LeftJoin<DAC3>>

foreach (PXResult<DAC1, DAC2, DAC3> results in DataView.Select())
{
    DAC1 dac1 = (DAC1)results;
    DAC2 dac2 = (DAC2)results;
    DAC3 dac3 = (DAC3)results;
}

Наконец, все данные, отображаемые на экране, должны находиться в одной из коллекций кэша.Этот также должен быть префиксом Base, если используется в контексте расширения графа:

foreach (SOLine line in Caches[typeof(SOLine)].Inserted)
{
}

foreach (SOLine line in Caches[typeof(SOLine)].Updated)
{
}
...