我正在创建一个silverlight应用程序作为CRM 2011的Web资源。现在我在DB中创建一个ServiceAppointment记录,在创建它之后我想将其状态更改为“保留”而不是请求。
我在Google上搜索了这个内容并遇到了Close a Service Activity Through Code和Microsoft.Crm.Sdk.Messages.SetStateRequest
等示例他们都建议使用“SetStateRequest”并使用这个我必须设置OptionSetValue像
request["State"] = new OptionSetValue(4);
但是上面的行给出了错误,说“OptionSetValue不包含带有一个参数的构造函数” BTW我在Silverlight应用程序中使用CRM 2011服务的SOAP端点
任何想法的朋友?
修改
以下是我的代码
var request = new OrganizationRequest { RequestName = "SetStateRequest" };
request["State"] = 3;
request["Status"] = 4;
request["EntityMoniker"] = new EntityReference() { Id = createdActivityId, LogicalName = "serviceappointment" };
crmService.BeginExecute(request,ChangeActivityStatusCallback,crmService);
我的回调函数是 private void ChangeActivityStatusCallback(IAsyncResult result){
OrganizationResponse response;
try
{
response = ((IOrganizationService)result.AsyncState).EndExecute(result);
}
catch (Exception ex)
{
_syncContext.Send(ShowError, ex);
return;
}
}
答案 0 :(得分:0)
你必须要引用一些不是Microsoft.Xrm.Sdk
的其他OptionSetValue类。尝试附加命名空间以查看是否可以解决您的问题:
request["State"] = new Microsoft.Xrm.Sdk.OptionSetValue(4);
另外,为什么你在SetStateRequest上使用后期绑定?只需使用SetStateRequest类:
public static Microsoft.Crm.Sdk.Messages.SetStateResponse SetState(this IOrganizationService service,
Entity entity, int state, int? status)
{
var setStateReq = new Microsoft.Crm.Sdk.Messages.SetStateRequest();
setStateReq.EntityMoniker = entity.ToEntityReference();
setStateReq.State = new OptionSetValue(state);
setStateReq.Status = new OptionSetValue(status ?? -1);
return (Microsoft.Crm.Sdk.Messages.SetStateResponse)service.Execute(setStateReq);
}
答案 1 :(得分:0)
感谢Daryl为您付出的时间和精力。我用你建议的方式解决了我的问题。
我发布的代码对我有用。
var request = new OrganizationRequest { RequestName = "SetState" };
request["State"] = new OptionSetValue { Value = 3 };
request["Status"] = new OptionSetValue { Value = 4 };
request["EntityMoniker"] = new EntityReference() { Id = createdActivityId, LogicalName = "serviceappointment" };
crmService.BeginExecute(request,ChangeActivityStatusCallback,crmService);
private void ChangeActivityStatusCallback(IAsyncResult result) {
OrganizationResponse response;
try
{
response = ((IOrganizationService)result.AsyncState).EndExecute(result);
}
catch (Exception ex)
{
_syncContext.Send(ShowError, ex);
return;
}
}