1

crm money フィールド (estimatedrevenue) に関する質問があります。これはカスタム フィールドであり、10 進フィールド (RevenueInclusiveTax) です。通貨の基準値 = Math.ceil(RevenueInclusiveTax) を計算します。Javascriptで試してみると、正しい場合もあれば間違っている場合もあります。だから私はプラグインを書き、ベース値を更新しようとします。プラグインは機能しており、コーディングで値を更新しますが、フォームを開くとエラー メッセージが表示され、基本値が更新されません。マネーベースの値を更新できますか?

これが私のプラグインコードです。

public class EstimatedRevenue : IPlugin
{
    #region Class Level Variables
    //IServiceProvider _serviceProvider;
    //IOrganizationServiceFactory _serviceFactory = null;
    //IOrganizationService _service = null;
    //IPluginExecutionContext _context = null;

    Entity _target = null;
    Entity _preImage = null;
    Entity _postImage = null;
    Guid _currentUser;
    decimal revinvtax;
    #endregion

    #region  IPlugin Members
    public void Execute(IServiceProvider serviceProvider)
    {
        try
        {
            string message = null;
            IPluginExecutionContext _context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));

            #region Organization Services
            // Obtain the organization service reference.
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = serviceFactory.CreateOrganizationService(_context.UserId);
            #endregion

            var ServiceContext = new OrganizationServiceContext(service);

            _currentUser = _context.UserId;
            message = _context.MessageName.ToLower();

            if (message == "create") 
            {
                if (_context.InputParameters.Contains("Target") && _context.InputParameters["Target"] != null)
                    _target = (Entity)_context.InputParameters["Target"];

                if (_context.PreEntityImages.Contains("PreImage") && _context.PreEntityImages["PreImage"] != null)
                    _preImage = (Entity)_context.PreEntityImages["PreImage"];

                if (_context.PostEntityImages.Contains("PostImage") && _context.PostEntityImages["PostImage"] != null)
                    _postImage = (Entity)_context.PostEntityImages["PostImage"];

                if (_target.Attributes.Contains("hm_revenueincludingtax"))
                {
                    revinvtax = (decimal)_target.Attributes["hm_revenueincludingtax"];
                    decimal ceilvalue = Math.Ceiling(revinvtax);
                    _target.Attributes["hm_estimatedrevenue_base"] = ceilvalue;
                    service.Update(_target);
                }
            }
            if (message == "update")
            {
                if (_context.InputParameters.Contains("Target") && _context.InputParameters["Target"] != null)
                    _target = (Entity)_context.InputParameters["Target"];

                if (_context.PreEntityImages.Contains("PreImage") && _context.PreEntityImages["PreImage"] != null)
                    _preImage = (Entity)_context.PreEntityImages["PreImage"];

                if (_context.PostEntityImages.Contains("PostImage") && _context.PostEntityImages["PostImage"] != null)
                    _postImage = (Entity)_context.PostEntityImages["PostImage"];

                if (_target.Attributes.Contains("hm_revenueincludingtax"))
                {
                    revinvtax = (decimal)_target.Attributes["hm_revenueincludingtax"];
                    decimal ceilvalue = Math.Ceiling(revinvtax);
                    _target.Attributes["hm_estimatedrevenue_base"] = ceilvalue;
                    //service.Update(_target);
                    //ServiceContext.AddObject(_target);
                    //ServiceContext.SaveChanges();
                }
            }
        }
        catch (Exception ex)
        {
            throw new InvalidPluginExecutionException(ex.Message, ex);
        }
    }
    #endregion
}

フォームを開いたときのエラーページは次のとおりです。 ここに画像の説明を入力

4

2 に答える 2

2

属性を更新しないでください_base-その内部。代わりに、作成した属性を更新してください(hm_estimatedrevenue)。呼び出し元のユーザーの通貨を採用し、_base自動的に処理されます。

于 2012-06-20T06:30:17.840 に答える
0

_base名前が示すように、基本通貨の値に格納されます。したがって、ヨーロッパにいて、インストール中に基本通貨をユーロとして設定した場合、それは に保存される値_baseです。250 ユーロを入力_baseすると、値は 250 になります。

hm_estimatedrevenueフィールドが計算されます:_bases/exchange_rate複数通貨組織に対応します。

hm_estimatedrevenueただし、_baseはフィールドであるため、更新する必要がありreadonlyます。

お役に立てれば。

于 2013-04-02T16:16:59.357 に答える