Каскадный раскрывающийся список в InfoPath 2010 с SQL Server 2008

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

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

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

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

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

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

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

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

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

    • Global Function:
      • Entries: /dfs:myFields/dfs:dataFields/d_1:GlobalFunctions
      • Фильтр: <None>
      • Значение: @Id
      • Отображаемое имя: @Summary
    • Major task:
      • Entries: /dfs:myFields/dfs:dataFields/d_1:GlobalFunctions/d_1:MajorTasks
      • Фильтр: GlobalFunction = Id
      • Значение: @Id
      • Отображаемое имя: @Summary
    • Subtask:
      • Entries: /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)
);

person Dirk    schedule 08.08.2011    source источник


Ответы (1)


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

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

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

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