如何从Dynamics CRM 2016 SQL数据库批量获取自定义报表?
关于CRM自定义报表存储位置的分析
从你描述的情况来看,主流CRM系统(比如常用的Microsoft Dynamics CRM)里的自定义报表几乎都是存储在SQL数据库中,而不是文件系统里,下面给你拆解原因和验证思路:
为什么默认报表和自定义报表存储位置不同?
默认报表是CRM系统自带的,通常会以.rdl文件形式放在服务器文件系统中,同时在数据库里有对应的记录关联这些文件。但自定义报表是用户在CRM界面中创建、上传或修改的,这类报表需要和CRM的权限体系、数据实体深度关联,所以会直接存储在数据库的专属表中,不会生成独立的文件到服务器文件系统。怎么找到数据库里的自定义报表?
你之前只找到了默认报表相关的表,大概率是没过滤对字段。以Dynamics CRM为例,自定义报表会存在Report表(如果是多组织环境,表名可能带有组织前缀,比如org_Report),你可以通过查询表中的IsCustom字段(值为1表示自定义)或者ReportType字段来筛选。另外,自定义报表的RDL内容通常存在Content字段中,这个字段是varbinary类型,存储的是二进制格式的RDL文件内容,需要导出解码后才能看到明文。验证方法
- 执行SQL查询筛选自定义报表:
把查询到的SELECT ReportId, Name, Content FROM Report WHERE IsCustom = 1Content字段内容导出为文件,后缀改成.rdl,打开看看是不是你要的自定义报表。 - 更可靠的方式是通过CRM的官方API(比如Web API或者Organization Service)查询报表实体,API会自动处理二进制内容的解码,直接获取可用的RDL内容,这样也能避免数据库表结构变化带来的问题。
- 执行SQL查询筛选自定义报表:
小众CRM的例外情况
当然,如果是一些小众定制化CRM,也不排除会把自定义报表存在文件系统的可能,但这种情况非常少见——毕竟文件系统很难和CRM的权限、实体关联逻辑做深度整合,管理起来也麻烦。
内容的提问来源于stack exchange,提问作者Cybernaut
相关产品推荐
相关产品推荐

