2016-08-31 10 views
0

Quote Productエンティティからデータを取得するはずのプラグインを作成しています。 デフォルトでは、パーセント値に割引はなく、割引額のみです。割引率をフォームに追加しました(ad_discountpercent)。今私はこのような新しい価格を計算する必要があります:CRMプラグインが動作しないC#

sum = (price - discount)*quantity*(100 - discount%)/100 

私はそれのためのコードを作った。このコードをビルドするときにエラーはありませんが、CRMに変更はありません。私はまた、私のプラグインを登録しました。

通貨タイプフィールドである3つのフィールドmanualdiscountamount,priceperunit,extendedamountがあります。 quantityは10進数で、ad_discountpercentは整数です。私は通貨から価値を得るためのいくつかの方法を見つけました、いくつかはコメントされています、いくつかはない、私はどちらが適切かわからないので。

1つの通知が結果を確認したが、期待どおりであるため、フェッチは正常に動作しています。コードの長さのために私は1行で圧縮しました。

ここでは、ジョブを実行するコードの一部です。変換に何か問題があるという情報はありません。新しい値を設定する適切な方法を使用していますか? 私はこれで新しいので、任意のコメントは私を助けるだろう。

string fetch1 = @"<fetch count='50' ><entity name='quotedetail' ><attribute name='manualdiscountamount' /><attribute name='priceperunit' /><attribute name='ad_discountpercent' /><attribute name='quantity' /> <attribute name='extendedamount' /> <filter> <condition attribute='ad_discountpercent' operator='not-null'/> </filter > </ entity>   </fetch>";    

EntityCollection result = service.RetrieveMultiple(new FetchExpression(fetch1)); 

foreach (var c in result.Entities) 
{   
    // int discountPer = (int)c.Attributes["ad_discountpercent"]; 
    int discountPer = c.GetAttributeValue<int>("ad_discountpercent"); 

    Money m = (Money)c.Attributes["priceperunit"]; 
    decimal price = m.Value; 
    // decimal price = c.GetAttributeValue<decimal>("priceperunit"); 

    Money m1 = (Money)c.Attributes["manualdiscountamount"]; 
    decimal discount = m1.Value; 
    // decimal discount = c.GetAttributeValue<decimal>("manualdiscountamount"); 

    //decimal discountPer = Convert.ToDecimal(c.Attributes["ad_discountpercent"]); 

    decimal quantity = Convert.ToDecimal(c.Attributes["quantity"]); 
    //decimal quantity = c.GetAttributeValue<decimal>("quantity"); 

    decimal sum = (price - discount) * quantity * (100 - discountPer)/100; 

    Money summTotal = new Money(); 
    summTotal.Value = sum; 
    entity["extendedamount"] = summTotal; 
    service.Update(entity); 
+1

ここで、結果を格納する 'entity'を取得しますか?また、どのステップでプラグインを登録しましたか( "QuoteProduct"の "Update")?ここでは、プラグインをデバッグする方法について説明します:[ステップバイステップ:CRM2011プラグインプロファイラを使って作業する](https://support.microsoft.com/en-us/kb/2778280) –

+0

これはコードには、私のエンティティを取得する前の部分があります。私はこのプラグインをデバッグしようとします。 –

+1

正しいエンティティがある場合は、値を更新する方法が有効です(同じエンティティを複数回更新することに注意してください)。あなたのプラグインが正しいステップに登録されていることを確認しましたか?プラグインのプロファイリングを開始すると、CRMからプラグインを起動するとエラーメッセージが表示されます。 –

答えて

2

ExtendedAmountは、priceperunitquantityに基づいて自動計算されたフィールドです。したがって、このフィールドの更新はCRMによって無視されます。

代わりにpriceperunitquantityを更新して、希望するextendedamountを取得してください。

entity["priceperunit"] = new Money((price - discount) * quantity * (100 - discountPer)/100); 
entity["quantity"] = 1; 
service.Update(entity); 
1

クエリでデータが返されない可能性があるため、ループは決して実行されず、更新は実行されません。

前述のように、プラグインプロファイラを使用してプラグインをデバッグする方法を見てみましょう。

また、そうしたくない場合は、 RetrieveMultipleを実行した後でコードに一時的な例外をスローし、返されるレコードの数を確認するためにresult.Entities.Count値を追加します。

+0

私はJavaScriptで同じフェッチを行い、フォームにputtedし、4行の結果があります。 –

関連する問題