Передать параметры динамического фильтра в запросе на мыло - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть запрос мыла, возвращающий массив объектов User. Теперь я хочу добавить параметры фильтра, например userName, например, 'har' и / или numberOfLogins, от 10 до 20. На основе этих параметров я строю запрос и получаю результаты. Но проблема в том, что я не могу передать это динамическое число параметров фильтра в запросе SOAP. Как я могу это сделать? Я попытался использовать Map, чтобы иметь имя и значение фильтра, но это не сработало. Также пробовал Array, но тогда я не смог решить, что мне делать с фильтром.


Мы показываем эту форму на нашем сайте. В котором все поля являются необязательными, поэтому пользователь может вводить значения либо во все, либо в некоторые из них. Я хочу получить значения, введенные пользователем в форме только для тех полей, которые заполнены значениями и не нуждаются в других параметрах в запросе . Так что здесь * количество параметров не фиксировано *. Поэтому, не зная количества параметров, я не могу определить параметры метода для такого случая. Какой вид аргумента я должен принять для этого. Я не могу принять массив строк в аргументах, так как мне также нужно знать имя поля (в котором пользователь ввел значение) с его значением. Я пытался использовать Map в качестве аргумента, но не сработало.

1 Ответ

0 голосов
/ 07 декабря 2011

Я думаю, что вам нужен способ описать запрос для фильтрации объектов User.

Для этого вам нужно создать собственный тип, и внутри него определить правила:

<xs:complexType name="query">
  <xs:sequence>
    .... equals rule ....
    .... between rule ....
    ....
  </xs:sequence>
</xs:complexType>

Вам понадобится также имя поля, значение / значения для поля.как операция, которая применяется к нему (имя пользователя <equals> что-то, количество логинов <between> что-то и что-то еще и т. д.).

Таким образом, запрос будет выглядеть примерно так:

<query>
  <equals>
    <field>username</field>
    <value>John Doe</value>
  </equals>
  ....
  <between>
    <field>logins</field>
    <startValue>10</startValue>
    <endValue>20</endValue>
  </between>
</query>

Из того, что вы описываете, простой случай заключается в "И" всех этих условиях, чтобы получить ваш фильтр.Но кроме того, у вас могут быть комбинации «ИЛИ», «НЕ» и т. Д.

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

Взгляните на схему запросаЯзык разметки для совместной работы (CAML) для вдохновения.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...