注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 伤离别,痛英年早逝,愿天..
 帮助

SBO的查询接口详细分析解剖


2007-09-19 15:50:54
 标签:SBO 查询接口   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://codeking.blog.51cto.com/174063/43269
SBO的查询接口详细分析解剖(斑竹上任第一礼)
工欲善其事,必先利其器。知己知彼,百战不殆!
SBO的查询接口是SBO开发的一个综合性的查询工具,主要作用总结一下可以分三方面:一般的查询;用于定值一些简单报表的查询;用于格式化搜索的查询。一般关键的注意点有以下几个方面:
1、一般情况下,这个查询接口支持大约4000多个字符以内的sql语句查询,如果超过,就建议使用存储过程了。当然为了使SBO升级不出现问题(以前的版本SBO升级时会因为存储过程出问题),在升级前最好Drop这些存储过程,然后升级完成后补进去。
2、关于参数的问题,SBO查询接口引入一种特殊的参数传递机制,即'[%0]','[%1]'...,以前的版本没有引号,要注意不同版本升级造成的替换问题。
3、对于复杂查询逻辑的参数传递问题:大家最好先定义查询sql变量,然后对这些变量使用SBO参数赋值,然后在你的复杂查询逻辑中直接使用这些变量来传递参数,这种方法对调用存储过程等方面有很大好处,就是可以解决SBO的条件选择框的问题。例如:
declare @itemfrom nvarchar(20)
declare @itemto nvarchar(20)
declare @count int
select @count=count(t0.itemcode) from OITM T0 where T0.itemcode= '[%0]' or T0.itemcode= '[%1]'
set @itemfrom= '[%0]'
set @itemto= '[%1]'
select itemcode '物料代码',itemname '物料名称' from oitm where ((itemcode>=@itemfrom) or (@itemfrom is null) or (@itemfrom='') )and ((itemcode<=@itemTo) or (@itemTo is null)or (@itemTo=''))
4、对于字符型参数,最好加上or (@itemTo is null)or (@itemTo=''),这样条件就更灵活。对于数值参数采用(@itemTo is null)or (@itemTo=0)
5、对于SBO查询接口做报表,一般只能做一些简单的一维的报表。对于主细结构的报表就不好使了。不知哪位大虾有这方面的经验分享一下。
6、对于研发人员来说,如果开发的程序涉及到查询,希望在安装过程中直接安装到SBO系统里,方法有两个,一个是使用SDK,一个是直接插入。不过直接插入还是有风险的。但速度快。例子如下

declare @maxQCategory int
declare @maxQnum int
Declare @maxIDX int
declare @sql nvarchar(4000)

select @maxQCategory=isnull(max([CategoryId]),0)+1 from [OQCN]
delete from [OQCN] where [CatName]=N'自定义报表'
insert into [OQCN]([CategoryId], [CatName], [PermMask], [DataSource], [UserSign])
values(@maxQCategory,N'自定义报表','YYYYYYYYYYYYYYY','N',Null)
--说明OQCN主要存放您的报表的查询类别。
--报表1
--OUQR主要存放您的自定义查询。要注意IntrnalKey自动加1。
select @maxQnum=isnull(max(IntrnalKey),0)+1 from OUQR --where QCategory=@maxQCategory
delete from [OUQR] where [QName]=N'您的报表'
insert into [OUQR]([IntrnalKey], [QCategory], [QName], [QString], [QType], [ColumnSize])
values(@maxQnum,@maxQCategory,N'您的报表',N'declare @itemfrom nvarchar(20)
declare @itemto nvarchar(20)
declare @count int
select @count=count(t0.itemcode) from OITM T0 where T0.itemcode= '+''''+'[%0]'+''''+' or T0.itemcode= '+''''+'[%1]'+''''+'
set @itemfrom= '+''''+'[%0]'+''''+'
set @itemto= '+''''+'[%1]'+''''+'
select itemcode '物料代码',itemname '物料名称' from oitm where ((itemcode>=@itemfrom) or (@itemfrom is null) or (@itemfrom=+''''+''''+))and ((itemcode<=@itemTo) or (@itemTo is null)or (@itemTo=+''''+''''+))','W','RnNNNZFFTNTZNNFFFNFFNNRRRRNN')

希望这个文档对顾问或研发有所帮助。至于SBO的查询接口究竟能在项目中做到什么程度,但就看我们的功底如何了。尤其是SQL的水平。我的建议是在SBO这个产品上对顾问的SQL水平是必须的一个基本技能。尤其是在流程控制的存储过程和报表查询的书写上。

本文出自 “魏领军的网上家园” 博客,请务必保留此出处http://codeking.blog.51cto.com/174063/43269



上一篇 苏州照片 



    文章评论
 
2007-09-19 20:38:56
对于复杂查询逻辑的参数传递问题:大家最好先定义查询sql变量,然后对这些变量使用SBO参数赋值,然后在你的复杂查询逻辑中直接使用这些变量来传递参数,这种方法对调用存储过程等方面有很大好处,就是可以解决SBO的条件选择框的问题
重点学习

2007-09-22 13:01:44
自定义查询中可以调用自定义视图、存储过程、自定义表以及自定义函数!

2007-09-24 17:41:35
版主了?在哪儿斑竹了呀

2007-09-24 21:05:07
ITPUB的版主

2008-04-23 16:42:46
请教:   以下的查询是用来检查一定的时间区间内(本例为1/4 到 1/5) 预测方案"FC2008"的MPR 与 此期间的实际订单物料须求的相似率.
问题是:当我想用变量替代始末时间时,报错:"拒绝了对对象 sbo_sp_transactionnotification 的 execute 权限.
如何解决?????谢谢
------------------------------------------------------------------
declare @date datetime
declare @date1 datetime

set @date = '2008-4-1'   <== set @date = '[%0]'
set @date1 = '2008-5-1' <== set @date1 = '[%1]'


select cc.itemname ,bb.fcode,bb.qty,aa.scode,aa.quantity,bb.qty/aa.quantity as 'sameratio' from (select distinct t3.code as 'scode', sum(t1.quantity* t3.quantity) as 'quantity' from ordr t0 inner join rdr1 t1 on t0.docentry = t1.docentry inner join itt1 t3 on t1.itemcode = t3.father where t3.code not like '4330000%' and (t0.docduedate >= @date and t0.docduedate <= @date1 ) group by t3.code) aa full outer join (select distinct k2.code as 'fcode', sum(k0.quantity*k2.quantity) as 'qty' from fct1 k0 inner join oitt k1 on k0.itemcode=k1.code inner join itt1 k2 on k1.code = k2.father where k2.code not like'4330000%' and (k0.date >= @date and k0.date <= @date1 ) group by k2.code) bb on aa.scode=bb.fcode inner join oitm cc on aa.scode=cc.itemcode

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: