.net javascript和SQL之间的共享规则

.net javascript和SQL之间的共享规则,.net,javascript,sql,oracle,.net,Javascript,Sql,Oracle,我主要是在这里寻找创意。我的团队购买一些东西来解决问题的几率非常低,但是请继续,并建议任何有帮助的商业产品 基本问题源于以下场景: 用户将数据输入表单,表单会根据现有数据自动填充某些值 这些数据已保存,一切都很好 将生成一个报告,该报告与保存的数据同步 确定自动填充值的数据库内容现在更改 打开表单时,将修改自动填充的值 如果不保存,报告值也需要更新,但不需要更新 其他详情: 我们的报告解决方案要求答案和规则评估都来自Oracle数据库中的存储过程或查询 表单在浏览器中运行 根据自动填充的值,表

我主要是在这里寻找创意。我的团队购买一些东西来解决问题的几率非常低,但是请继续,并建议任何有帮助的商业产品

基本问题源于以下场景:

  • 用户将数据输入表单,表单会根据现有数据自动填充某些值
  • 这些数据已保存,一切都很好
  • 将生成一个报告,该报告与保存的数据同步
  • 确定自动填充值的数据库内容现在更改
  • 打开表单时,将修改自动填充的值
  • 如果不保存,报告值也需要更新,但不需要更新
  • 其他详情:

    • 我们的报告解决方案要求答案和规则评估都来自Oracle数据库中的存储过程或查询
    • 表单在浏览器中运行
    • 根据自动填充的值,表单/报表的某些部分将可见或不可见
    问题: 如何实现一组规则(存储在数据库中),使我能够轻松地从javascript和SQL对它们进行评估

    规则可能类似于以下任一规则:

    • 如果问题1回答为“是”,则隐藏问题2-10
    • 如果问题3回答为“否”,则自动回答问题4的“X”
    • 如果问题1为“是”,问题3为“否”,问题4为“是”,则运行方法“无论如何”
    我现在脑子里有很多可能的解决方案,但大多数都涉及编写两个解释器(一个用javascript,一个用sql)。虽然这并不一定可怕,但最好只与一名口译员打交道

    此外,客户机需要在用户输入值时更新表单,因此每次用户更改答案时弹出返回数据库不太可能是一个实际的解决方案

    更新/修改

    我目前倾向于实现可由javascript直接评估的规则(规则周围有一些代码),并由存储过程转换/处理为可在Oracle中评估规则的动态sql


    对此有什么建议吗?

    在用户每次进行更改时轮询数据库并不像您认为的那样不切实际,除非您的网络速度非常慢。如果Google instant可以在您每次键入字符时执行web搜索,那么我认为您可以在用户每次回答问题时执行ajax调用。

    这可能是一个很好的使用案例。使用服务器端Javascript,只需在JS中开发一次API。您可能需要在服务器或客户机上对其进行一些扩展,但这至少会减轻您的一部分负担。

    使用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+"]
            }
        }
    ]
    
    Condition: '{Question = "1" and Answer = "Y"} and {Question = "2" and Answer = "N"}',
    Action: 'Hide',
    Target: '3'
    
    解析这些规则,并使用它们驱动前端javascript和后端
    .aspx
    文件(或存储过程,以对您的设置更有意义的为准)


    如果您想避免不仅编写两组规则,还编写两组规则解释器,那么使用Node.js或调用嵌入式JScript解释器(或独立的Rhino/Spidermonkey环境)可能是一种方法(在客户端切换到Silverlight并在.NET中编写所有验证可能是另一种方式——但是,如果您有56K调制解调器的用户,他们可能不会感谢您的选择。)

    我想您在评论中回答了自己的问题:

    据我所知,我们的一些用户使用的是国外旧的56kbps调制解调器


    如果你想让这些用户获得响应和速度,你必须先把逻辑加载到JavaScript文件中,然后让客户端处理。我会远离AJAX,因为使用56kbps的调制解调器返回服务器会很不有趣。

    好吧,我最后编写了一些简单的字符串替换“解析器”使用如下语法:

    [
        {
            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+"]
            }
        }
    ]
    
    Condition: '{Question = "1" and Answer = "Y"} and {Question = "2" and Answer = "N"}',
    Action: 'Hide',
    Target: '3'
    
    在数据库中,条件、操作和目标字段是一行中的列,其中包含一些更有用的信息。在javascript中,它将是一个JSON对象

    在PL/SQL中执行一些简单的REGEXP_REPLACE,在javascript中执行Repace(/…/g),我就可以到达我们需要的位置——而不必在解析器上浪费太多时间。(正在测试的javascript对象将具有与条件中的属性相匹配的属性,并且正在测试的数据库行将具有相同的列名。)


    事实证明,我们最终使用了多个解释器,但通过字符串替换使它们保持简单,这并不是一件痛苦的事。

    您已经在使用什么框架/etc?因为普通ole JavaScript无法访问数据库。为什么每次查看报告时都不生成它?它非常耗时,所以您必须保存它吗?Byron:t每次查看报告时都会生成报告,但规则可能相当复杂,构建两个口译员并不是我们理想的时间利用方式。rlb.usa:我们在服务器上使用ASP.NET/C。你认为什么是慢速网络?我知道我们的一些用户在国外使用的是旧的56kbps调制解调器。@John Fisher,我可以定义一下y将其归类为慢速网络。我想我没有提到报表不是由我们的服务器创建的。因此,我们需要使用我们可用的系统。目前,我们只能通过存储过程调用向设计的报表提供数据。(因此,如果我们不能通过SQL调用提供规则,则需要由报表设计来实现…)我们已经做出了决定。困难的部分是避免使用两个解释器(一个使用SQL,一个使用javascript)来实现规则(一个用于生成报表,另一个在客户端运行)。到目前为止,您的答案是