Объявление

Свернуть
Пока нет объявлений.

OtDropDown (ComboBox) - смена текущего индекса

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • OtDropDown (ComboBox) - смена текущего индекса

    Имеется 2 DropDown-а (данные набираются из справочника) и скрипты OnChange на них, выполняющие подбор значения по-умолчанию для 3-го DropDown-а (данные аналогично из справочника). В документации не нашел как сделать текущим выделенным элементом или индексом вычисленное значение (т.е. сменить отображаемый текст в форме).

    Аналоги в других языках .SelectedIndex, .SelectedItem...

  • #2
    Re: OtDropDown (ComboBox) - смена текущего индекса

    Если вопрос о том, как программно выбрать элемент значение комбобокса (безотносительно к тому, привязан ли он к полю), то: cbo_DropDown03.Value = "Нужное значение".
    Если же вы в скрипте установили значение для соответствующего 3-му комбобоксу поля, и хотите отобразить на форме его новое значение, то: LoadField "DropDown03Alias" (где "DropDown03Alias" - алиас поля).
    С уважением, Сергей Осадчий

    Комментарий


    • #3
      Re: OtDropDown (ComboBox) - смена текущего индекса

      Сергей, я не понял ответ

      есть справочник приоритетов, в котором:
      1) ID - автоинкремент
      2) Name - текст
      3) Koef - коэффициент (используется в вычислениях) - число
      есть DropDown, связанный с данным справочником... Назовем его cbo_Priority...

      в процессе работы с формой, меняя значение других полей (на onClick), во внешней функции, у меня вычисляются Koef и Name и требуется выставить текущую позицию cbo_Priority в соответствующее вычисленным данным (как будто это пользователь выбрал эти данные).

      Как выполнить это - из Вашего примера, я не понял

      При попытке обратиться к alias - "нет такого свойства или метода", хотя в мане написано:
      Syntax Dim val As String
      val = object.Alias
      object.Alias = val

      Комментарий


      • #4
        Re: OtDropDown (ComboBox) - смена текущего индекса

        Сообщение от Konic
        в процессе работы с формой, меняя значение других полей (на onClick), во внешней функции, у меня вычисляются Koef и Name и требуется выставить текущую позицию cbo_Priority в соответствующее вычисленным данным (как будто это пользователь выбрал эти данные)
        OK, cbo_Priority - это наименование элемента экранной формы типа ComboBox, и он "привязан" ("смапирован") на поле типа Drop Down List с алиасом, например, Priority (и одно из значений этого поля имеет алиас Priority1).
        Изменения значений полей текущей записи, которые Вы делаете в скриптах, не отображаются на экранной форме сами, пока Вы не сохраните запись.
        Для этого (т.е. для отображения, как будто пользователь сам выбрал) есть метод LoadField, который новое значение поля текущей записи (ActiveRequest'а) "загрузит" в соответствующий элемент экранной формы и это отобразится на форме.
        Поэтому в том месте ваших скриптов, вызывающихся на OnClick, где Вы рассчитываете Koef и Name, на мой взгляд нужно написать что-то типа:
        Код:
        ActiveRequest.UserFields("Priority").TValue = "Priority1" ' "Priority1" - это алиас одного из значений поля Drop Down List
        LoadField "Priority"
        т.е. обновить значение поля текущей записи и связанный элемент экранной формы.
        С уважением, Сергей Осадчий

        Комментарий


        • #5
          Re: OtDropDown (ComboBox) - смена текущего индекса

          заранее извинюсь... видимо, продолжаю тупить...

          итак, есть следующее:
          1) справочник с полями и значениями (name, koef)
          Высокий, +1
          Средний, 0
          Низкий, -1
          2) есть cbo_Priority смапированный по 'name'
          3) выполнив набор действий на форме, я понимаю, значение в cbo_Priority должно стать "Высокий" (а не пустое как по-умолчанию)

          ... вот тут я завис в использовании Вашего сэмпла...

          Комментарий


          • #6
            Re: OtDropDown (ComboBox) - смена текущего индекса

            Давайте с самого начала - есть папка, в ней есть поля, которые меняются юзером на форме, и есть поле, значение которого вычислятся скриптом, и нужно его на форме отобразить.
            Дайте пожалуйста алиас и тип данных каждого из перечисленных выше полей. Заодно станет понятно, "справочник" - это у вас ссылка на другую папку или поле типа Drop Down List.
            А я напишу, как бы я эту задачу решил.
            С уважением, Сергей Осадчий

            Комментарий


            • #7
              Re: OtDropDown (ComboBox) - смена текущего индекса

              Немного не так...
              "Справочник" - да, это папки.
              Есть 3 папки и в форме 3 DropDown с привязкой к ним. На основании выбираемых в 2-х из них данных требуется в 3-м выставить вычисленное значение по-умолчанию из существующих значений.

              В 3-й папке есть значения (алиас "name")
              Низкий
              Средний
              Высокий

              В форме дефолтным значением для этого DropDown, естесственно, является "пусто" На onClick 2-х других DrpDown вычисляем значение. Допустим, это "Средний". Вот и требуется выставить это значение, как будто его оператор выставил мышкой.

              Комментарий


              • #8
                Re: OtDropDown (ComboBox) - смена текущего индекса

                Так, а в чем проблема. Если я вас правильно понял, то на основании срочности и влияния нужно выставить приоритет.
                В стандартной кофигурации все расписано.

                Функция в глобальных скриптах:
                Код:
                'Purpose: Calculates the Ticket Priority depending on Impact and Urgency based on the Matrix below
                'Params : @intImpact : Impact Rating (0-4, where 0 is highest)
                '         @intUrgency: Urgency Rating (0-4, where 0 is highest)
                'Returns: Integer value representing the Priority Level (0-4, where 0 is highest)
                
                Function GetPriority(intImpact, intUrgency)
                    If Not IsNumeric(intImpact) Or _
                                        Not IsNumeric(inturgency) Or _
                                        Not (intImpact >= 0 And intImpact < 5) Or _
                                        Not (intUrgency >= 0 And intUrgency < 5) Then
                        GetPriority = 4 'Error, set lowest Priority  
                    Else
                        
                        Dim intArray(4)
                        
                        intArray(0) = Array(0, 1, 1, 2, 2)
                        intArray(1) = Array(1, 1, 1, 2, 2)
                        intArray(2) = Array(1, 2, 2, 2, 3)
                        intArray(3) = Array(2, 2, 3, 3, 3)
                        intArray(4) = Array(2, 2, 3, 3, 4)
                        
                        GetPriority = intArray(intUrgency)(intImpact)
                
                    End If
                End Function
                Скрипт OnChange для комбобокса:
                Код:
                Priority.ListIndex = GetPriority(Impact.ListIndex, Urgency.ListIndex)

                Комментарий


                • #9
                  Re: OtDropDown (ComboBox) - смена текущего индекса

                  У меня НЕ фиксированные значения. Данные хранятся в папке и могут меняться. В папке хранится коэф. влияния на задачу и название.
                  То что Вы описали я в коде уже видел. Меня как раз не устраивает вшитое в код решение - мне надо изменяемые значения.
                  Отсюда и возник вопрос, как переместить индекс DropDown-а на позицию с неким текстом. Именно это не нашел.

                  Пример уже приводил, в DropDown-е есть 3 значения
                  Низкий
                  Средний
                  Высокий

                  КАК мне выставить текущим, к примеру, "высокий"? Из примера, понимаю как выставить индекс, спасибо, а вот как вычислить индекс элемента с заданным именем?

                  Комментарий


                  • #10
                    Re: OtDropDown (ComboBox) - смена текущего индекса

                    Сообщение от Konic
                    КАК мне выставить текущим, к примеру, "высокий"? Из примера, понимаю как выставить индекс, спасибо, а вот как вычислить индекс элемента с заданным именем?
                    Сделайте идентификатор для каждой записи справочника. Допустим, наименование (алиас поля Name) уникальное, а алиас папки справочника Folder1.
                    Когда значение справочника в скрипте определено, допустим надо установить "Средний", найдите нужную запись справочника конструкцией типа:
                    Код:
                    Set objFolder = ActiveSession.RequestFolders("Folder1")
                    Set objFilter = objFolder.MakeFilter
                    objFilter.UserField("Name") = "Средний"
                    Set objRequest = objFolder.Search(objFilter, False).Item(0) ' если больше 1, то берем 1-ю попавшуюся запись
                    Не нужно выбирать значение комбобокса на форме - присвойте теперь полю-ссылке на справочник найденное значение и обновите комбобокс на форме:
                    Код:
                    ActiveRequest.UserFields("ReferenceToFolder1").TValue = objRequest
                    LoadField "ReferenceToFolder1"
                    С уважением, Сергей Осадчий

                    Комментарий


                    • #11
                      Re: OtDropDown (ComboBox) - смена текущего индекса

                      Спасибо. Заработало.

                      Комментарий

                      Обработка...
                      X