2017-08-03 103 views
1

我試圖通過使用WinOpportunityRequest & LoseOpportunityRequest MSDN中提供的API更新開放機會的狀態。 我跟着這是在MSDN &給出的代碼,我連稱計算器的Set Opportunity Status如何設置機會狀態 - Dynamics CRM?

但是,當我運行的開放的機會這下面的代碼,它拋出錯誤,指出

LoseOpportunityRequest req = new LoseOpportunityRequest(); 
Entity opportunityClose = new Entity("opportunityclose"); 
opportunityClose.Attributes.Add("opportunityid", new EntityReference(OptyEntityName, new Guid("xxxx-xxx"))); 
opportunityClose.Attributes.Add("subject", "Lost the Opportunity!"); 
req.OpportunityClose = opportunityClose; 
// 4 = Cancelled and 5 = Out-Sold 
req.Status = new OptionSetValue(4); 
LoseOpportunityResponse resp = (LoseOpportunityResponse)_serviceProxy.Execute(req); 

錯誤 -

4是不是一個有效的狀態代碼的機會與ID(GUID)

當我試圖改變封閉機會的狀態它說機會已經關閉

還有一件事要考慮的是,我的CRM中的這種狀態有一個掛鎖圖標,意味着它被鎖定。

那麼是否有可能改變狀態和不是基於角色?

回答

1

對於一個開放的機會,我們可以改變狀態爲贏或輸。因此,我們將使用WinOpportunityRequestLoseOpportunityRequest in here

因此,我們需要將值更改爲-1,以便CRM可以加載默認狀態代碼。

req.Status = new OptionSetValue(4); 

更改爲-1後,它不會拋出任何異常。

req.Status = new OptionSetValue(-1); 

一旦執行調用執行。機會值將改變爲失去。機會將被關閉。

要重新打開封閉的機會,我們可以使用SetStateRequest class。代碼如下。

   var stateRef = new EntityReference("optyname", new Guid("optyid")); 
       SetStateRequest req = new SetStateRequest(); 
       req.State = new OptionSetValue(0); 
       req.Status = new OptionSetValue(2); 
       req.EntityMoniker = stateRef; 
       SetStateResponse stateSet = (SetStateResponse)_serviceProxy.Execute(req); 

在執行調用執行之後,機會狀態被重新打開並且狀態顯示爲打開狀態。

狀態碼與狀態不同。州代碼可以打開,贏或結束。狀態可以有多個值。詳細信息請見msdn

1

你說得對。狀態&狀態是連體雙胞胎。你不能只更新其中一個,總是成對的。

enter image description here

狀態= StateCode
狀態原因=的StatusCode(帶掛鎖場)

More read

在你的答案代碼,這是在SetStateRequest REQ正確陷害。

req.State = new OptionSetValue(0); 
req.Status = new OptionSetValue(2); 

但是在OP中,您只設置狀態不是狀態。

MSDNLoseOpportunityRequestOpportunityClose實體必須關閉它,而沒有問題,當你只傳遞狀態。但你不是alone

編號:Opportunity & OpportunityClose