2012-02-15 4 views
6

Tengo algunos campos en mi Formulario de pedido de ventas (SalesTable) que deben deshabilitarse si otro campo se establece en un valor específico. Para hacer esto, anulé los métodos enter y gotFocus en el campo del formulario (hice ambos para probarlo). El código compila y no tiene ningún problema.getFocus e ingrese métodos en el campo Formulario que no se llama

Mi problema es que ninguno de estos métodos reemplazados se invoca cuando hago clic en un campo en la columna de la cuadrícula correspondiente. ¿Qué haría que los métodos enter y getFocus no se invoquen en un campo de cuadrícula?

+0

¿Pusiste tu código antes o después de la llamada a super()? –

+0

Intenté tanto antes como después. ¿Cuál es el correcto para hacer? Supuse antes. Además, mis métodos son eliminados por el AX siempre que salgo de esa área y voy a otro lado para editar el código. –

+2

Esto es porque 'AutoDataGroup' es Sí. El grupo se recrea en cada ejecución. –

Respuesta

8

No utilice los métodos gotFocus y enter.

Hacer un método de fuente de datos para hacer el cambio:

void setAllowEdit() 
{ 
    salesTable_ds.object(fieldnum(SalesTable, Name)).allowEdit(salesTable.SalesType == SalesType::Journal); 
} 

Llame al método de la del active método:

public int active() 
{ 
    int ret = super(); 
    ... 
    this.setAllowEdit() 
    return ret; 
} 

Llame al método del campo de origen de datos (en este caso el SalesType campo):

public void modified() 
{ 
    super() 
    salesTable_ds.setAllowEdit() 
    element.changeType(); // standard code 
} 
+0

solo navegando algunas preguntas y preguntándome, ¿qué hace changeType aquí? – AnthonyBlake

+0

Eche un vistazo al método de formulario 'SalesTable.changeType()'. –

+0

Aha, por lo tanto, es específico del formulario SalesTable, está bien. Lo implementé en otro formulario y esperaba/comprobaba que no había omitido una buena práctica. – AnthonyBlake

Cuestiones relacionadas