Правила обмена между JavaScript и SQL - PullRequest
3 голосов
/ 27 сентября 2010

Я в основном ищу идеи здесь.Вероятность того, что моя группа купит что-то для решения проблемы, невероятно мала, но давайте предложим любые коммерческие продукты, которые могут помочь.

Основная проблема связана со следующим сценарием:

  1. Пользователи вводят данные в форму, которая автоматически заполняет некоторые значения на основе существующих данных.
  2. Эти данные сохраняются и все отлично.
  3. Отчет генерируется и синхронизируется ссохраненные данные.
  4. Содержимое базы данных, определяющее автоматически заполненные значения, теперь изменяется.
  5. При открытии формы автоматически заполненные значения изменяются.
  6. БезПри сохранении значения отчета также должны быть обновлены, но это не так.

Прочие сведения:

  • Наше решение для отчетности требует, чтобы ответы и оценки правил были всеиз хранимых процедур или запросов в базе данных Oracle.
  • Форма запускается в браузере.
  • На основании автоматически заполненных значений некоторые части формы / отчета будут видимыми или невидимыми.

Вопрос: Как я могу реализовать набор правил (хранящихся в базе данных) таким образом, чтобы я мог легко оценить их как из JavaScript, так и из SQL?

Правило может выглядеть следующим образом:

  • Если на вопрос 1 ответ «Да», скрыть вопросы 2 - 10.
  • Если на вопрос 3 ответить «»Нет », автоматически ответьте« X »на Вопрос 4.
  • Если Вопрос 1 -« Да », а Вопрос 3 -« Нет », а Вопрос 4 -« Да », запустите метод« что угодно ».

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

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

Обновление / Модификация

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

Есть какие-нибудь предложения для этого?

Ответы [ 5 ]

1 голос
/ 27 сентября 2010

Используйте JSON.

Определите ваши правила в файле JSON - это может выглядеть примерно так:

[
    {
        name: "my_first_rule",
        validation: {
            common: ["required", "[0-9]+"]
            // If you had rules that needed different implementations in .NET
            // vs. Javascript you could set those up as separate attributes here
            // i.e. js: ["some_complex_regex_or_fuction_call"],
            //      net: ["which_needs_to_be_different_in_.NET"]
        },
    {
        name: "my_second_rule",
        validation: {
            common: ["required", "\w+"]
        }
    }
]

Разобрать эти правила и использовать их для управления как интерфейсным JavaScriptи внутренние .aspx файлы (или хранимые процедуры - в зависимости от того, что имеет смысл с вашими настройками.)

Если вы хотите избежать не только написания двух наборов правил , но и двух наборовиз правил-интерпретаторов затем можно использовать Node.js или делать вызовы во встроенный интерпретатор JScript (или в автономную среду Rhino / Spidermonkey) - это, вероятно, путь (переключение на Silverlight на стороне клиентаи запись всей вашей проверки в .NET может быть другим способом - если у вас есть пользователи на модемах 56K, они могут не поблагодарить вас за этот выбор.)

0 голосов
/ 28 сентября 2010

Что ж, я закончил тем, что написал несколько простых "парсеров" для замены строк, используя синтаксис примерно так:

Condition: '{Question = "1" and Answer = "Y"} and {Question = "2" and Answer = "N"}',
Action: 'Hide',
Target: '3'

В базе данных поля «Условие», «Действие» и «Цель» представляют собой столбцы в строке, содержащие немного больше полезной информации. В javascript это будет объект JSON.

Выполнив несколько простых операций REGEXP_REPLACE в PL / SQL и Repace (/.../ g) в javascript, я могу добраться туда, где нам нужно - не тратя много времени на анализаторы. (У тестируемых объектов javascript будут свойства, соответствующие свойствам в условии, а у тестируемых строк базы данных будут одинаковые имена столбцов.)

Оказывается, что у нас действительно есть несколько переводчиков, но, сохраняя их простыми с помощью замены строк, это не большая проблема.

0 голосов
/ 27 сентября 2010

Я думаю, что вы ответили на свой вопрос в комментарии:

Я понимаю, что некоторые из наших пользователей используют старые модемы со скоростью 56 кбит / с в других странах

Если вы хотите, чтобы эти пользователи быстро реагировали и работали быстро, вы должны заранее оценить медлительность загрузки вашей логики в файл JavaScript и позволить клиенту справиться с ней. Я бы держался подальше от AJAX, потому что возвращаться к серверу с модемом 56kbps было бы неинтересно.

0 голосов
/ 27 сентября 2010

Это может быть хорошим вариантом использования для http://nodejs.org/. С Javascript на стороне сервера вам нужно только один раз разработать API в JS. Возможно, вам придется немного расширить его на сервере или клиенте, но это по крайней мере снимет часть вашего бремени.

0 голосов
/ 27 сентября 2010

Опрос базы данных каждый раз, когда пользователь вносит изменения, не так бесполезен, как вы думаете, если только вы не находитесь в очень медленной сети. Если Google Instant может выполнять поиск в Интернете каждый раз, когда вы вводите символ, я думаю, что вам удастся выполнить вызов ajax каждый раз, когда пользователь отвечает на вопрос.

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