2016-05-04 14 views

risposta

6

È possibile farlo in uno dei seguenti due modi:

  1. Impostando una proprietà VisibleExp sulla PXTabItem nella pagina ASPX
  2. Con abilitazione/disabilitazione di proprietà AllowSelect del parere che funge da DataMember della griglia che viene visualizzato su quella scheda

metodo 1 - VisibleExp In questo metodo, si d scrivere irettivamente le condizioni in base alle quali la scheda dovrebbe essere visibile nel codice ASPX dello schermo.

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

Nota che il contesto di legame è importante in quanto specifica quali DataControls dell'elemento cui si desidera accedere in VisibleExp. Anche DataControls è un insieme di valori per i campi dell'interfaccia utente, quindi è necessario specificare gli ID dei controlli (non i campi della classe di accesso ai dati).

Tuttavia, questo metodo è estremamente limitato in molti modi:

  • Il controllo condizione è limitata a controlli disponibili nell'interfaccia utente, quindi non è possibile condizione visibilità sullo stato interno del sistema .
  • A volte questo metodo richiede di includere i controlli di dati "falsi" in ASPX che verranno verificati solo in VisibleExp, ma in realtà non verranno mai visualizzati dall'utente.
  • Sembra non esserci supporto per condizioni complesse, tra cui AND/OR.
  • Ugly &quot; entità anziché virgolette normali nell'espressione - non particolarmente leggibili.

Soprattutto, se è necessario disabilitare la scheda per un determinato tipo di documento, non è possibile aggirare la codifica di una costante in VisibleExp. Si sarebbe scrivendo esplicitamente qualcosa di simile: VisibleExp = "! DataControls [" edDocumentType "] .Value = CHK"

Hard-codifica è generalmente considerato un pessimo pratica di sviluppo. Rappresenta una minaccia significativa alla manutenibilità del codice: probabilmente il codice di cui sopra sta andando a rompere qualcosa in futuro. Ad esempio se si decide di rinominare i codici documento da CHK a CHQ.

Oltre a ciò, questa soluzione non è facilmente generalizzabile a situazioni in cui improvvisamente si scopre la necessità di nascondere la scheda non solo per i controlli, ma anche per altri tipi di documenti. Ciò è dovuto alla mancanza di espressioni condizionali complesse sopra menzionate.

Metodo 2 - AllowSelect idea di questo metodo è - se si nascondono tutti i comandi dalla voce scheda, oltre Acumatica scheda nasconderà automaticamente con comandi visibili.

Consente di fare un esempio: si supponga che è necessario nascondere una scheda Applicazioni nome a seconda del tipo di documento selezionato in SO303000 (fatture):

La scheda che ci interessa ha un controllo griglia con un data membro impostato Regolazioni:

<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> 

E non che questa voce scheda ha un solo controllo - PXGrid. Nota anche la proprietà richiesta qui - RepaintOnDemand="false". Questa proprietà indica se il controllo aggiorna il contenuto degli elementi della scheda (e seleziona i dati) dopo che l'elemento diventa visibile. Sfortunatamente, impostarlo su false comporta alcune perdite di prestazioni. In particolare, la vista Regolazioni 'Seleziona sarà chiamata molto più frequentemente.

Attualmente, la scheda è "intelligente" nel modo in cui capisce che quando il relativo controllo figlio (PXGridLevel) non può eseguire una selezione sul relativo membro dati; in questo caso, la scheda si nasconde dall'interfaccia utente. Questo è il motivo per cui è possibile controllare la visibilità della scheda impostando la proprietà AllowSelect della cache che corrisponde agli adattamenti:

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

Il codice di cui sopra è scritto nella ARInvoice_RowSelected gestore del grafico, in cui ARInvoice è il primario DAC e il tipo di record anagrafici della pagina. Pertanto, ogni volta che viene selezionato ARInvoice, l'elemento della scheda diventerà visibile o invisibile a seconda del tipo di documento.

Questo metodo ha i suoi limiti troppo:

  • Si deve sempre ricordare che non è sufficiente per disattivare AllowSelect, si dovrebbe anche abilitare quando necessario. Quindi è necessario valutare questa proprietà ogni volta che viene chiamato l'evento.
  • Questo metodo non sembra funzionare senza impostare la proprietà di PXTabItem su false (vedere sopra).

Fonte: http://asiablog.acumatica.com/2016/05/hiding-tab-from-user-interface.html

Problemi correlati