MSCRM4.0报表运用CRMAF_无法正常筛选的解决方法
2009-09-24 11:49
218 查看
笔者昨天在开发一个报表时候遇到了问题,其实这个问题很久以前笔者也遇到过。但都是通过其它途径解决,未能达到满意效果。这次,笔者终于下定决心,非解决不可。问题是这样的,报表中使用了sql中的union或union all来合并两个记录集,代码如下:
select CRMAF_Filteredopportunity.opportunityid,
CRMAF_Filteredopportunity.owneridname,
CRMAF_Filteredopportunity.name,
CRMAF_Filteredopportunity.statecodename,
CRMAF_Filteredopportunity.new_requirement1name,
CRMAF_Filteredopportunity.statuscodename,
CRMAF_Filteredopportunity.actualclosedate,
filteredappointment.subject,
convert(varchar(10),filteredappointment.scheduledstart,120) + '~' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled,
filterednew_claims.new_claimsid,
filterednew_claims.new_number,
'商机' as new_type,
filterednew_claims.new_money
from Filteredopportunity as CRMAF_Filteredopportunity
inner join filteredappointment on filteredappointment.regardingobjectid = CRMAF_Filteredopportunity.opportunityid
inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid
where filterednew_claims.new_auditresults = 3
union
select CRMAF_Filteredopportunity.opportunityid,
CRMAF_Filteredopportunity.owneridname,
CRMAF_Filteredopportunity.name,
CRMAF_Filteredopportunity.statecodename,
CRMAF_Filteredopportunity.new_requirement1name,
CRMAF_Filteredopportunity.statuscodename,
CRMAF_Filteredopportunity.actualclosedate,
filteredappointment.subject,
convert(varchar(10),filteredappointment.scheduledstart,120) + '~' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled,
filterednew_claims.new_claimsid,
filterednew_claims.new_number,
'销售线索' as new_type,
filterednew_claims.new_money
from filteredlead
inner join Filteredopportunity as CRMAF_Filteredopportunity on CRMAF_Filteredopportunity.originatingleadid = filteredlead.leadid
inner join filteredappointment on filteredappointment.regardingobjectid = filteredlead.leadid
inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid
where filterednew_claims.new_auditresults = 3
但问题就在此,含有union或union all的标识符的报表上载到MSCRM后虽然可以正常显示报表筛选器,但查询的效果不如人意,感觉CRMAF_Filteredopportunity只执行筛选了一个记录集,另一个没有正常执行筛选。这样的结果不是笔者所需要的。最后笔者弄了很久,还未解决。只能采用另一种方法来达到同样的目的,就是运用
Explicit Filtering that uses CRM_FilteredEntity
When you use dynamic SQL, filtering through Advanced Find is enabled by creating a hidden parameter named CRM_FilteredEntity, for example, CRM_FilteredAccount, and by using this parameter in a dynamic SQL query expression. This parameter enables filtering on the table data obtained from the specified filtered view, for example:
select CRMAF_Filteredopportunity.opportunityid,
CRMAF_Filteredopportunity.owneridname,
CRMAF_Filteredopportunity.name,
CRMAF_Filteredopportunity.statecodename,
CRMAF_Filteredopportunity.new_requirement1name,
CRMAF_Filteredopportunity.statuscodename,
CRMAF_Filteredopportunity.actualclosedate,
filteredappointment.subject,
convert(varchar(10),filteredappointment.scheduledstart,120) + '~' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled,
filterednew_claims.new_claimsid,
filterednew_claims.new_number,
'商机' as new_type,
filterednew_claims.new_money
from Filteredopportunity as CRMAF_Filteredopportunity
inner join filteredappointment on filteredappointment.regardingobjectid = CRMAF_Filteredopportunity.opportunityid
inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid
where filterednew_claims.new_auditresults = 3
union
select CRMAF_Filteredopportunity.opportunityid,
CRMAF_Filteredopportunity.owneridname,
CRMAF_Filteredopportunity.name,
CRMAF_Filteredopportunity.statecodename,
CRMAF_Filteredopportunity.new_requirement1name,
CRMAF_Filteredopportunity.statuscodename,
CRMAF_Filteredopportunity.actualclosedate,
filteredappointment.subject,
convert(varchar(10),filteredappointment.scheduledstart,120) + '~' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled,
filterednew_claims.new_claimsid,
filterednew_claims.new_number,
'销售线索' as new_type,
filterednew_claims.new_money
from filteredlead
inner join Filteredopportunity as CRMAF_Filteredopportunity on CRMAF_Filteredopportunity.originatingleadid = filteredlead.leadid
inner join filteredappointment on filteredappointment.regardingobjectid = filteredlead.leadid
inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid
where filterednew_claims.new_auditresults = 3
但问题就在此,含有union或union all的标识符的报表上载到MSCRM后虽然可以正常显示报表筛选器,但查询的效果不如人意,感觉CRMAF_Filteredopportunity只执行筛选了一个记录集,另一个没有正常执行筛选。这样的结果不是笔者所需要的。最后笔者弄了很久,还未解决。只能采用另一种方法来达到同样的目的,就是运用
Explicit Filtering that uses CRM_FilteredEntity
When you use dynamic SQL, filtering through Advanced Find is enabled by creating a hidden parameter named CRM_FilteredEntity, for example, CRM_FilteredAccount, and by using this parameter in a dynamic SQL query expression. This parameter enables filtering on the table data obtained from the specified filtered view, for example:
DECLARE @SQL nvarchar(4000) SET @SQL = ' SELECT * FROM ('+@CRM_FilteredAccount+') AS FA' EXEC (@SQL)
代码如下:
DECLARE @SQL nvarchar(max) set @SQL = ' select opp.opportunityid, opp.owneridname, opp.name, opp.statecodename, opp.new_requirement1name, opp.statuscodename, opp.actualclosedate, filteredappointment.subject, convert(varchar(10),filteredappointment.scheduledstart,120) + ''~'' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled, filterednew_claims.new_claimsid, filterednew_claims.new_number, ''商机'' as new_type, filterednew_claims.new_money from (' + @CRM_Filteredopportunity + ') as opp inner join filteredappointment on filteredappointment.regardingobjectid = opp.opportunityid inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid where filterednew_claims.new_auditresults = 3 union select opp.opportunityid, opp.owneridname, opp.name, opp.statecodename, opp.new_requirement1name, opp.statuscodename, opp.actualclosedate, filteredappointment.subject, convert(varchar(10),filteredappointment.scheduledstart,120) + ''~'' + convert(varchar(10),filteredappointment.scheduledend,120) as scheduled, filterednew_claims.new_claimsid, filterednew_claims.new_number, ''销售线索'' as new_type, filterednew_claims.new_money from filteredlead inner join (' + @CRM_Filteredopportunity + ') as opp on opp.originatingleadid = filteredlead.leadid inner join filteredappointment on filteredappointment.regardingobjectid = filteredlead.leadid inner join filterednew_claims on filterednew_claims.new_appointmentguid = filteredappointment.activityid where filterednew_claims.new_auditresults = 3 ' exec (@SQL)
最后经过测试,问题解决了。^_^
希望这篇文章能够让大家少走弯路。
相关文章推荐
- 无线网卡无法正常工作的非常规解决方法
- (应用程序无法正常启动0xc0000142) 关于win10周年版更新后无法正常使用vc6.0问题的解决方法
- piwigo简体中文2.4.6安装时出现“服务器连接正常,但是无法连接到数据库”解决方法
- OpenCV:应用程序无法正常启动0xc000007b解决方法
- Tortoise SVN常见图标含义及图标无法正常解决方法!
- alexa toolbar(工具条)下载安装后无法正常显示(显示白条)的解决方法
- 13.3小米笔记本安装ubuntu(linux)后无法正常打开wifi的解决方法
- 网上下载的PPT文档用office打开时出错(有问题)或应用程序无法正常启动(0x0000022)的解决方法
- 双硬盘+win7+ubuntu双系统 去掉从硬盘后ubuntu无法正常启动问题解决方法
- windows无法正常启动(停止在欢迎界面或蓝屏)的解决方法之一
- KMPlayer 无法正常在win2003中播放rmvb视频的解决方法
- 应用程序无法正常启动提示错误0xc000007b 问题的原因和解决方法
- Fedora10+thinkpadT400+ATI显卡,无法正常休眠解决方法
- VMware下的ubuntu无法正常启动,显示“以独占方式锁定此配置文件失败”的解决方法
- Peoplesoft HCM8.9 2010-12-31日后,页面无法正常显示解决方法
- directX错误怎么解决?winXP系统显卡正常运行却无法玩游戏情况的解决方法介绍
- iOS6中无法正常游戏横屏的解决方法
- 虚拟机装系统出现 ntldr is missing(NTLDR丢失)、无法正常开机、解决方法