1

CRM DateTime の問題に関する質問があります。機会フォームには、「日付のみ」形式のフォームに表示されるカスタム DateTime フィールド (入札提出日) があります。および入札提出日が変更されたときに日付を変更する他の文字列フィールド (Tender Date)。たとえば... 入札提出日は 29/06/2011 12:00:00 入札日は 29/06/2012 である必要があります

Create Post-operation と Update Pre-operation のプラグインを作成します。TenderSubDate.Day、Month、Year を取得します。
Crm タイム ゾーンは (GMT+08:00) クアラルンプール、シンガポールです。その後、中部標準時 (米国およびカナダ) (GMT-06:00) に変更します。

問題は、入札の提出日に基づいて入札の日付を更新すると、プログラムは入札のサブ日付よりも 1 日短いか、またはそれよりも大きい日付を返すことです。言ってみましょう..

最初のシナリオ

入札提出日は 2012 年 6 月 29 日午前 12:00:00 です。

プログラムは28/06/2012を返します(これは間違っており、2012 年 6 月 29 日のはずです)

第二のシナリオ

入札提出日は 2012 年 1 月 8 日午前 12:00:00 です。

プログラムは32/07/2012を返します(これは間違っており、2012 年 1 月 8 日のはずです)

プログラムで何をすべきか。アイデアを教えてください。これが私のプラグインコードです

public class TenderSubDateChange : 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;
    #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")//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"];

                DateTime hm_tenderdate;
                if (_target.Attributes.Contains("hm_tendersubmissiondate"))
                {
                    hm_tenderdate = (DateTime)_target.Attributes["hm_tendersubmissiondate"];
                    _target.Attributes["hm_tendersubdate"] = (hm_tenderdate.Day) + "/" + hm_tenderdate.Month + "/" + hm_tenderdate.Year;
                    service.Update(_target);
                }
            }
            if (message == "update")//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"];

                DateTime hm_tenderdate;
                if (_target.Attributes.Contains("hm_tendersubmissiondate"))
                {
                    hm_tenderdate = (DateTime)_target.Attributes["hm_tendersubmissiondate"];
                    _target.Attributes["hm_tendersubdate"] = (hm_tenderdate.Day) + "/" + hm_tenderdate.Month + "/" + hm_tenderdate.Year;
                }
            }
        }
        catch (Exception ex)
        {
            throw new InvalidPluginExecutionException(ex.Message, ex);
        }
    }
    #endregion
}

ここに画像の説明を入力

4

1 に答える 1

4

私は以前にこの問題に直面し、私を夢中にさせました。解決策はUTC時間を現地時間に変換することです

DateTime tenderDate = ((DateTime)target["new_tender"]).ToLocal();
于 2012-06-27T05:39:14.950 に答える