如何为从OrganizationRequest派生的自定义类创建metadataId?

时间:2013-07-31 10:00:00

标签: c# dynamics-crm-2011

我为crm2011创建了一个自定义检索实体响应类,以便序列化该类。实体响应类派生自 OrganizationRequest 类。它如下图所示:

public partial class RetrieveEntityRequest : OrganizationRequest
{

    public RetrieveEntityRequest()
    {

    }
    private System.Guid metadataIdField;
    public System.Guid MetadataId
    {
        get
        {
            return this.metadataIdField;
        }
        set
        {
            this.metadataIdField = value;
        }
    }

    public EntityFilters EntityFilters { get; set; }
    public string LogicalName { get; set; }
    public bool RetrieveAsIfPublished { get; set; }
}

现在我运行下面显示的代码

using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null))
{
    try
    {
        serviceProxy.EnableProxyTypes();
        request = new CrmUtilities.RetrieveEntityRequest();
        request.LogicalName=entityName;
        request.EntityFilters = EntityFilters.Entity;
        request.RequestName = requestName;

        //Execute Request
        retrieveEntityResponse =   (CrmUtilities.RetrieveEntityResponse)serviceProxy.Execute(request);
    }

    catch (System.Web.Services.Protocols.SoapException ex)
    {
        throw ex;
    }

    catch (Exception ex)
    {
        throw ex;
    }
}

它表示缺少 MetadataId 这是必填字段。抛出的异常是 发现了OrganizationServiceFault //必填字段'MetadataId'是丢失。 在这种情况下,如何为此自定义对象创建metadataId?

2 个答案:

答案 0 :(得分:1)

查看OrganizationRequest的{​​{3}}。其中一个属性是Parameters,它是请求工作所需的所有数据的集合。

您的getter和setter应该设置(或检索)该集合中的值。您不能只创建一个私有字段并期望它可以工作。 ;)

对于记录 - CRM SDK中可用的所有其他请求类遵循相同的模式 - 它们派生自OrganizationRequest,而额外属性只是操纵所需Parameters的快捷方式。

答案 1 :(得分:0)

根据您获得的异常进行猜测,因为我不知道crm2011。但是例外是说该领域缺失,你拥有的是一个属性。虽然差异可能看起来微不足道,但使用反射时存在很大差异。

您可能需要做的是:

public Guid MetadataId;

删除你的财产。