请教WORK FOLW里如何批量倒入数据

时间:2021-07-28 04:38:52
各位大哥你们好!
小弟要做个简单流程
首先申请一批物料输入然后提交到审核处
审核不同意则返回重提交
同意则入到SQL里去
但是小弟现在遇到问题了
怎样把同意的数据按照某个完成的工作来批量倒入SQL里?
小弟想到"已完成工作"的那个视图里取数据
但是在里面必须要按照某个未入库并且是已经审核同意了的工作来入库
这样小弟觉得很困难
小弟在审核那个活动里加了个决策,小弟想如果决策同意则触发一个代理来入库,但是不知道怎样去触发
而且代理里的问题就是上边说的那些问题
希望有经验的大哥指导一下,万分感谢了!

29 个解决方案

#1


各位大哥
小弟想这样做
设置定时代理,当有新的工作完成入到完成工作的视图里后
通过代理把新来的工作里的值插到SQL里去,
但小弟有两点不解
1.就是时间上怎么设置,只要有新的工作到来就触发代理,这点时间上不好把握
2,还有就是,万一是新来了几个完成的工作,用怎样的代码去取这些工作里的值
而且一个工作可能包含多个文档,该怎么去控制取视图里他们的值,而不会取到之前已经取过的
希望有好心的大哥赐教,小弟万分感谢!

#2


如果能保证 SQL 在线,最好在审批同意的时候就提取相关的记录信息写到关系数据库里面去。
这样,实时性强,而且少了对状态的维护。
如果想周期性处理,可以写定时代理扫描某个自定义的视图的文档(过滤状态条件等)来处理。

不太明白你后面所说的:工作所包含文档重复的问题。

#3


风清云淡大哥您好
小弟知道您那样做肯定是最好的
但是首先做个简单模型,在审核那个活动里加了个决策点,用活动里的决策点来分配“同意”和“不同意”时候的路油
小弟也想审核时就入库,那肯定最好
但是不知道决策点,同意时候怎样来触发代理,这点始终想不通
如果周期性,视图里面都是完成了的工作,可能有些已经入库了,要找出新完成的工作,还未入库的,那么这个过滤条件,小弟也百思不得其解
希望大哥们赐教一下!

#4


"但是不知道决策点,同意时候怎样来触发代理,这点始终想不通"
你的意思是不是:你不懂得怎么触发代理????

可不可以弄一个未入库但已经完成了工作的视图啊?

#5


乞丐大哥
小弟发现不知道怎么在这个帖子里粘贴图画,所以无法弄视图
小弟确实不知道如果及时性的审核同意就输入数据库时候,怎样决策点中一同意,就触发代理
确实搞不懂这个

#6


自己顶一下,希望有大哥帮下忙!

#7


应用库→资源→Script库→OS Application Events中有一个PostActivityCompleted_函数,每次“保存并完成”时会执行,在这个函数里判断你的决策,并把写关系数据库的代码写在这里。

#8


楼上大哥听您说的好象应该有些道理
请问您可以说详细一点不
小弟查了下帮助,也查不到那个函数相关的东西,
多谢了

#9


安装完Workflow时会有一个“lwf_sdk_301_en.nsf”数据库,和应用库等其他几个模板数据库在同一目录下,内容就是Workflow开发参考,英文,版本不一样名称可能有差异,但都有“sdk”字样,你找一下。

#10


大哥
小弟先去读一读那个英文的帮助
看能否读到些收获

#11


可以直接在代理里面写SQL语句
Uselsx "*LSXODBC"
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
…………
先作一下类似的申明,然后可以直接给qry.SQL写SQL语句,去执行SQL操作
具体要查一下这方面的资料!

#12


如果按照楼上大哥的意思
但是小弟用的是JAVA代理,可不可以在那PostActivityCompleted这种类似地函数里写点语句可以使决策同意后就马上触发JAVA代理,小弟现在主要就是这个困惑

#13


很抱歉,我没用过Java代理,不能回答了。

#14


大哥小弟的意思是
可否在您说的那个函数PostActivityCompleted里用那个函数里的代码(那里的肯定不是JAVA啥)
去指定决策同意的时候就触发JAVA代理
我想代理本身用什么语言写应该没关系吧
大哥是这个困惑,如何决策一同意就能触发代理

#15


封面文档中有一个OLDAPPROVALCHOICEOS域,保存了上一次决策值,代码如下:
Private Function PostActivityCompleted_(CoverDocument As NotesDocument...)
If CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If
End Function

#16


漏了一点,还应该判断一下流程状态,不然以后每次提交都会执行。
If PREVIOUSACTIVITYOS(0) = "审核" And CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If

PREVIOUSACTIVITYOS是上一个活动状态,因为在执行本函数时流程已经到了下一个活动了。

#17


If CoverDocument.PREVIOUSACTIVITYOS(0) = "审核" And CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If

老是漏,真不好意思。

#18


熊哥。小弟没写过LOTUS-SCRIPT
小弟调用代理用的CALL  代理名
但是这样不行
加了单或者双引号也不行
调用代理在这里该杂写
还希望熊哥就这点小问题赐教一下,麻烦您拉,熊哥!

#19


大哥俺直接用CALL 代理名
这样好象不行,它出错提示说那个代理名不是个函数或者过程
难道俺的代理名还得要定义一下嘛?
大哥就是那个调用代理那里请大哥您再指导一下吧,小弟多谢您了!

#20


熊哥
我就直接用的CALL 代理名,
我保存了一下
然后我在工作里新建一个工作,结果一新建工作,它就显示“已执行完代理”,也看不见工作
而且日志栏里有这些错:
 Agent 'LWFExecuteAction' error: Object variable not set
 Agent 'LWFExecuteAction' error: Object variable not set
 Agent 'LWFExecuteAction' error: Cannot find external name:GWFSESSION
熊哥,您知道这是杂回事嘛,小弟我照大哥您的做了

#21


实际上我也没在这个函数里调用过代理,照理说代理不能调用,只能是整个程序转移过去(Agent.Run),但这样就回不到原来调用的地方了,开始的时候没想那么多,就写成调用代理了,失误。
如果要在这里往关系数据库写数据的话,最好直接把代码写在这里,或在OS Application Events中定义一个子程序,在这里调用。
如果你需要LS操作关系数据库的代码的话,我贴出来,不算复杂。

#22


熊哥
如果用Agent.RUN这样它会提示那个代理名是不合法的变量,得找个地方定义一下变量名
可能真的是得直接的写在这里边吧
小弟单位想用JAVA搞,搞不出来那小弟还不是得用别的办法
熊哥麻烦大哥您一下,麻烦下您帖出来,小弟研究一下LS代码
多谢了,熊哥,您真是个好人!

#23


还有熊哥,小弟那个活动里决策的名字取的“审核”,然后”同意“是它的一个分支路游
决策”审核“选择”同意“后就入库,然后结束流程
选择“同意”后就入库,要嘛触发代理,反正就是入库了,然后流程完了,就没活动了

#24


熊哥
您应该用过那个自动活动吧,小弟想可以这样不,“同意”后可否让它自动触发自动活动
让自动活动里自动地导入数据,不知小弟这个想法能行不

#25


熊哥,小弟我看了一下LS
dim daili as NotesAgent
daili.run
但是执行完活动决策后好象代理没执行
莫非真的必须要直接写嘛
小弟还在另一个公式里尝试了一下PostJobCompleted但是还是不得行
估计直接调用代理可能是不得行

#26


调用代理的方法:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim agent As NotesAgent
Set db = session.CurrentDatabase
Set agent = db.GetAgent("代理名")
agent.Run

#27


写关系数据库方法(ADO插入)
Dim conn As Variant
Set conn = CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=xxx;database=xxx;uid=xxx;pwd=xxx"
conn.open connstr
sql = "insert into 表名(字段名1,字段名2) values ('值1','值2')"
conn.Execute sql
Set conn = Nothing

#28


更新关系数据库方法(ADO)
Dim conn As Variant
Set conn = CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=xxx;database=xxx;uid=xxx;pwd=xxx"
conn.open connstr
Set rs = CreateObject("Adodb.Recordset")
sql = "select * from 表名"
rs.open sql,conn,1,3
For i = 1 To rs.recordcount
  'Print rs.Fields("字段名").value '取值
  rs.Fields("字段1").value = "xx1"
  rs.Fields("字段2").value = "xx2"
  rs.Update
  rs.MoveNext
Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

#29


熊哥
我先把帐结了
小弟还是非得用JAVA,这是单位的意思,可是小弟用JAVA实在做得恼火
不知道怎么去触发
熊哥
小弟先结帐,有问题再向您请教!

#1


各位大哥
小弟想这样做
设置定时代理,当有新的工作完成入到完成工作的视图里后
通过代理把新来的工作里的值插到SQL里去,
但小弟有两点不解
1.就是时间上怎么设置,只要有新的工作到来就触发代理,这点时间上不好把握
2,还有就是,万一是新来了几个完成的工作,用怎样的代码去取这些工作里的值
而且一个工作可能包含多个文档,该怎么去控制取视图里他们的值,而不会取到之前已经取过的
希望有好心的大哥赐教,小弟万分感谢!

#2


如果能保证 SQL 在线,最好在审批同意的时候就提取相关的记录信息写到关系数据库里面去。
这样,实时性强,而且少了对状态的维护。
如果想周期性处理,可以写定时代理扫描某个自定义的视图的文档(过滤状态条件等)来处理。

不太明白你后面所说的:工作所包含文档重复的问题。

#3


风清云淡大哥您好
小弟知道您那样做肯定是最好的
但是首先做个简单模型,在审核那个活动里加了个决策点,用活动里的决策点来分配“同意”和“不同意”时候的路油
小弟也想审核时就入库,那肯定最好
但是不知道决策点,同意时候怎样来触发代理,这点始终想不通
如果周期性,视图里面都是完成了的工作,可能有些已经入库了,要找出新完成的工作,还未入库的,那么这个过滤条件,小弟也百思不得其解
希望大哥们赐教一下!

#4


"但是不知道决策点,同意时候怎样来触发代理,这点始终想不通"
你的意思是不是:你不懂得怎么触发代理????

可不可以弄一个未入库但已经完成了工作的视图啊?

#5


乞丐大哥
小弟发现不知道怎么在这个帖子里粘贴图画,所以无法弄视图
小弟确实不知道如果及时性的审核同意就输入数据库时候,怎样决策点中一同意,就触发代理
确实搞不懂这个

#6


自己顶一下,希望有大哥帮下忙!

#7


应用库→资源→Script库→OS Application Events中有一个PostActivityCompleted_函数,每次“保存并完成”时会执行,在这个函数里判断你的决策,并把写关系数据库的代码写在这里。

#8


楼上大哥听您说的好象应该有些道理
请问您可以说详细一点不
小弟查了下帮助,也查不到那个函数相关的东西,
多谢了

#9


安装完Workflow时会有一个“lwf_sdk_301_en.nsf”数据库,和应用库等其他几个模板数据库在同一目录下,内容就是Workflow开发参考,英文,版本不一样名称可能有差异,但都有“sdk”字样,你找一下。

#10


大哥
小弟先去读一读那个英文的帮助
看能否读到些收获

#11


可以直接在代理里面写SQL语句
Uselsx "*LSXODBC"
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
…………
先作一下类似的申明,然后可以直接给qry.SQL写SQL语句,去执行SQL操作
具体要查一下这方面的资料!

#12


如果按照楼上大哥的意思
但是小弟用的是JAVA代理,可不可以在那PostActivityCompleted这种类似地函数里写点语句可以使决策同意后就马上触发JAVA代理,小弟现在主要就是这个困惑

#13


很抱歉,我没用过Java代理,不能回答了。

#14


大哥小弟的意思是
可否在您说的那个函数PostActivityCompleted里用那个函数里的代码(那里的肯定不是JAVA啥)
去指定决策同意的时候就触发JAVA代理
我想代理本身用什么语言写应该没关系吧
大哥是这个困惑,如何决策一同意就能触发代理

#15


封面文档中有一个OLDAPPROVALCHOICEOS域,保存了上一次决策值,代码如下:
Private Function PostActivityCompleted_(CoverDocument As NotesDocument...)
If CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If
End Function

#16


漏了一点,还应该判断一下流程状态,不然以后每次提交都会执行。
If PREVIOUSACTIVITYOS(0) = "审核" And CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If

PREVIOUSACTIVITYOS是上一个活动状态,因为在执行本函数时流程已经到了下一个活动了。

#17


If CoverDocument.PREVIOUSACTIVITYOS(0) = "审核" And CoverDocument.OLDAPPROVALCHOICEOS(0) = "同意" Then
'调用代理代码
End If

老是漏,真不好意思。

#18


熊哥。小弟没写过LOTUS-SCRIPT
小弟调用代理用的CALL  代理名
但是这样不行
加了单或者双引号也不行
调用代理在这里该杂写
还希望熊哥就这点小问题赐教一下,麻烦您拉,熊哥!

#19


大哥俺直接用CALL 代理名
这样好象不行,它出错提示说那个代理名不是个函数或者过程
难道俺的代理名还得要定义一下嘛?
大哥就是那个调用代理那里请大哥您再指导一下吧,小弟多谢您了!

#20


熊哥
我就直接用的CALL 代理名,
我保存了一下
然后我在工作里新建一个工作,结果一新建工作,它就显示“已执行完代理”,也看不见工作
而且日志栏里有这些错:
 Agent 'LWFExecuteAction' error: Object variable not set
 Agent 'LWFExecuteAction' error: Object variable not set
 Agent 'LWFExecuteAction' error: Cannot find external name:GWFSESSION
熊哥,您知道这是杂回事嘛,小弟我照大哥您的做了

#21


实际上我也没在这个函数里调用过代理,照理说代理不能调用,只能是整个程序转移过去(Agent.Run),但这样就回不到原来调用的地方了,开始的时候没想那么多,就写成调用代理了,失误。
如果要在这里往关系数据库写数据的话,最好直接把代码写在这里,或在OS Application Events中定义一个子程序,在这里调用。
如果你需要LS操作关系数据库的代码的话,我贴出来,不算复杂。

#22


熊哥
如果用Agent.RUN这样它会提示那个代理名是不合法的变量,得找个地方定义一下变量名
可能真的是得直接的写在这里边吧
小弟单位想用JAVA搞,搞不出来那小弟还不是得用别的办法
熊哥麻烦大哥您一下,麻烦下您帖出来,小弟研究一下LS代码
多谢了,熊哥,您真是个好人!

#23


还有熊哥,小弟那个活动里决策的名字取的“审核”,然后”同意“是它的一个分支路游
决策”审核“选择”同意“后就入库,然后结束流程
选择“同意”后就入库,要嘛触发代理,反正就是入库了,然后流程完了,就没活动了

#24


熊哥
您应该用过那个自动活动吧,小弟想可以这样不,“同意”后可否让它自动触发自动活动
让自动活动里自动地导入数据,不知小弟这个想法能行不

#25


熊哥,小弟我看了一下LS
dim daili as NotesAgent
daili.run
但是执行完活动决策后好象代理没执行
莫非真的必须要直接写嘛
小弟还在另一个公式里尝试了一下PostJobCompleted但是还是不得行
估计直接调用代理可能是不得行

#26


调用代理的方法:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim agent As NotesAgent
Set db = session.CurrentDatabase
Set agent = db.GetAgent("代理名")
agent.Run

#27


写关系数据库方法(ADO插入)
Dim conn As Variant
Set conn = CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=xxx;database=xxx;uid=xxx;pwd=xxx"
conn.open connstr
sql = "insert into 表名(字段名1,字段名2) values ('值1','值2')"
conn.Execute sql
Set conn = Nothing

#28


更新关系数据库方法(ADO)
Dim conn As Variant
Set conn = CreateObject("ADODB.Connection")
connstr = "driver={sql server};server=xxx;database=xxx;uid=xxx;pwd=xxx"
conn.open connstr
Set rs = CreateObject("Adodb.Recordset")
sql = "select * from 表名"
rs.open sql,conn,1,3
For i = 1 To rs.recordcount
  'Print rs.Fields("字段名").value '取值
  rs.Fields("字段1").value = "xx1"
  rs.Fields("字段2").value = "xx2"
  rs.Update
  rs.MoveNext
Next
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

#29


熊哥
我先把帐结了
小弟还是非得用JAVA,这是单位的意思,可是小弟用JAVA实在做得恼火
不知道怎么去触发
熊哥
小弟先结帐,有问题再向您请教!