14 Nov 2014
Posted by: Juliano Bachesque in: X++
Olá Pessoal,
Tudo bem?
Pessoal passei por uma situação ontem ondem precisei criar um combobox no Microsoft Dynamics AX 2012 em uma tela de parâmetros porém não deveria mostrar todos os elementos do enum. Estou compartilhando com vocês caso venham a precisar.
Primeiro passo foi criar productSubtypeComboBox no classDeclaration do formulário.
public class FormRun extends ObjectRun { NumberSeqReference numberSeqReferenceProduct; boolean runExecuteDirect; TmpIdRef tmpIdRef; NumberSeqScope scope; NumberSeqApplicationModule numberSeqApplicationModule; container numberSequenceModules; SysFormEnumComboBox productSubtypeComboBox; } |
Criei o método createProductSubtypeComboBox que para definir quais elementos do enum podem ser listados no combobox .
private void createProductSubtypeComboBox() { FormRun caller; Args callerArgs; EcoResProductListPage ecoResProductListPage = EcoResProductListPage::Products; Set allowedProductSubtypes; boolean allowProductMastersOnly; boolean allowDistinctProductsOnly; caller = this.args().caller() as FormRun; callerArgs = caller ? caller.args() : null; if (callerArgs && callerArgs.parmEnumType() == enumNum(EcoResProductListPage)) { ecoResProductListPage = callerArgs.parmEnum(); } allowedProductSubtypes = new Set(Types::Enum); allowProductMastersOnly = ecoResProductListPage == EcoResProductListPage::ProductMasters; allowDistinctProductsOnly = ecoResProductListPage == EcoResProductListPage::DistinctProducts; if (allowDistinctProductsOnly) { allowedProductSubtypes.add(EcoResProductSubtype::Product); } else if (allowProductMastersOnly) { allowedProductSubtypes.add(EcoResProductSubtype::ProductMaster); } else { allowedProductSubtypes.add(EcoResProductSubtype::Product); allowedProductSubtypes.add(EcoResProductSubtype::ProductMaster); } productSubtypeComboBox = SysFormEnumComboBox::newParameters( this, element.controlId(formControlStr(EcoResProductParameters, Types_ProductSubtype)), enumNum(EcoResProductSubtype), allowedProductSubtypes); } |
O método createProductSubtypeComboBox foi adicionado ao init do formulário.
public void init() { this.numberSeqPreInit(); this.createProductSubtypeComboBox(); super(); EcoResProductParameters::find(); this.numberSeqPostInit(); } |
No método active do datasource foi adicionada uma linha para atualizar o combobox com a informação registrada no campo da tabela.
public int active() { int ret; ret = super(); productSubtypeComboBox.select(ProdImportDataStandard.ProductSubtype); return ret; } |
No método modified do controle esta sendo atualizado o campo da tabela sempre que modificado.
public boolean modified() { boolean ret; ret = super(); ProdImportDataStandard.ProductSubtype = productSubtypeComboBox.selection(); return ret; } |
Nas propriedades no combobox no formulário foi definido as seguintes propriedades:
Leave a reply