功能描述:對客戶實體實現自動編號功能,1、2、3、4......? 自動編號存放于屬性accountnumber.
原 理:在mscrm服務器用一個文本文件存放當前最新編號,每當創建客戶記錄時在PreCreate事件接口做以下步驟:
1、鎖定文本文件(避免其他人同時讀取造成編號重復)
2、獲取當前最新編號
3、當前最新編號+1更新到文本文件
4、解除鎖定文本文件
5、使用當前最新編號+1作為當前客戶記錄的編號
實現步驟:
1、客戶化把Account實體屬性accountnumber設置為只讀。
2、在<installdir>\Program Files\Microsoft CRM\server\bin\assembly\目錄下創建一個文本文件,命名為AccountAutoNumber.txt,打開AccountAutoNumber.txt,輸入初始化值為0。
??????設置文件AccountAutoNumber.txt安全屬性,如下圖:
?????
3、寫PlugIn接口處理函數,代碼如下:
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.IO;
using?Microsoft.Win32;
using?Microsoft.Crm.Sdk;
using?Microsoft.Crm.SdkTypeProxy;
namespace?AutoNumber
{
????public?class?PreCreateAccount?:?IPlugin
????{
????????#region?IPlugin?Members
????????public?void?Execute(IPluginExecutionContext?context)
????????{
????????????if?(context.InputParameters.Properties.Contains("Target")?&&?context.InputParameters.Properties["Target"]?is?DynamicEntity)
????????????{
????????????????DynamicEntity?entity?=?(DynamicEntity)context.InputParameters.Properties["Target"];
????????????????string?CurrentAutoNumber;
????????????????if?(entity.Name?==?EntityName.account.ToString())
????????????????{
????????????????????if?(entity.Properties.Contains("accountnumber")?==?false)
????????????????????{
????????????????????????lock?(this)
????????????????????????{
????????????????????????????RegistryKey?regkey?=?Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
????????????????????????????string?InstallDir?=?regkey.GetValue("CRM_Server_InstallDir").ToString()?+?@"\Server\bin\assembly\AccountAutoNumber.txt";
????????????????????????????TextReader?textReader?=?File.OpenText(InstallDir);
????????????????????????????CurrentAutoNumber?=?textReader.ReadLine();
????????????????????????????textReader.Close();
????????????????????????????CurrentAutoNumber?=?(long.Parse(CurrentAutoNumber)?+?1).ToString();
????????????????????????????TextWriter?textWriter?=?File.CreateText(InstallDir);
????????????????????????????textWriter.WriteLine(CurrentAutoNumber);
????????????????????????????textWriter.Close();
????????????????????????}
????????????????????????StringProperty?accountNumber?=?new?StringProperty("accountnumber",?CurrentAutoNumber);
????????????????????????entity.Properties.Add(accountNumber);
????????????????????}
????????????????????else
????????????????????{
????????????????????????throw?new?InvalidPluginExecutionException("自動編號只能由系統產生!");
????????????????????}
????????????????}
????????????}
????????}
????????#endregion
????}
}
4、注冊PlugIn插件,Plugin注冊畫面:
完整代碼下載