У меня есть сетка данных, которую можно редактировать, и пользователь может добавить запись. Пользователь может редактировать только одно свойство - тип записи и все остальные свойства - код устанавливает. Мне нужно предотвратить дублирование и выбросить исключение свойства, но я не могу удалить эту ошибку впоследствии. Моя проверка поднята в выбранной строке:
public virtual void MPEmployeeTerminationItem_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
Метод проверки:
private bool ValidateDuplication(PXCache cache, MPEmployeeTerminationOtherItem row, int validNumberOfRecords)
{
bool isValid = OtherTerminationPayments.Select().FirstTableItems.Count(r => r.PaymentType == row.PaymentType) <= validNumberOfRecords && this.IsValidWeeklySalary;
if (!isValid)
{
cache.RaiseExceptionHandling(typeof(MPEmployeeTerminationOtherItem.paymentType).Name, row, row.PaymentType,
new PXSetPropertyException(PXMessages.LocalizeFormat($"Duplication payment type ({row.PaymentType}) is not allowed.")) );
}
else
{
foreach (var item in OtherTerminationPayments.Select().FirstTableItems)
{
cache.RaiseExceptionHandling(typeof(MPEmployeeTerminationOtherItem.paymentType).Name, item, item.PaymentType, null);
}
}
Save.SetEnabled(isValid);
SaveClose.SetEnabled(isValid);
return isValid;
}
Проверка происходит
I может очистить проверку, когда я изменяю тип второй записи: Но она не очищает проверку, когда я изменяю тип записи для первой записи: Отладка показывает, что запись действительна, и строка, которая должна устранить ошибку:
cache.RaiseExceptionHandling(typeof(MPEmployeeTerminationOtherItem.paymentType).Name, item, item.PaymentType, null);
запускается последней, однако проверка по-прежнему выглядит так, как на скриншоте :: Может быть, мне нужно запустить проверку в другом обработчике событий, или мой код проверки неверен?
Предложение с
PXUIFieldAttribute.SetError<MPEmployeeTerminationOtherItem.paymentType>(cache, sameRow, isError ? "Error message" : null);
Мой код:
public virtual void MPEmployeeTerminationOtherItem_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
var row = e.Row as MPEmployeeTerminationOtherItem;
if (row == null) return;
HandleOtherTerminationItemRowFields(cache, row);
PXUIFieldAttribute.SetEnabled<MPEmployeeTerminationOtherItem.overrideAmount>(cache, row, row.IsOverride == true);
bool isNotDuplicated = ValidateDuplicationOtherTermination(row);
bool isPaymentTypeValid = ValidateOtherPaymentPaymentType(row);
PXUIFieldAttribute.SetError<MPEmployeeTerminationOtherItem.paymentType>(cache, row, isNotDuplicated && isPaymentTypeValid ?
null : "Duplicated or empty Payment Type is not allowed.");
Save.SetEnabled(isNotDuplicated && isPaymentTypeValid);
SaveClose.SetEnabled(isNotDuplicated && isPaymentTypeValid);
}
Не действительно работает, потому что эта ошибка проверки удаляет значение из Типа платежа следующим образом:
, тогда как отладчик показывает мне значение Типа платежа как предыдущее. В результате у меня есть исключение проверки: Тип платежа не установлен через интерфейс, но он существует в кеше. Можем ли мы предотвратить сброс этого типа платежа во время проверки?
Буду признателен за любую помощь или совет.