壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1294|回复: 0

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

[复制链接]
发表于 2008/7/25 15:54:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
工欲善其事,必先利其器。知己知彼,百战不殆!
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')
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 06:34 , Processed in 0.013151 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表