Есть несколько способов, которыми вы можете go об этом.
- Учитывая, что в вашей конкатенации есть 2 поля, и любое из них может быть изменено в любой момент вы можете управлять логикой c в событии
RowUpdated
. В этом случае вам следует отфильтровать по указанным c полям, которые необходимо учитывать, чтобы предотвратить выполнение этого логика c для любого другого поля.
Например:
protected virtual void InventoryItem_RowUpdated(PXCache sender, PXRowUpdatedEventArgs e)
{
InventoryItem newRow = (InventoryItem)e.Row;
InventoryItem oldRow = (InventoryItem)e.OldRow;
if (!sender.ObjectsEqual<InventoryItem.itemType>(e.Row, e.OldRow)
|| !sender.ObjectsEqual<InventoryItem.taxCategoryID>(e.Row, e.OldRow))
{
//Add concatenation logic
sender.SetValue<InventoryItem.descr>(newRow, "NEW CONCATENATED VALUE");
}
}
Преимущество этого подхода заключается в том, что все логики c централизованы в одном месте.
В качестве альтернативного подхода вы можете использовать
FieldUpdated
события из
ItemType и
TaxCategoryID .
Независимо от выбранного варианта, в обоих полях в ASPX должно быть установлено значение CommitChanges , равное true, чтобы логики c выполнялись сразу после снятия фокуса с поля