Axapta: запретить пользователю изменять форму запроса с помощью поиска

Я создал специальную форму поиска в Axapta 3.0, в которой пользователь может выбрать OprId из источника данных ProdRoute. Перед отображением поиска устанавливается ProdId, который не может быть изменен пользователем. Пользователь может выбрать только OprId из ProdRoute производственного заказа с действительным ProdId. Согласно документации, можно запретить пользователю изменять запрос, заблокировав диапазон. Я сделал вот так:

qbrProdId.value(queryValue(_prodId));
qbrProdId.status(RangeStatus::Locked);

Здесь qbrProdId - это переменная типа QueryBuildRange, а _prodId указывает ProdId.

Когда отображается поиск, и пользователь пытается изменить фильтр, ProdId заблокирован. Хороший. Однако, когда пользователь нажимает Ctrl + F в поле ProdId поиска или если пользователь нажимает на Search на панели инструментов, можно ввести другой ProdId.

Как я могу предотвратить это?

Я подумал об изменении поля ProdId в сетке поиска на тип «Display» вместо того, чтобы быть полем источника данных. Но разве нет лучшего решения для этого?

(Кстати, запрос не создается автоматически, а создается вручную в методе "init" источника данных формы).


person pointer    schedule 23.10.2009    source источник


Ответы (2)


Хорошо, чем вы можете просто переопределить метод task (). Это должно отключить функцию фильтра в форме поиска.

public int task(int _taskId)
{
    int ret;

    switch(_taskId)
    {
        case 2855:
        case 2844:
        case 2837:
        case 799:
            return 0;
    }

    ret = super(_taskId);

    return ret;
}
person Community    schedule 02.11.2009
comment
Спасибо за ответ Велислав. Ваш подход к решению правильный. Однако единственный правильный идентификатор задачи для моей проблемы - 779, которого нет в вашем примере. Я нашел это значение с помощью отладчика. Идентификаторы задачи 2844, 2837 и 799 появляются в макросе задачи, а 779 - нет. Это меня поражает. Где же тогда это значение задокументировано? Значение 2855 также не является частью макроса Task. Получается, что есть более допустимые идентификаторы задач, чем те, которые можно найти в макросе задачи? Недостатком вашего решения является то, что все поля отключены. В итоге я использовал метод отображения для конкретного поля. - person pointer; 05.11.2009
comment
Да, я думаю, что некоторые TaskIds не включены в макрос. Я пробовал этот код на AX 4 и 5, и значение, которое у меня сработало, было 2855. К сожалению, я не знаю какой-либо документации по этому поводу. - person ; 06.11.2009

Просто используйте динамическую ссылку вместо диапазона.

HTH

person Community    schedule 27.10.2009
comment
Как указано, запрос создается вручную. Это необходимо для правильной работы метода findValue (). О диналинке не может быть и речи. - person pointer; 31.10.2009