我为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?
答案 0 :(得分:1)
查看OrganizationRequest
的{{3}}。其中一个属性是Parameters
,它是请求工作所需的所有数据的集合。
您的getter和setter应该设置(或检索)该集合中的值。您不能只创建一个私有字段并期望它可以工作。 ;)
对于记录 - CRM SDK中可用的所有其他请求类遵循相同的模式 - 它们派生自OrganizationRequest
,而额外属性只是操纵所需Parameters
的快捷方式。
答案 1 :(得分:0)
根据您获得的异常进行猜测,因为我不知道crm2011。但是例外是说该领域缺失,你拥有的是一个属性。虽然差异可能看起来微不足道,但使用反射时存在很大差异。
您可能需要做的是:
public Guid MetadataId;
删除你的财产。