在我们的 CRM 环境中,我们在自定义参数的设置中有一个自定义实体类型,其中实体包含名称、类型和值。我需要在使用 asp 和 C# 的 Web 应用程序中获取这些“参数”之一来做一些数学运算。如何使用实体的 ID 在我的 aspx.cs 文件中检索此实体的值和类型字段,以便我可以制作与自定义参数实体相对应的 ac# 变量。
1 回答
第一种方式
您可以连接到 .asmx 的CRM Web 服务并从那里检索您的实体。只需将其添加为网络参考。根据我的经验,将其添加为服务引用很麻烦,但添加为 Web 引用则不是(因为“添加服务引用”是针对 WCF 的,而“添加 Web 引用”从一开始就用于 .asmx)。
顺便说一句,如果您习惯于通过编写插件和自定义工作流活动来使用 CRM SDK,您可能会注意到:
- 在幕后,CRM SDK 程序集实际上无论如何都在调用 CRM Web 服务......他们只是以一种很好的方式包装它,以促进插件等的开发
- 添加 Web 服务后,您将有一大堆方法可供选择,并且您的实体现在是 ASP.NET 应用程序中的类。因为 VS 将导入服务的 WSDL,它会将您的自定义实体识别为一等公民并生成适当的类(即,您不需要对 DynamicEntity 进行大量处理,这与您的插件和自定义工作流程序集开发不同)
如果您对 CRM 中的实体进行更改(例如添加字段、创建新实体等)以使您的应用程序保持同步,那么更新/刷新您的 Web 参考也是一个很好的做法。如果您只使用一组狭窄的实体(在这种情况下听起来像这样)并且它们没有改变,这不是必需的,但仍然是一个很好的做法。
第二种方式
您可以直接从 _MSCRM 数据库中获取它。
如果您想访问原始表,您的实体将有两个表:Base 和 ExtensionBase。您想要的数据(如果它是您针对实体定义的属性)将位于 ExtensionBase 表中。如果您想改用它,还将有一个连接 Base 和 ExtensionBase 表的视图。
您还可以查询过滤后的视图,但如果您这样做,您需要确保运行 ASP.NET 应用程序的帐户(因此当部署到 IIS 时,这将是应用程序池标识)可以访问 CRM,因为这与过滤视图针对调用用户运行 CRM 安全检查。
另外,请注意直接访问数据库表或视图在技术上不受支持。反对过滤视图应该没问题。
我建议采用第一种方式,但我已经看到过去两种方法都做过,两者都应该有效。