2016-05-04 3 views

ответ

6

Вы можете сделать это в одном из следующих двух способов:

  1. Установив свойство VisibleExp на PXTabItem в ASPX странице
  2. По включение/отключение AllowSelect свойство зрения, которое служит в качестве DataMember сетки, которая отображается на этой вкладке

метод 1 - VisibleExp В этом методе, вы d непосредственно напишите условия, при которых вкладка должна быть видимой в коде ASPX экрана.

<px:PXTabItem Text="Tax Agency Settings" BindingContext="tab" 
    VisibleExp="DataControls[&quot;chkTaxAgency&quot;].Value = 1"> 

Обратите внимание, что связывание контекста важен, так как он определяет, какой DataControls элемента вы хотите получить доступ в VisibleExp. Также DataControls - это набор значений для полей пользовательского интерфейса, поэтому вам нужно указать идентификаторы элементов управления (а не поля класса доступа к данным).

Однако этот способ крайне ограничен несколькими способами:

  • Проверка состояния ограничивается управления, доступных в пользовательском интерфейсе, так что это не возможно состояние видимости при внутреннем состоянии системы ,
  • Иногда этот метод требует, чтобы вы включили «поддельные» элементы управления данными в ASPX, который будет проверяться только в VisibleExp, но на самом деле его никогда не увидит.
  • Кажется, что нет поддержки сложных условий, включая AND/OR.
  • Ugly &quot; Объекты вместо обычных котировок в выражении - не особенно читабельны.

Самое главное, если вам нужно отключить вкладку для определенного типа документа, нет никакого способа жесткого кодирования константы в VisibleExp. Вы бы явно писать что-то вроде: VisibleExp = "! DataControls [" edDocumentType "] .Value = CHK"

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

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

Метод 2 - AllowSelect Идея этого метода - если вы скрыть все элементы управления из вкладки элемента, чем Acumatica автоматически скрыть вкладку без видимых элементов управления.

Давайте делать пример: предположим, что вам нужно, чтобы скрыть вкладку с именем приложения в зависимости от типа документа, выбранного в SO303000 (Счета-фактуры):

Вкладка, что мы заинтересованы в имеет контроль сетки с данными член установлена ​​Регулировка:

<px:PXTabItem Text="Applications" RepaintOnDemand="false"> 
    <Template> 
     <px:PXGrid ID="detgrid" DataSourceID="ds" SkinID="Details"> 
      <Levels> 
       <px:PXGridLevel DataMember="Adjustments"> 
       ............ 
       </px:PXGridLevel> 
      </Levels> 
     </px:PXGrid> 
    </Template> 
</px:PXTabItem> 

И не то, что эта вкладка элемент имеет только один элемент управления - PXGrid. Также обратите внимание на требуемое свойство здесь - RepaintOnDemand="false". Это свойство указывает, будет ли элемент обновления элемента управления обновлять содержимое элемента (и выбирать данные) после того, как элемент станет видимым. К сожалению, установка этого параметра на false приводит к определенным потерям производительности. В частности, просмотр настроек «Выбор» будет отображаться гораздо чаще.

В настоящее время вкладка «умна» в том смысле, что она понимает, что когда дочерний элемент управления (PXGridLevel) не может выполнить выбор в своем элементе данных; в этом случае вкладка скрывается от пользовательского интерфейса. Именно поэтому вы можете контролировать видимость вкладки, установив AllowSelect свойство кэша, что соответствует Регулировки:

Adjustments.Cache.AllowSelect = 
    doc.DocType != ARDocType.CashSale 
    && doc.DocType != ARDocType.CashReturn; 

Приведенный выше код записывается в ARInvoice_RowSelected обработчик графика, где ARInvoice является основным ЦАП и тип основных записей страницы. Таким образом, каждый раз, когда ARInvoice выбирается вкладка элемент становится видимым или невидимым в зависимости от типа документа.

Этот метод имеет свои ограничения тоже:

  • Вы всегда должны помнить, что это не достаточно, чтобы отключить AllowSelect, вы должны также включить его в случае необходимости. Так что вам нужно оценить это свойство каждый раз, когда событие вызывается.
  • Этот метод, кажется, не работает без установки RepaintOnDemand свойство PXTabItem к ложным (см. Выше)

Источник: http://asiablog.acumatica.com/2016/05/hiding-tab-from-user-interface.html