I forgot about this until a coworker just ran into the same issue, coincidentailly again with InventNonConformanceTable. What I ended up doing was to register the event handlers at runtime when the form got initialized, the code looks something like this:
class InventNonConformanceTableFormHandler
{
/// <summary>
/// Registers event handlers at runtime to add lookups.
/// The event handlers have to be added at runtime due to build issues when calling formControlStr on new controls added to existing field groups
/// </summary>
/// <param name="sender">The sender</param>
/// <param name="e">The event args</param>
[FormEventHandler(formStr(InventNonConformanceTable), FormEventType::Initialized),
SuppressBPWarning('BPParameterNotUsed', 'Parameter required by the event interface')]
public static void InventNonConformanceTable_OnInitialized(xFormRun sender, FormEventArgs e)
{
//str extensionFieldCtrlStr = formControlStr(InventNonConformanceTable, ExtensionField);
str extensionFieldCtrlStr = 'ExtensionField';
FormRun formRun = sender;
FormDesign design = formRun.design();
FormStringControl extensionFieldCtrl = design.controlName(extensionFieldCtrlStr);
extensionFieldCtrl.OnLookup += eventhandler(InventNonConformanceTableFormHandler::ExtensionField_OnLookup);
}
// [FormControlEventHandler(formControlStr(InventNonConformanceTable, ExtensionField), FormControlEventType::Lookup)]
public static void ExtensionField_OnLookup(FormControl sender, FormControlEventArgs e)
{
// Lookup code goes here
// Cancel the super call so the system doesn't try and open multiple lookup forms
FormControlCancelableSuperEventArgs cancelableSuperEventArgs = e;
cancelableSuperEventArgs.CancelSuperCall();
}
}