经典ASP:如果其他用户当前正在查看页面,则通知用户

时间:2014-01-16 19:05:21

标签: javascript jquery sql asp-classic

我已在内部Intranet内构建了一个Help Desk系统。一般来说,这个系统非常棒。但是,我真的想添加一些功能,我很难搞清楚。我想要做的是当用户正在查看帮助票时,会设置某种“锁定”或“通知”,以便当任何其他用户查看该页面时,他们会被通知某人当前正在处理该票证。我的问题是,即使我的小团队,我们经常会发现自己同时在同一张票上工作。如果当我打开机票时,我会得到某种通知,告诉我有人已经在处理它,这样我们就不会加倍工作,这将非常有用。

我目前在网站上使用以下技术:经典ASP,JavaScript,JQuery和SQL备份数据库。

我曾想过以某种方式编写SQL数据库中故障单中的“锁定”和“lockedBy”字段,这样当打开故障单时,数据库会更新为“locked”= Y和“lockedBy”=。然后当页面关闭,导航离开,或者更新票证时,“已锁定”将更改为“N”,“lockedBy”将更改为“NULL”。

我想要任何建议。

3 个答案:

答案 0 :(得分:1)

我在某些应用程序中执行类似的操作,并将锁定状态,用户和日期存储在数据库中。

问题是如果用户关闭浏览器,它将无法解锁。

您可以通过忽略日期超过特定时间的锁来解决此问题(例如,如果锁定日期超过2小时,则忽略锁定。)

您可以通过在JavaScript计时器上运行AJAX例程来进一步改进这一点,该计时器会在浏览器窗口打开时定期更新锁定日期。例如,每分钟运行一次AJAX调用以更新锁定时间,然后您可以忽略超过1分钟的锁定。

答案 1 :(得分:0)

使用应用程序对象(或使用数据库)可以在所有用户之间共享状态,这里是VBScript版本:

function ClaimTicket(byval ticket, byval user, byref claimedby)
    on error resume next
    dim key
    key = "TICKET." & ticket
    application.lock
    if (application(key) = "") then
        application(key) = user
        ClaimTicket = true
        claimedby = user
    else
        claimedby = application(key)
    end if
    application.unlock
end

锁定和解锁是必要的,以防止其他人试图申请罚单。该函数返回声明票证的人的姓名。代码尚未经过测试。

答案 2 :(得分:0)

我最终在加载页面上使用ajax调用,并在beforeunload之前更新数据库,表明其他人正在查看该票证。