Значения свойств, объявленные в атрибуте DA C, не являются динамическими c, поскольку они должны быть постоянными значениями. NET Компиляторами Framework. Чтобы изменить маску во время выполнения, вы должны исследовать свойство ReturnState
событий CacheAttached
и FieldSelecting
.
На странице Source Code
(SM204570) вы можете найти OrderSiteSelectorAttribute
, который реализует динамическую маску c, используя эти методы.
Другие примеры, поставляемые в исходном коде продукта, могут быть более полезны для вашего случая использования, поэтому вы также можете выполнить широкий поиск для ReturnState
. Вот соответствующий код, показанный на снимке экрана выше:
public override void CacheAttached(PXCache sender)
{
base.CacheAttached(sender);
PXDimensionAttribute attr = new PXDimensionAttribute(SiteAttribute.DimensionName);
attr.CacheAttached(sender);
attr.FieldName = _FieldName;
PXFieldSelectingEventArgs e = new PXFieldSelectingEventArgs(null, null, true, false);
attr.FieldSelecting(sender, e);
_InputMask = ((PXSegmentedState)e.ReturnState).InputMask;
}
public override void SubstituteKeyFieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
{
base.SubstituteKeyFieldSelecting(sender, e);
if (_AttributeLevel == PXAttributeLevel.Item || e.IsAltered)
{
e.ReturnState = PXStringState.CreateInstance(e.ReturnState, null, null, null, null, null, _InputMask, null, null, null, null);
}
}
РЕДАКТИРОВАТЬ:
Из соответствующего события DA C RowSelected
, попробуйте вызвать SetInputMask
метод. Если это дает ожидаемые результаты, это самый простой способ получить динамическую c маску ввода:
PXStringAttribute.SetInputMask<DAC.field>(sender, inputMaskValue);