If, on the other hand, I replace the outer join on the base query with an inner join, then the filter works correctly. Here is the code in the form part of the workspace
public class TestFormPart extends FormRun implements SysIFilterConsumerForm, SysIFilterEventHandler
{
public void registerDatasourceOnQueryingEvent()
{
PurchTableAllVersions_ds.OnQueryExecuting += eventhandler(this.parmFilterFormQueryEventHandler().applyFilter);
}
public void onFilterChanged()
{
PurchTableAllVersions_ds.executeQuery();
}
}