2011-11-14 10 views
3

this questionの行に沿ってダイナミクス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」ビットを削除し、ちょうど試してみて、2からstatusCodeを設定した場合 - 期待どおりに動作します(請求されます) - (一部付属)または4。

私は両方を試して設定しようとすると失敗します。ステータスコード= 100001,100002,100003(完了、部分、キャンセル)を設定しようとすると失敗します

請求書を支払い済みとしてマークする別の方法はありますか?

答えて

5

レコードの状態を変更するには、状態とステータスコードの単なる更新ではなく、常に別のSetState要求を実行する必要があります。あなたの場合、SetStateDynamicEntityまたはSetStateInvoiceリクエストを行うことができます。

残念ながら、これらのメッセージはCRM 2011のODataサービスからは入手できません.Silovelightを使用して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); 
関連する問題