如何在 C# 中获取当前年份?

Sre*_*dus 0 crm dynamics-crm

我的 CRM 实例中有一个自动编号插件。基本上,前缀是当前年份。所以我希望它像这样工作,如果年份不是当前年份,则用当前年份更新它。

new_prefix是包含年份的字段,如果与当前年份不同,我需要更改该年份。该插件目前可以使用,我只是想更改年份(如果年份不同)。这也一直告诉我代码太多而细节太少。

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using System.Xml.Linq;
using System;
using System.Linq;
using System.Globalization;

namespace UGKCK.CRM.PlugIns
{
    public class AutoNumbering : IPlugin
    {
        #region Secure/Unsecure Configuration Setup
        private string _secureConfig = null;
        private string _unsecureConfig = null;

        public AutoNumbering(string unsecureConfig, string secureConfig)
        {
            _secureConfig = secureConfig;
            _unsecureConfig = unsecureConfig;
        }
        #endregion
        public void Execute(IServiceProvider serviceProvider)
        {
            ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            IOrganizationService service = factory.CreateOrganizationService(context.UserId);
            OrganizationServiceContext orgService = new OrganizationServiceContext(service);

            try
            {
                Entity entity = (Entity)context.InputParameters["Target"];

                Entity autoNumberingRecord = RetrieveAutoNumbering(orgService, entity);
                UpdateNumber(service, autoNumberingRecord, entity);
                UpdateNextNumber(service, autoNumberingRecord);
            }
            catch (Exception e)
            {
                throw new InvalidPluginExecutionException(e.Message);
            }
        }

        private Entity RetrieveAutoNumbering(OrganizationServiceContext orgService, Entity entity)
        {
            Entity retrievedAutoNumber = (from an in orgService.CreateQuery("new_autonumbering")
                                          where (String)an["new_entity"] == entity.LogicalName
                                          select an).FirstOrDefault();

            Entity autoNumber = new Entity("new_autonumbering");
            autoNumber.Id = retrievedAutoNumber.Id;
            autoNumber["new_prefix"] = retrievedAutoNumber["new_prefix"];
            autoNumber["new_nextnumber"] = retrievedAutoNumber["new_nextnumber"];

            return autoNumber;
        }

        private void UpdateNumber(IOrganizationService service, Entity autoNumberingRecord, Entity target)
        {
            var prefix = autoNumberingRecord.Attributes["new_prefix"].ToString();
            var number = autoNumberingRecord.Attributes["new_nextnumber"].ToString();

            if (target.LogicalName == "new_servicerequest")
            {

                target["new_servicerequestnumber"] = prefix + "-" + number;
            }
            else if (target.LogicalName == "contact")
            {

                target["new_contactnumber"] = prefix + "-" + number;
            }
            service.Update(target);
        }

        private void UpdateNextNumber(IOrganizationService service, Entity autoNumberingRecord)
        {
            var currentNumber = (int)autoNumberingRecord.Attributes["new_nextnumber"];
            var nextNumber = currentNumber + 1;

            autoNumberingRecord["new_nextnumber"] = nextNumber;
            service.Update(autoNumberingRecord);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Aro*_*ron 5

DateTime.Now.Year将为您提供当前年份。

由于您似乎可以使用此插件来处理其正常的自动编号任务,再加上动态更新前缀,因此您可以做的是添加一个方法来检查前缀,并在必要时将其设置为当前年份,然后再执行其他操作。

private void setPrefix(Entity autoNumberingRecord)
{
    var year = DateTime.Now.Year;

    if(autoNumberingRecord["new_prefix"] != year)
    {
        autoNumberingRecord["new_prefix"] = year;
    }           
}
Run Code Online (Sandbox Code Playgroud)

然后从主 try 子句中调用它:

Entity entity = (Entity)context.InputParameters["Target"];
Entity autoNumberingRecord = RetrieveAutoNumbering(orgService, entity);
setPrefix(autoNumberingRecord);
UpdateNumber(service, autoNumberingRecord, entity);
UpdateNextNumber(service, autoNumberingRecord);
Run Code Online (Sandbox Code Playgroud)

这样,当您更新目标记录上的号码以及更新 autoNumberingRecord 时,就会正确设置前缀。

由于您总是希望前缀为当前年份,因此您可以每次都设置它,但我想如果您正在审核记录或其他内容,除非有必要,否则您可能希望避免设置该字段。

话虽如此,我可能会采取使用早期绑定类并向 AutoNumberingRecord 类添加一个名为 Prefix 的属性的方法,其中包括 new_prefix 字段的比较和更新逻辑。