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); } }); }
相关文章推荐
- Struts2中实现文件上传的功能
- 关于Java关键词Transient的理解
- struts2 直接JSON返回一个对象到JSP
- Qt入门学习——常用部件介绍
- c#线程同步
- C,C++ 动态字符串的实现
- C#调用微软自带的计算器、记事本等软件
- C#调用微软自带的计算器、记事本等软件
- eclipse+gradle多渠道打包
- Java避免空指针
- java拷贝/复制文件到其他文件夹中
- Java避免空指针
- Java 汉字转unicode
- Transaction 浅析
- 【转】Java中级开发工程师知识点归纳
- java之学习多线程(三)
- Java – Reading a Large File Efficiently--转
- n久前的51汇编程序
- c#模拟请求获取与设置cookies
- java多线程编程--如何终止一个线程