Loading... <p><strong>功能描述:</strong>对客户实体实现自动编号功能,1、2、3、4...... 自动编号存放于属性accountnumber.<br /><strong>原 理:</strong>在mscrm服务器用一个文本文件存放当前最新编号,每当创建客户记录时在PreCreate事件接口做以下步骤:<br />1、锁定文本文件(避免其他人同时读取造成编号重复)<br />2、获取当前最新编号<br />3、当前最新编号+1更新到文本文件<br />4、解除锁定文本文件<br />5、使用当前最新编号+1作为当前客户记录的编号</p> <p><!--more--><br /><strong>实现步骤:<br /></strong>1、客户化把Account实体属性accountnumber设置为只读。<br />2、在<<em>installdir</em>>\Program Files\Microsoft CRM\server\bin\assembly\目录下创建一个文本文件,命名为AccountAutoNumber.txt,打开AccountAutoNumber.txt,输入初始化值为0。<br /> 设置文件AccountAutoNumber.txt安全属性,如下图:<br /> <img src="http://images.cnblogs.com/cnblogs_com/caims/2008-08-11-1.jpg" border="0" alt="2008-08-11-1.jpg" width="367" height="464" /><br />3、写PlugIn接口处理函数,代码如下:<br /><span style="color: #0000ff;">using</span><span style="color: #000000;"> System;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.IO;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Win32;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Crm.Sdk;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Microsoft.Crm.SdkTypeProxy;<br /><br /></span><span style="color: #0000ff;">namespace</span><span style="color: #000000;"> AutoNumber<br />{<br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> PreCreateAccount : IPlugin<br /> {<br /> </span><span style="color: #0000ff;">#region</span><span style="color: #000000;"> IPlugin Members</span><span style="color: #000000;"><br /><br /> </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> Execute(IPluginExecutionContext context)<br /> {<br /> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (context.InputParameters.Properties.Contains(</span><span style="color: #800000;">"</span><span style="color: #800000;">Target</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #000000;">&&</span><span style="color: #000000;"> context.InputParameters.Properties[</span><span style="color: #800000;">"</span><span style="color: #800000;">Target</span><span style="color: #800000;">"</span><span style="color: #000000;">] </span><span style="color: #0000ff;">is</span><span style="color: #000000;"> DynamicEntity)<br /> {<br /> DynamicEntity entity </span><span style="color: #000000;">=</span><span style="color: #000000;"> (DynamicEntity)context.InputParameters.Properties[</span><span style="color: #800000;">"</span><span style="color: #800000;">Target</span><span style="color: #800000;">"</span><span style="color: #000000;">];<br /> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> CurrentAutoNumber;<br /><br /> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (entity.Name </span><span style="color: #000000;">==</span><span style="color: #000000;"> EntityName.account.ToString())<br /> {<br /> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (entity.Properties.Contains(</span><span style="color: #800000;">"</span><span style="color: #800000;">accountnumber</span><span style="color: #800000;">"</span><span style="color: #000000;">) </span><span style="color: #000000;">==</span><span style="color: #000000;"> </span><span style="color: #0000ff;">false</span><span style="color: #000000;">)<br /> {<br /> </span><span style="color: #0000ff;">lock</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">this</span><span style="color: #000000;">)<br /> {<br /> RegistryKey regkey </span><span style="color: #000000;">=</span><span style="color: #000000;"> Registry.LocalMachine.OpenSubKey(</span><span style="color: #800000;">"</span><span style="color: #800000;">SOFTWARE\\Microsoft\\MSCRM</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br /> </span><span style="color: #0000ff;">string</span><span style="color: #000000;"> InstallDir </span><span style="color: #000000;">=</span><span style="color: #000000;"> regkey.GetValue(</span><span style="color: #800000;">"</span><span style="color: #800000;">CRM_Server_InstallDir</span><span style="color: #800000;">"</span><span style="color: #000000;">).ToString() </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #800000;">@"</span><span style="color: #800000;">\Server\bin\assembly\AccountAutoNumber.txt</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br /><br /> TextReader textReader </span><span style="color: #000000;">=</span><span style="color: #000000;"> File.OpenText(InstallDir);<br /> CurrentAutoNumber </span><span style="color: #000000;">=</span><span style="color: #000000;"> textReader.ReadLine();<br /> textReader.Close();<br /> CurrentAutoNumber </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">long</span><span style="color: #000000;">.Parse(CurrentAutoNumber) </span><span style="color: #000000;">+</span><span style="color: #000000;"> </span><span style="color: #800080;">1</span><span style="color: #000000;">).ToString();<br /> TextWriter textWriter </span><span style="color: #000000;">=</span><span style="color: #000000;"> File.CreateText(InstallDir);<br /> textWriter.WriteLine(CurrentAutoNumber);<br /> textWriter.Close();<br /> }<br /><br /> StringProperty accountNumber </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> StringProperty(</span><span style="color: #800000;">"</span><span style="color: #800000;">accountnumber</span><span style="color: #800000;">"</span><span style="color: #000000;">, CurrentAutoNumber);<br /> entity.Properties.Add(accountNumber);<br /> }<br /> </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br /> {<br /> </span><span style="color: #0000ff;">throw</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> InvalidPluginExecutionException(</span><span style="color: #800000;">"</span><span style="color: #800000;">自动编号只能由系统产生!</span><span style="color: #800000;">"</span><span style="color: #000000;">);<br /> }<br /> }<br /> }<br /> }<br /><br /> </span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;"><br /> }<br />}<br /></span>4、注册PlugIn插件,Plugin注册画面:<br /><img src="http://images.cnblogs.com/cnblogs_com/caims/2008-08-11-2.jpg" border="0" alt="2008-08-11-2.jpg" width="428" height="417" /></p> 相关文章 SQL Server 2008 评估期已过的解决办法 远程桌面连接报【由于CredSSP 加密数据库修正】错误解决办法 成都萨莫尔科技介绍 【通俗版】宽带网络公司是如何进行网络计费的? SACRM的来源 轻武计费认证系统KDBOSS白皮书 Windows 9真的要免费了? 微软中国:盒装Windows 8都是盗版 微软正式发布Windows 8 aipuboss2crm转换语句.sql Last modification:December 9th, 2010 at 04:51 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat