2009-10-23 2 views
2

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

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

Здесь qbrProdId переменная типа QueryBuildRange и _prodId определяет PRODID.

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

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

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

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

ответ

1

ОК, чем вы можете просто переопределить метод задачи(). Это должно отключить функцию filterallall в форме поиска.

public int task(int _taskId) 
{ 
    int ret; 

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

    ret = super(_taskId); 

    return ret; 
} 
+2

Спасибо за ваш ответ Велислав. Ваш подход к решению прав. Однако единственная правильная задача для моей проблемы - 779, чего нет в вашем примере. Я нашел это значение с помощью отладчика. 2836, 2837 и 799 Taskid отображаются в макросе задач, но 779 нет. Это меня поражает. Где это значение документировано? Значение 2855 также не является частью макроса Задачи. Таким образом, похоже, что существуют более достоверные задачи, чем те, которые можно найти в макросе задачи? Недостатком вашего решения является то, что все поля отключены. В итоге я использовал метод отображения для определенного поля. – pointer

+0

Да, я думаю, что некоторые из TaskIds не включены в макрос. Я пробовал этот код на AX 4 и 5, и значение, которое работало для меня, было 2855. К сожалению, я не знаю никакой документации для этого. –

0

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

НТН

+0

Как указано, запрос создается вручную. Это необходимо для правильной работы метода findValue(). О динамике не может быть и речи. – pointer

Смежные вопросы