楼主: weilingjun

[精华] SBO中的一个极具震撼力的的流程控制功能详细分析

[复制链接]
论坛徽章:
18
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14优秀写手
日期:2013-12-18 09:29:132012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:52
41#
 楼主| 发表于 2007-11-29 11:00 | 只看该作者
去了黄山旅游了,上了光明顶,哈哈,“论剑”论的一塌糊涂,输了几百大洋,哈哈。达策的精英全到了,自然输了。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2008-02-26 09:05:34
42#
发表于 2008-2-13 11:14 | 只看该作者
确实是透过现象看到了本质啊,老魏,那是相当的有才!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2006-09-11 13:46:01会员2007贡献徽章
日期:2007-09-26 18:42:10
43#
发表于 2008-2-26 21:55 | 只看该作者
前天我一个朋友发了这个资料给我,没想到今天就看到了!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2006-09-11 13:46:01会员2007贡献徽章
日期:2007-09-26 18:42:10
44#
发表于 2008-3-5 10:14 | 只看该作者
我有一个需求就是要判断添加物料主数据时,物料号不能为中文!
ALTER proc SBO_SP_TransactionNotification

@object_type nvarchar(25), -- SBO Object Type
@transaction_type nchar(1), -- [A]dd, [U]pdate, [D]elete, [C]ancel, C[L]ose
@num_of_cols_in_key int,
@list_of_key_cols_tab_del nvarchar(255),
@list_of_cols_val_tab_del nvarchar(255)

AS

begin

-- Return values
declare @error int -- Result (0 for no error)
declare @error_message nvarchar (200) -- Error string to be displayed
declare @aaa nvarchar(100) --WLJ test

select @error = 0
select @error_message = N'Ok'

--------------------------------------------------------------------------------------------------------------------------------

-- ADD YOUR CODE HERE
if @object_type='4'--items
begin
if @transaction_type='A'
begin
select @aaa =itemcode from oitm where itemcode=@list_of_cols_val_tab_del
if DATALENGTH(@aaa)<>len(@aaa)
begin
set @error=1
set @error_message='"物料主数据物料号不能等于中文!" '+@aaa +'--'+ @list_of_key_cols_tab_del +'--'+@list_of_cols_val_tab_del +'--'+cast(@num_of_cols_in_key as nvarchar(20))
end
else
set @error_message='物料'+@aaa+'添加成功'+'---'+ @list_of_key_cols_tab_del +'--'+@list_of_cols_val_tab_del +'--'+cast(@num_of_cols_in_key as nvarchar(20))
end
else if @transaction_type='D'
begin
set @error=1
set @error_message='不允许删除' + @list_of_key_cols_tab_del +'--'+@list_of_cols_val_tab_del +'--'+cast(@num_of_cols_in_key as nvarchar(20))
end
end

--------------------------------------------------------------------------------------------------------------------------------

-- Select the return values
select @error, @error_message

end

GO


运行以后,我再添加主数据时:不管我的物料的编码是:汉字的,还是数据又或者是英文字母的。都会爆出     +++“"物料主数据物料号不能等于中文!" '+@aaa +'--'+ @list_of_key_cols_tab_del +'--'+@list_of_cols_val_tab_"++错误!
请问我的问题出在哪里了呢?

使用道具 举报

回复
论坛徽章:
0
45#
发表于 2008-3-22 10:50 | 只看该作者
To cicizz
   将 declare @aaa nvarchar(100) 修改为 declare @aaa varchar(100) 即可解决

[ 本帖最后由 erp011 于 2008-3-22 10:53 编辑 ]

使用道具 举报

回复
论坛徽章:
0
46#
发表于 2008-5-6 16:17 | 只看该作者
好东西。学习啊!!

使用道具 举报

回复
论坛徽章:
0
47#
发表于 2008-5-28 15:35 | 只看该作者
东西固然是好东西,但对sql不是精通的实施顾问最好还是谨慎的用,因为你可能费了大半天时间编了好长的程序,炫耀了很多的控制功能.但不小心是整个系统的性能下降了很多,那样的话就得不偿失了!

使用道具 举报

回复
论坛徽章:
0
48#
发表于 2008-5-29 10:32 | 只看该作者
高手就是高手!!顶~~~

使用道具 举报

回复
论坛徽章:
0
49#
发表于 2008-6-11 16:55 | 只看该作者
果然是好贴,有一些小想法和补充,本人对SAP和SBO不太熟悉,单纯从T-SQL和编程的角度探讨,呵呵!

想法一:
考虑到SBO_SP_TransactionNotification在系统中的重要性和粒度,也为了提高可维护性,建议把自定义的代码写在新建的存储过程中,然后在SBO_SP_TransactionNotification中加以调用,例如:
UserExtendTransactionNotification是我们自定义的存储过程,把各个参数依次传递过去,这样效率上可能有所损失,但以后维护相对比较方便和安全一点,如果不用,直接将此调用语句注释了即可.

EXEC UserExtendTransactionNotification @objectType=@object_type ,@transactionType=@transaction_type,@numOfColsInKey=@num_of_cols_in_key,@listOfKeyColsTabDel=@list_of_key_cols_tab_del, @listOfColsValTabDel=@list_of_cols_val_tab_del  

想法二:
创建一个自定义的Even表,字段参照@object_type ,@transaction_type,@num_of_cols_in_key,@list_of_key_cols_tab_del, @list_of_cols_val_tab_del 创建,然后在行新增上创建触发器,触发器触发具体的行为(可为存储过程,也可以是函数),然后在SBO_SP_TransactionNotification中更新这个表,从而引发具体的扩展行为。
不过这方案的问题是这个Even表的维护问题很大,随着SBO_SP_TransactionNotification被频繁调用,行也会大量增加。

呵呵,希望指正!

[ 本帖最后由 myoasis 于 2008-6-11 17:00 编辑 ]

使用道具 举报

回复
论坛徽章:
7
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442009日食纪念
日期:2009-07-22 09:30:002011新春纪念徽章
日期:2011-02-18 11:42:472014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:022014年世界杯参赛球队:克罗地亚
日期:2014-06-12 16:37:10红钻
日期:2015-03-10 14:00:33
50#
发表于 2008-6-12 09:41 | 只看该作者
原帖由 myoasis 于 2008-6-11 16:55 发表
果然是好贴,有一些小想法和补充,本人对SAP和SBO不太熟悉,单纯从T-SQL和编程的角度探讨,呵呵!




通过自定义存储过程与自定义表,将这类调用参数化,大大改善了维护的难度.

只需要修改自定义表里对这些参数的配置(增加/删除/修改),就可以直接在SQL之外达到流程控制的目的.

比如,将参数限定住(对象类型,操作类型,判断标准等等),在存储过程里增加简单的错误控制和调试方法,然后只要有个用户界面....这样,即使完全没有SQL知识的人,只需要按要求填进所需要的这些参数,就可以在SBO里增加任意的流程控制了.....

这个东西如果能完善地做出来,不亚于另外一个查询接口....

这得益于SBO对底层后台数据库完全的开放,当然可见楼上的朋友也是一位牛人啊......

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表