Dear Rahul,
Actually, I have tried event handlers as well. But the issue is not solved. I am familiar with COC and limitations and approaches to overcome on COC limitations. My issue should be investigated in a case which I explain in my question. Here I explain it more.
I have added some custom block process to InventTestBlockProcess enum. I want to modify the lookup of the block process form control based on the order type and document type which the user selects. I have checked the InventTestAssociationTable class and find the lookupBlockProcess method. 
In this method, The code which set lookup value dynamically is :
ttsbegin;
dictEnum = new DictEnum(enumNum(InventTestBlockProcess));
for (i = 0; i < dictEnum.values(); i++)
{
if (this.isEligibleForBlockProcess(any2Enum(dictEnum.index2Value(i))))
{
addType(any2Enum(dictEnum.index2Value(i)));
}
}
ttscommit;
isEligibleForBlockProcess is the key method. If this method was not private then I would add my logic using class augmentation. However, I tried to override lookup. first I started using class augmentation and overridden the lookupBlockProcess but I faced two issues:
1) first I lose the buffer of the super inventTestblockProcesstmp table which is set on the sys lookup of the field.
2) second, the error comes because we are defining two lookups for one field (one is in the super method and the other is in my method).
I think a lot to find a solution. for example, finding the way to get form control lookup and then updating (instead of assign a new lookup).
After I disappointed, I tried another idea. I tried to override BlockProcess form control lookup by using the OnLookUp event handler. But the event handler is not going to hit. I do not know exactly the reason. Maybe this is caused because the edit method is assigned to the block process field. I do not know I just guess.
