【问题标题】:Dynamics CRM how to get list of all entitiesDynamics CRM如何获取所有实体的列表
【发布时间】:2015-04-15 16:23:11
【问题描述】:

使用 CRM 2013,如何通过 connectionManager 类获取 CRM 中所有实体的列表?我想获取当前连接的所有实体。

【问题讨论】:

  • 如果您只需要列出 CRM 上存在的实体,您可以安装 SDK 的托管解决方案。它应该在您的 SDK 文件夹 Tools\MetadataBrowser\ 作为 zip 文件。 msdn.microsoft.com/en-us/library/hh547411.aspx 另外,您可以使用 SampleCode\CS\Metadata\Entities (C#) 中的 DumpEntityInfo 应用程序,该应用程序创建一个包含当前系统中所有实体的 xml 文件。

标签: c# crm


【解决方案1】:

感谢您的评论并立即回答, 这是我的功能

public static EntityMetadata[] GetEntities ( IOrganizationService organizationService)
{
    Dictionary<string, string> attributesData = new Dictionary<string, string>();
    RetrieveAllEntitiesRequest metaDataRequest = new RetrieveAllEntitiesRequest();
    RetrieveAllEntitiesResponse metaDataResponse = new RetrieveAllEntitiesResponse();
    metaDataRequest.EntityFilters = EntityFilters.Entity;

    // Execute the request.

    metaDataResponse = (RetrieveAllEntitiesResponse)organizationService.Execute(metaDataRequest);

    var entities = metaDataResponse.EntityMetadata;

    return entities;
}

我在 Windows 应用程序表单中调用我的函数,如下所示:

var allEntities = CRMHelpers.GetEntities(service);
foreach (EntityMetadata Entity in allEntities)
{
    cbxEntity.Items.Add(Entity.LogicalName);
}

【讨论】:

  • 你为什么要实例化一个新的响应对象只是为了在几行之后把它扔掉? -- Dictionary 对象是干什么用的? -- 它看起来不像在任何地方都可以使用。
【解决方案2】:

如果您正在寻找使用代码 (C#) 获取实体元数据,那么我们有内置消息来获取所有实体,如果需要,还可以获取属性级别信息。您可以使用消息“RetrieveAllEntitiesRequest”。实现相同的示例代码如下。

RetrieveAllEntitiesRequest retrieveAllEntityRequest = new RetrieveAllEntitiesRequest
{
    RetrieveAsIfPublished = true,
    EntityFilters = EntityFilters.Attributes
};
RetrieveAllEntitiesResponse retrieveAllEntityResponse = (RetrieveAllEntitiesResponse)serviceProxy.Execute(retrieveAllEntityRequest);

如果您需要获取特定的实体信息,则可以使用消息“RetrieveEntityRequest”。相同的示例如下,

RetrieveEntityRequest entityRequest = new RetrieveEntityRequest
{
    EntityFilters = EntityFilters.Attributes,
    LogicalName = entityName,
    RetrieveAsIfPublished = true
};
RetrieveEntityResponse entityResponse = (RetrieveEntityResponse)serviceProxy.Execute(entityRequest);

希望这就是您想要的。如果您需要更多相关信息,请告诉我们。

【讨论】:

  • 感谢您的回答,但是当我调用我的函数 GetEntities VS 已停止工作时,这是我的函数:
  • public static EntityMetadata[] GetEntities ( IOrganizationService 服务) {RetrieveAllEntitiesRequest Request = new RetrieveAllEntitiesRequest(); RetrieveAllEntitiesResponse 响应 = 新的 RetrieveAllEntitiesResponse(); Request.EntityFilters = EntityFilters.All;响应 = (RetrieveAllEntitiesResponse)service.Execute(Request); var 实体 =Response.EntityMetadata;返回实体;我在加载表单中调用我的函数 var allEntities = CRMHelpers.GetEntities(service); foreach(所有实体中的 EntityMetadata 实体){cbxEntity.Items.Add(Entity.LogicalName);}
  • 它是停止工作(比如抛出了一些异常?)还是花了一些时间。我注意到的是,与正常获取数据相比,获取元数据通常需要更多时间。
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
相关资源
最近更新 更多