2016-11-10 6 views
1

Я хочу запрограммировать метод super() в Dynamics AX2012.Использование метода super

Я создал класс («A») и некоторые методы в нем. Я создаю еще один класс («B»), который распространяется из класса раньше.
В моем классе «A» есть несколько методов. Теперь в классе «В» я хочу переопределить метод. Я сделаю так. Я переопределю метод getTable().

protected SYCCarBrandTable getTable() 
{ 
    SYCCarBrandTable ret; 

    ret = super(); 
    { 
     select brandid,branddescription from ret 
     where ret.brandid == "Bentley"; 
    } 

    return ret; 
} 

Теперь мой вопрос ...

я понял, что с супер() этот новый метод действительно брал все с ней, от метода, который она простиралась от в motherclass «А».

Но как я могу добавить больше вещей методу, чтобы он дал мне Вещи из метода до и Вещи, которые я добавил в методе overriden?

+0

Не могли бы вы показать содержимое 'A.getTable'? –

ответ

0

Глядя на реализацию getTable(), похоже, что вы можете выбрать некоторую запись SYCCarBrandTable, используя значения другого SYCCarBrandTable, возвращаемого super() в качестве критериев + другие новые добавленные критерии.

Я не уверен, почему вы хотели бы сделать такое, но если вы выполняете инструкцию select по той же переменной таблицы, вы на самом деле действительно переопределяете все поведение, а не добавляете что-либо.

Если бы я получил это право, вы можете использовать другой SYCCarBrandTable:

protected SYCCarBrandTable getTable() 
{ 
    SYCCarBrandTable superCar; 
    SYCCarBrandTable ret; 

    superCar = super(); 

    select brandid,branddescription from ret 
     where ret.CriteriaA = superCar.CriteriaA 
     && ret.brandid == "Bentley"; 

    return ret; 
} 

Затем снова я не уверен, почему такая вещь будет полезно, но это один пример из способов агрегирующей функциональности, а не полностью ее отменять.

0

Если вы хотите добавить дополнительную критику к выбору, вы должны использовать объект запроса и создать свой выбор. Затем вы должны создать новый метод в вашем базовом классе, который называется чем-то вроде modifieQuery() или setQueryRange(). В этом методе вы добавляете диапазон к вашему запросу, как вы хотите для базового класса. Когда вы переопределяете этот метод в своем классе «B», вы вызываете супер и добавляете дополнительные диапазоны или просто переопределяете метод без super() и просто устанавливаете диапазоны по мере необходимости. В методе getTable в базовом классе вы вызываете modifieQuery() и выполняете его.