Каскадный выпадающий список в InfoPath 2010 с SQL Server 2008 - PullRequest
0 голосов
/ 09 августа 2011

Я начинаю с некоторых из моих первых форм InfoPath.У меня есть три раскрывающихся списка (Global Function, Major Task и Subtask), которые должны запрашивать базу данных SQL и фильтровать их данные на основе выбранного значения в раскрывающемся списке перед ним.

Что я уже сделал

  1. Я уже добавил соединения данных (для каждой из таблиц и соответствующего раскрывающегося списка), которые просто запрашивают базу данныхдля всех записей в таблице.Для каждого соединения установлено «Сохранение копии данных в шаблоне формы» для автономного режима.

    Затем в свойствах раскрывающегося списка я установил Выберите в поле списка значение «Получить выбор из внешнего источника данных» и настройте поле Записи , чтобы выбрать столбцы для соответствующей комбинации таблицы / раскрывающегося списка.

    Однако, когда я добавляю фильтр к данным и пытаюсь предварительно просмотреть форму, данные в «каскадном» раскрывающемся списке никогда не меняются.Это все еще имеет ВСЕ записи.

  2. Итак, я попытался добавить новое правило для одного из каскадных выпадающих меню.Например, я создал новое правило для раскрывающегося списка Major Task и настроил его следующим образом:

    • Условие Global Function is not blank
    • Тип правила Action
    • Запустите эти действия:
    • Запрос с использованием подключения к данным: Основные задачи (который просто получает ВСЕ записи)

    Я не вижу нигде в правиле / действии для фильтрацииданные.

  3. РЕДАКТИРОВАТЬ Я только что попробовал новое соединение данных, которое имеет все три таблицы (GlobalFunctions, MajorTasks и Subtasks)это правильно настроить отношения (т.е. GlobalFunctions.Id = MajorTasks.GlobalFunction).Затем я установил источник данных выпадающих списков для этого нового соединения.Однако это тоже не фильтрует данные вообще.Их записи и значения следующие:

    • Глобальная функция:
      • Записи: /dfs:myFields/dfs:dataFields/d_1:GlobalFunctions
      • Фильтр: <None>
      • Значение:@Id
      • Отображаемое имя: @Summary
    • Основная задача:
      • Записи: /dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks
      • Фильтр: GlobalFunction = Id
      • Значение: @Id
      • Отображаемое имя: @Summary
    • Подзадача:
      • Записи: /dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks/d_1:SubTasks
      • Фильтр: MajorTask = Id
      • Значение: @Id
      • Отображаемое имя: @Summary

Ограничения

  • У меня не может быть кода (потому что он не будет работать в браузере, верно?)
  • Формадолжен иметь возможность заполняться в Интернете или на локальном компьютере (сохраненная копия на рабочей станции)
  • Должен работать, когда нет соединения с базой данных SQL

Вопрос

Как реализовать несколько каскадных раскрывающихся списков в InfoPath 2010 с подключением данных кБаза данных MS SQL, которая может работать в браузере и использовать InfoPath Filler (последний из которых может не иметь подключения к базе данных).

Таблицы SQL

Вот чтотаблицы выглядят так:

CREATE TABLE GlobalFunctions (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    PRIMARY KEY (Id)
);

CREATE TABLE MajorTasks (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    GlobalFunction SMALLINT NOT NULL,
    PRIMARY KEY (Id),
    FOREIGN KEY (GlobalFunction) REFERENCES GlobalFunctions(Id)
);

CREATE TABLE SubTasks (
    Id SMALLINT NOT NULL IDENTITY(1,1),
    Summary varchar(MAX) NOT NULL UNIQUE,
    MajorTask SMALLINT NOT NULL,
    PRIMARY KEY (Id),
    FOREIGN KEY (MajorTask) REFERENCES SubTasks(Id)
);

1 Ответ

1 голос
/ 09 августа 2011

ОК, я нашел свое решение в этой статье .

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

Вот шаги, которые я предпринял, чтобы исправить мою проблему (воспроизведенную из статьи на случай, если она исчезнет):

  1. Щелкните правой кнопкой мыши первый раскрывающийся список и выберите « Свойства раскрывающегося списка » и настройте соответствующий источник данных.
  2. Щелкните правой кнопкой мыши следующий раскрывающийся список для каскадирования и выберите « Свойства раскрывающегося списка ».
  3. Настройте источник данных соответствующим образом.
  4. По-прежнему во втором раскрывающемся списке нажмите кнопку « Выбрать XPath » рядом с полем «Записи».
  5. Нажмите « Фильтр данных », затем «Добавить».
  6. В первом раскрывающемся списке выберите « Выберите поле или группу ... ».
  7. В раскрывающемся списке « Источник данных » выберите « Main ».
  8. Выберите поле « Global Function », первое в выпадающем ряду (может быть под « myFields », затем « dataFields »).
  9. Установите свой оператор равенства в раскрывающемся списке посередине.
  10. В последнем выпадающем списке выберите « Выберите поле или группу ... ».
  11. Не изменяя источник данных, в MajorTasks выберите :GlobalFunction (отношение FK к таблице глобальных функций).
  12. ОК из всех диалоговых окон и повторите для раскрывающегося списка Подзадача (последний в серии)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...