2011-11-14 34 views
3

沿着this question的路線行駛。在Dynamics CRM 2011中標記發票作爲付款

我在使用Silverlight將Dynamics CRM 2011中的現有發票標記爲付費標記。

按照documentation,我需要做的就是將狀態設置代碼= 100001和國家代碼= 2

當我這樣做,我得到一個「NOTFOUND」異常。

Guid invoiceID = new Guid("Existing Invoice Guid"); 
IOrganizationService orgService = OrgServiceFactory.GetInstance(); 

orgService.BeginRetrieve("invoice", invoiceID, new ColumnSet(new string[] { "invoiceid", "statecode", "statuscode" }), (result) => 
{ 
    var fetchResp = orgService.EndRetrieve(result); 

    var statecodeAttrib = fetchResp.Attributes.Single(a => a.Key == "statecode"); 
    OptionSetValue statecode = (OptionSetValue)statecodeAttrib.Value; 
    statecode.Value = 2; 


    var statuscodeAttrib = fetchResp.Attributes.Single(a => a.Key == "statuscode"); 
    OptionSetValue statuscode = (OptionSetValue)statuscodeAttrib.Value; 
    statuscode.Value = 100001; 

    orgService.BeginUpdate(fetchResp, (updateResult) => 
    { 
     /* Web Exception thrown here */ 
     orgService.EndUpdate(updateResult); 
     Console.Write(""); 
    }, orgService); 

}, orgService); 

如果我刪除「statecode」一下,只是嘗試和的StatusCode設置爲2 - (部分出貨)或4 - (結算)它按預期工作。

只有當我嘗試並設置它都失敗。如果我只是嘗試,並設置它也沒有的StatusCode = 100001,100002,100003(完全,部分,已取消)

有另一種方式支付給標記發票嗎?

回答

5

更改記錄的國家,你總是需要,而不是隻是一個簡單的更新狀態和的StatusCode執行單獨SETSTATE請求。在你的情況下,你可以做一個SetStateDynamicEntitySetStateInvoice請求。

不幸的是,這些消息在CRM 2011的OData服務中不可用。您需要做的是通過Silverlight使用SOAP Web服務。 SDK has a walkthrough,如果你想開始,SilverCRMSoap庫是一個很好的快速實施演練。

+0

很奇怪,我可以設置狀態碼爲2或3,但不是其他的。 –

+0

只需使用更新就可以將狀態碼更改爲處於相同狀態的其他狀態,但如果更改狀態,則需要實際發送SetState消息。 – Matt

4

執行一個標準的SetState請求也將工作,否定建立一個SOAP連接的需要。

SetStateRequest request = new SetStateRequest(); 
request.EntityMoniker = new EntityReference(Invoice.EntityLogicalName, invoice.Id); 
request.State = new OptionSetValue ((int)InvoiceState.Paid); 
request.Status = new OptionSetValue (100001); // Complete 
SetStateResponse response = (SetStateResponse)_service.Execute(request);