6

I have some fields in my Sales Order Form (SalesTable) that need to be disabled if another field is set to a specific value. To do this I overrode the enter and the gotFocus methods on the form field (I did both to test it out). The code compiles and doesn't have any issues.

My issue is that neither of these overridden methods are called when I click on a field in the appropriate grid column. What would cause the enter and the gotFocus methods to not be called on a grid field?

Ben Hoffman
  • 8,149
  • 8
  • 44
  • 71
  • Did you put your code before or after the super() call? – Michael Brown Feb 15 '12 at 14:54
  • I tried both before and after. Which is the correct one to do? I assumed before. Also, my methods are deleted by the AX whenever I leave that area and go somewhere else to edit code. – Ben Hoffman Feb 15 '12 at 15:00
  • 2
    This is because `AutoDataGroup` is Yes. The group is recreated on every run. – Jan B. Kjeldsen Feb 15 '12 at 15:38
  • That makes so much more sense and your solution was what I ended up finding but your answer and comment shed a lot of light why everything was doing what it did. – Ben Hoffman Feb 15 '12 at 19:53

1 Answers1

8

Do not use the gotFocus and enter methods.

Make a datasource method to make the the change:

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

Call the method from the the active method:

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

Call the method from the datasource field (in this case the SalesType field):

public void modified()
{
    super()
    salesTable_ds.setAllowEdit()
    element.changeType(); // standard code
}
Jan B. Kjeldsen
  • 17,817
  • 5
  • 32
  • 50