功能描述:对客户实体实现自动编号功能,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安全属性,如下图:
      2008-08-11-1.jpg
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注册画面:
2008-08-11-2.jpg


完整代码下载

posted on 2008-08-11 22:37  Batistuta Cai  阅读(4200)  评论(7编辑  收藏  举报