当前位置: 首页 > news >正文

江西建设职业技术学院招生信息网站国外免备案虚拟主机

江西建设职业技术学院招生信息网站,国外免备案虚拟主机,教育网站制作视频,广告公司推广背景 可能有些小伙伴看到这个话题,觉得非常简单,在发起人步骤设置标题可编辑,在有关的控件中设置事件去更新标题就可以了呗。但如果想要标题字段里包含编号呢,而编号是在具体路径的高级设置里设置的,在某个出口生成的…

背景

可能有些小伙伴看到这个话题,觉得非常简单,在发起人步骤设置标题可编辑,在有关的控件中设置事件去更新标题就可以了呗。但如果想要标题字段里包含编号呢,而编号是在具体路径的高级设置里设置的,在某个出口生成的,这么处理就不合适。因而可能又有小伙伴说在下一个节点通过JS去更新标题不就可以了嘛。这同样会存在问题,一个是第二个节点的经办人,在待办里看到的流程标题和打开表单时,看到的标题是不一致的,这么处理看起来不太合适;另一个是我们的环境中有这样的设置,流转异常时,自动跳转到下一节点,以实现当前部门部门经理空缺时,发起人发起流程时自动流转到部门所对应的总监。总监步骤也有同样的设置,因此,找一个必经节点去更新流程名称显然也不太合适。那看来最好的办法是在流程发起步骤就把流程编号和流程名称处理好。

处理

编号是在出口生成的,受这思路的引导,首先想到去尝试的是在生成编号的出口,去添加附加操作去更新标题。结果失败了。

出口的附加操作行不通,然后又试了下一个节点的节点前附加操作,结果同样没有实现我想要的效果。

尝试了以上方法之后,我决定用触发器来实现我的功能。其实我是比较抵触写触发器的,毕竟它隐蔽性强,测试不方便 ,而且并不常用。

我是这么设计的。给流程的表写一个触发器,负责在更新编号后,去更新流程的标题,更新锁定标题的字段。锁定标题字段是在workflow_requestbase里新加的一个字段。

流程表的触发器

USE [ecology]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER [dbo].[tri_formtable_main_123_upd]
   ON  [dbo].[formtable_main_123]
   AFTER UPDATE
AS 

declare @requestId int;

select    @requestId = requestId from deleted;

-- 取workflow_requestbase表的requestname和requestnamenew
declare    @requestname nvarchar(1000),
        @requestnamenew nvarchar(4000),
        @requestnamesplit nvarchar(4000),
        @requestfinish nvarchar(1000),
        @BH nvarchar(20)

BEGIN
    SET NOCOUNT ON;

    select    @BH =  Ltrim(Rtrim(isnull(BH, '')))
    from    inserted


    if update(BH)
    begin
        -- 取当前流程原有的流程名
        select    @requestname = ltrim(rtrim(isnull(requestname, ''))),
                @requestnamenew = ltrim(rtrim(isnull(@requestnamenew, '')))
        from    workflow_requestbase
        where    requestid = @requestId
        
        select  @requestnamesplit = replace(@requestname, @requestnamenew, '')
        if isnull(@BH, '') <> ''
        begin
            update  a 
            set     a.requestname = b.BH + '-' + b.KHMC + '-' + b.RQ ,
                    a.requestnamenew = b.BH + '-' + b.KHMC + '-' + b.RQ + ltrim(rtrim(isnull(@requestnamesplit, ''))),
                    a.lockname = 'Y'
            from    workflow_requestbase a 
                    inner join 
                    inserted b 
                    on a.requestid = b.requestid
        end
    end
END

看似这么简单就完事儿了,但实际创建流程的时候发现标题并没有改过来。通过Sql Server Profiler跟踪提交流程时候所执行的操作中发现,在生成了编号之后,还有一次对workflow_requestbase的更新,其中包括了更新标题。我猜这里泛微一定没有再去数据表里取一次标题,还是使用的从表单提交过来的标题。那么,还要给workflow_requestbase表写一个触发器。作用是控制在发起流程时,第二次更新标题时,根据lockname字段的值去判断当前的标题是不是由流程表里的触发器所更新的,如果是,把标题再更新回去。

workflow_requestbase的触发器
USE [ecology]
GO
/****** Object:  Trigger [dbo].[tri_workflow_requestbase_upd]    Script Date: 02/13/2023 09:09:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[tri_workflow_requestbase_upd]
   ON  [dbo].[workflow_requestbase] 
   after update
AS 
BEGIN
    SET NOCOUNT ON;
    
    -- 检查lockname标识,如果是Y,说明是生成的标识,不允许更改,办法是从deleted表里拿旧的requestname放到insert表里去。
    declare @requestnameold nvarchar(1000),
            @requestnamenew nvarchar(1000),
            @requestid int,
            @lockname nvarchar(1),
            @locknamenew nvarchar(1)
            
    select    @requestnameold = isnull(requestname,''),
            @requestid = isnull(requestid, ''),
            @lockname = isnull(lockname, '')
    from    deleted
    
    select    @requestnamenew = requestname,
            @locknamenew = isnull(lockname, '')
    from    inserted
    
    if update(requestname)
    begin
        if @lockname = 'Y' and @locknamenew = 'Y'
        begin
            update    a
            set        a.requestname = b.requestname,
                    a.requestnamenew = b.requestnamenew,
                    a.lockname = 'F'
            from    workflow_requestbase    a
                    inner    join
                    deleted    b
                    on    a.requestid = b.requestid
        end
    end
END

总结

这个问题前前后后折腾了好几天,当功能实现了的时候,心里回想了一句话“只要思想不滑坡,方法总比困难多。”

说几个走过的弯路。

1、路径设置里,设置了编号的流水号的长度,就生成不出流水号了。这时候要去检查你所给的字段的长度是不是不够长。

2、别试图更新触发器里的deleted表和inserted表,Sql Server不允许你这么干。

3、以上只是我想到的解决办法,不代表最优办法,也不代表标准办法。

http://www.yayakq.cn/news/935608/

相关文章:

  • 网站 免费空间住房城乡建设部 网站
  • 怎样做网站的源代码黄石网站制作公司
  • 集团公司网站模板潍坊哪里有做360网站的
  • 广州建网站自助建站系统国家商标注册官网
  • 平度网站建设费用网站建设结论与改进
  • 手机网站怎么导入微信西安学校网站建设报价
  • 网站幻灯视频网站自己怎么做的
  • 文章类网站选什么内容荆州seo技术厂家
  • 深圳网站优化哪家好p2p网站建设公司排名
  • 德国网站的后缀名免费企业邮箱排名
  • 网站建设com网站开发费走什么科目
  • 自己做qq头像网站实现网站计划书
  • 新公司网站建设分录在线设计发型
  • 怎么申请免费的网站WordPress上传文件格式
  • 搭建cms网站酒店网站开发协议
  • 兴义网站建设做网站需要干什么
  • 不准别人网站做反链郑州网站建设修改
  • 青岛制作网站的韩国ps教程网站
  • 营销网站售后调查系统河南省建设部省厅网站
  • 重庆专业的网站建设公司wordpress帝国cms
  • 公众号怎么建网站wordpress模板安装教程视频
  • 做免费网站网站策划的基本过程
  • 平面设计公司网站找生产厂家的网站
  • 无锡网站制作无锡做网站免费行情软件网站游戏
  • 四川住房城乡建设周刊网站做游戏交易网站
  • 网站建设策划书模板国外免费psd网站
  • 做设计网站模块的网站信息服务平台官网
  • 汕头网站建设技术支持桂林网络搭建
  • 北京哪家做网站和网络推广好的免费的客户管理软件排行榜
  • 做电影类网站徐州铜山区