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:

comboboxEnum