как получить значение после сохранения записи? - PullRequest
1 голос
/ 25 марта 2020

У меня проблема после сохранения записи на экране Stock Items, она не работает так, как я хочу, чтобы она работала.

Я хочу получить объединенные значения после сохранения записи.

Я настроил поле описания для объединения значений некоторых атрибутов.

enter image description here

У меня есть весь следующий код внутри события RowPersisted, Я получаю эти данные с помощью запроса BQL:

protected void InventoryItem_RowPersisted(PXCache cache, PXRowPersistedEventArgs e, PXRowPersisted InvokeBaseHandler)
{
        string attr = "";
        string itemClassDesc = "";
        string itemClassCD = "";

        if (InvokeBaseHandler != null)
            InvokeBaseHandler(cache, e);
        var row = (InventoryItem)e.Row;

        PXResultset<InventoryItem> result =
        PXSelectJoin<InventoryItem,
            InnerJoin<CSAnswers,
                On<CSAnswers.refNoteID, Equal<InventoryItem.noteID>>,
            LeftJoin<CSAttributeDetail,
                On<CSAttributeDetail.attributeID, Equal<CSAnswers.attributeID>,
                And<CSAttributeDetail.valueID, Equal<CSAnswers.value>>>,
            InnerJoin<CSAttribute,
                On<CSAttribute.attributeID, Equal<CSAnswers.attributeID>>>>>,
        Where<InventoryItem.inventoryID, Equal<Current<InventoryItem.inventoryID>>>,
        OrderBy<Asc<CSAnswers.attributeID>>>.Select(this.Base);

        foreach (PXResult<InventoryItem, CSAnswers, CSAttributeDetail, CSAttribute> record in result)
        {
            InventoryItem inventory = (InventoryItem)record;
            CSAnswers answers = (CSAnswers)record;
            CSAttributeDetail detail = (CSAttributeDetail)record;
            CSAttribute attribute = (CSAttribute)record;

            switch (itemClassCD)
            {
                case "0531":
                if (attribute.AttributeID == "A1" || attribute.AttributeID == "A2" || attribute.AttributeID == "A3")
                    {
                        if (attribute.AttributeID == "A2")
                            attr += answers.Value + " ";
                        else
                        if (attribute.ControlType == 1)
                            attr += attribute.Description + " " + answers.Value + " ";
                        else
                            attr += attribute.Description + " " + detail.Description + " ";
                    }
                    break;

                default:

                    break;
            }
        }
        cache.SetValue<InventoryItem.descr>(row, itemClassDesc + " " + attr);
}

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

Можете ли вы помочь мне с этим? Спасибо!

1 Ответ

1 голос
/ 25 марта 2020

Событие RowPersisted наступает после сохранения элемента. Вам необходимо использовать событие RowPersisting или переопределить функцию Persist графика и запустить код перед вызовом базовой функции.

...