Выбор алгоритма заполнения для Win32 шаблона
Автор Nikolay Ilin, Last modified by Nikolay Ilin на 11 марта 2016 03:11 PM

Выбор алгоритма заполнения при создании шаблона.

В шаблонизаторе существует два алгоритма заполнения: на основе SetText  и эмуляция ввода.

На основе SetText - данный алгоритм заполнения основан на стандартном методе контролов SetText. Основным требованием для использования данного метода является поддержка метода SetText контролами на форме. Самым простым способом проверить поддерживает ли  контрол метод заполнения SetText служит создание шаблона с данным методом заполнения и проверка его на тестовом стенде.

По умолчанию шаблонизатор создаёт команды с типом команды type="ctFillCtrl". Данный тип команд требует описания контрола, который необходимо заполнить в команде.

Пример алгоритма:

<fillingAlgorithm>
              <command type="ctFillCtrl">
                <description>Ввести имя пользователя</description>
                <dataFillCtrl fillingType="cftSetText" clearCtrlText="1">
                  <ctrl className="Edit" ctrlId="1001" enabled="1" visible="1">
                    <position x="159" y="15"/>
                    <size cx="189" cy="23"/>
                  </ctrl>
                  <fieldValueInfo field="ffUserName"/>
                </dataFillCtrl>
              </command>
              <command type="ctFillCtrl">
                <description>Ввести пароль</description>
                <dataFillCtrl fillingType="cftSetText" clearCtrlText="1">
                  <ctrl className="Edit" ctrlId="1002" enabled="1" visible="1">
                    <position x="159" y="76"/>
                    <size cx="189" cy="23"/>
                  </ctrl>
                  <fieldValueInfo field="ffPassword"/>
                </dataFillCtrl>
              </command>
              <command type="ctFillCtrl">
                <description>Нажать на OK</description>
                <dataFillCtrl fillingType="cftClickButton" clearCtrlText="1">
                  <ctrl className="Edit" ctrlId="1005" enabled="1" visible="1">
                    <position x="0" y="125"/>
                    <size cx="159" cy="23"/>
                  </ctrl>
                  <fieldValueInfo field="ffNoData"/>
                </dataFillCtrl>
              </command>
</fillingAlgorithm>

 

В примере мы видим три команды заполнения контролов. Кратко рассмотрим теги содержащиеся в описании команд:

  • description - словесное описание команды, необходимо для упрощения редактирования шаблона и отображается в сообщения об ошибке, облегчая отладку шаблона.   

  • dataFillCtrl - содержит данные целевого контрола формы.

  • fillingType - код алгоритма заполнения.

  • clearCtrlText - флаг очистки контрола перед заполнением. Если 1 – текст контрола будет очищен, если 0 – к тексту контрола добавится текст заполнения. Работает только для кода алгоритма заполнения cftSetText

  • ctrl - содержит параметры целевого контрола - в ходе выполнения данной команды SSO Agent будет искать на форме контрол, соответствующий данному описанию. Если ни один контрол не будет найден, то произойдет ошибка заполнения. Данный тип команды подходит для тех контролов, которые могут быть точно описаны в шаблоне (описание которых не совпадает с описание любого другого контрола на форме).

  • fieldValueInfo::field - код значения для заполнения поля формы (например field="ffUserName" - значение имени пользователя)

 

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

Пример команды:

              <command type="ctFillCurrentCtrl">
                <description>Ввести имя пользователя</description>
                <dataFillCurrentCtrl clearCtrlText="1" fillingType="cftSetText">
                  <fieldValueInfo field="ffUserName"/>
                </dataFillCurrentCtrl>
</command>



Если метод SetText не работает в целевой форме, то необходимо использовать эмуляцию ввода. Данный способ использует эмуляцию нажатия и отпускания клавиш клавиатуры. Команды данного алгоритма обладают типомctFillCurrentCtrl, т.е. заполняют только контрол, находящийся в фокусе.

Пример алгоритма заполнения:
               
           

            <fillingAlgorithm>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctPosition">
                <description>Перейти на контрол имени пользователя</description>
                <dataPosition waitIntervalMs="50">
                  <ctrl className="Edit" ctrlId="1001" enabled="1" visible="1">
                    <position x="159" y="15"/>
                    <size cx="189" cy="23"/>
                  </ctrl>
                </dataPosition>
              </command>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctFillCurrentCtrl">
                <description>Ввести имя пользователя</description>
                <dataFillCurrentCtrl clearCtrlText="1">
                  <fieldValueInfo field="ffUserName"/>
                </dataFillCurrentCtrl>
              </command>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctControl">
                <description>Перейти на следующий контрол</description>
                <dataControl type="cctTab" waitIntervalMs="50"/>
              </command>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctFillCurrentCtrl">
                <description>Ввести пароль</description>
                <dataFillCurrentCtrl clearCtrlText="1">
                  <fieldValueInfo field="ffPassword"/>
                </dataFillCurrentCtrl>
              </command>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctControl">
                <description>Перейти на следующий контрол</description>
                <dataControl type="cctTab" waitIntervalMs="50"/>
              </command>
              <command type="ctWait">
                <description>Подождать</description>
                <dataWait periodMs="50"/>
              </command>
              <command type="ctControl">
                <description>Нажать на OK</description>
                <dataControl type="cctEnter" waitIntervalMs="50"/>
              </command>
            </fillingAlgorithm>

В данном примере мы видим последовательность команд среди которых:
           

  • команда с параметром type="ctWait" добавляет паузу в алгоритм заполнения. Паузы позволяют избежать ошибок при переходе между полями и заполнением контролов. Параметр periodMs определяет продолжительность паузы в миллисекундах.

  • команда с параметром type="ctPosition" - переводит фокус на конкретный контрол, параметры которого описаны в команде. Шаблонизатор в данной команде использует описание контрола, указанного как поле имени пользователя.

  • команда с параметром type="ctControl" осуществляет перевод фокуса. Перевод осуществяется за счет  эмуляции нажатия клавиши Tab.

Замечание: команды паузы и перевода контрола можно добавлять в алгоритм заполнения методом SetText по необходимости.

(0 голос(а))
Эта статья полезна
Эта статья бесполезна

Комментарии (0)
Добавить новый комментарий
 
 
Полное имя:
Email:
Комментарии: