AX2009: обрабатывать пользовательский ввод, прежде чем он перейдет в форму

Я хотел бы иметь возможность обрабатывать ввод, который отправляется на форму в AX. Есть ли способ сделать это?

И это должно быть для всего ввода с клавиатуры для формы.

Например, есть метод SysSetupFormRun.task(), в котором вы можете обнаружить ограниченное количество задач, но, как я видел и пробовал, он обрабатывает весь ввод с клавиатуры.

1 ответ

Из моего понимания у вас есть пара требований:

  1. Форма должна перенаправить любой ввод с клавиатуры в определенное поле, независимо от того, какое поле в данный момент имеет фокус.
  2. Представленная информация, основанная на поле ввода в точке #1, может или не может быть доступна пользователю для взаимодействия (например, скопировать значение поля или добавить дополнительные данные к предоставленной информации).
  3. Это перенаправление должно происходить только на определенном количестве форм, а не на каждой форме в системе.

Просто очень быстрое замечание с пунктом № 3: Будет трудно сделать то, что вы ищете, не затрагивая все формы в системе. Ввод с клавиатуры, скорее всего, будет осуществляться на уровне FormRun (базовый класс для всех форм) или выше, поэтому использование этого в конкретном экземпляре формы будет затруднено и потребует значительной осторожности, чтобы не влиять на все остальные формы в системе. Из-за этого вы должны сосредоточиться на изменении конкретной формы. Кроме того, по моему опыту, некоторые функции, глобально доступные в формах, недоступны для управления / переопределения / редактирования (например, некоторые шаги в функции экспорта в Excel), поэтому маловероятно, что вы сможете переопределить взаимодействие с клавиатурой в любой случай.

Самая большая проблема связана с определением того, какой ввод следует перенаправить, а какой - нет (например, Ctrl + C, Ctrl + X и т. Д.). Если требование № 2 не требует от пользователя возможности что-либо делать с данными, кроме чтения, то я бы предложил переопределить lostFocus метод поля ввода с кодом, который автоматически возвращает фокус на поле. Это будет выглядеть примерно так:

public void lostFocus()
{
    super();

    this.setFocus()
}

Опять же, основная проблема заключается в том, что пользователь не сможет выбрать что-либо еще в форме. Если информация только для чтения (например, сводный экран), это не должно быть проблемой.

Если пользователю действительно необходимо взаимодействовать с представленной информацией (например, для копирования описания из поля), вы, вероятно, могли бы применить аналогичную логику к этим полям, чтобы при вводе любого ввода был бы изменен фокус на поле ввода. Это может быть вызвано с textChange метод, но вы, скорее всего, пропустите часть текста во время перехода:

public void textChange()
{
    super();

    //Note: the control fieldName will need to have AutoDeclaration set to Yes
    fieldName.setFocus();
}

Если это не работает должным образом, вам может понадобиться найти элемент управления ActiveX, который должен позволить вам указать, что весь ввод идет в поле ввода, и обновить содержимое по мере необходимости. Скорее всего, он должен быть всеобъемлющим (элемент управления будет содержать элементы управления для ввода и отображения), поэтому он может выглядеть не так, как остальные AX, но должен иметь возможность делать то, что вам нужно.

Другие вопросы по тегам