您的位置:首页 > 其它

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:

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)
最后经过测试,问题解决了。^_^
希望这篇文章能够让大家少走弯路。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐