您的位置:首页 > 编程语言

Dynamics CRM 2011编程系列(1):系统实体状态更新

2015-08-28 15:50 495 查看
我们在更改系统实体的状态时,不能直接update实体的statecode,需要引用Execute来执行请求,
然后更新实体的状态,在此举例商机的赢单,分别用插件Plguin和SOAP的方式执行。
查询SDK,赢单需要用WinOpportunityRequest请求,插件形式更新代码如下:


Entity target = new Entity() { LogicalName = "opportunityclose" };
target["opportunityid"] = new EntityReference()
{ LogicalName = "opportunity", Id = entity.Id };
WinOpportunityRequest request = new WinOpportunityRequest();
request.OpportunityClose = target;
request.Status = new OptionSetValue(3);
service.Execute(request);


更新商机为赢单后,查看商机的状态,导航栏保存等按钮即变为灰色,页面无法进行更改操作,
即显示该商机已结束。
SOAP方式更新代码,可以采用SDK现有的工具SOAPLogger生成报文,该工具打包在Dynamics
CRM 2011 SDK中的\samplecode\cs\client(具体报文工具使用情况请看下一篇: Dynamics
CRM 2011编程系列(2):使用SOAPLogger抓取报文),客户端添加按钮后调用方法更新商机。
SOAP报文如下:


function ChangeStatus(entityName, entityId, stateCode, statuscode) {
// create the request
var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
request += "<s:Body>";
request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
request += "<request i:type=\"b:WinOpportunityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>OpportunityClose</c:key>";
request += "<c:value i:type=\"a:Entity\">";
request += "<a:Id>" + entityId + "</a:Id>";
request += "<a:LogicalName>opportunity</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>State</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + stateCode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Status</c:key>";
request += "<c:value i:type=\"a:OptionSetValue\">";
request += "<a:Value>" + statuscode + "</a:Value>";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "</a:Parameters>";
request += "<a:RequestId i:nil=\"true\" />";
request += "<a:RequestName>SetState</a:RequestName>";
request += "</request>";
request += "</Execute>";
request += "</s:Body>";
request += "</s:Envelope>";

//send set state request
$.ajax({
async: false,
type: "POST",
contentType: "text/xml; charset=utf-8",
datatype: "xml",
url: Xrm.Page.context.getServerUrl() + "/XRMServices/2011/Organization.svc/web",
data: request,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
XMLHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
},
success: function (data, textStatus, XmlHttpRequest) {
alert("The Entity Status has been changed");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  赢单