MSCRM二次开发实现自动编号功能

功能描述:对客户实体实现自动编号功能,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


完整代码下载

转载于:https://www.cnblogs.com/caims/archive/2008/08/11/1265527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这篇文章可以满足你80%日常工作!成功入职腾讯

什么是中年危机 根据权威数据显示&#xff0c;国内IT程序员鼎盛时期是在25-27岁左右&#xff0c;30岁对于程序员而言完全是一个38线&#xff0c;接着就是转业转岗的事情&#xff0c;这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右&#xff0c;然而…

java并发synchronized 锁的膨胀过程(锁的升级过程)深入剖析(2)

接下来我们分析两个批量偏向撤销的相关案例&#xff08;禁止偏向锁延迟的情况下&#xff1a;-XX:UseBiasedLocking -XX:BiasedLockingStartupDelay0&#xff09;&#xff1a; 案例一&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28…

连续四年百度Android岗必问面试题!Android校招面试指南

前言 刚从阿里面试回来&#xff0c;想和大家分享一些我的面试经验&#xff0c;以及面试题目。 这篇文章将会更加聚焦在面试前需要看哪些资料&#xff0c;一些面试技巧以及一些这次的面试考题。 面试经历 7月确定想走后开始看各种面经&#xff0c;复习基础知识&#xff0c;月…

透彻解析!字节跳动Android实习面试凉凉经,年薪超过80万!

什么是Kotlin? Kotlin&#xff0c;如前面所说&#xff0c;它是JetBrains开发的基于JVM的语言。JetBrains因为创造了一个强大的Java开发IDE被大家所熟知。Android Studio&#xff0c;官方的Android IDE&#xff0c;就是基于Intellij&#xff0c;作为一个该平台的插件。 Kotli…

synchronized 底层如何实现?什么是锁升级、降级?

synchronized 底层如何实现&#xff1f;什么是锁升级、降级&#xff1f; synchronized 代码块是由一对 monitorenter/monitorexit 指令实现的&#xff0c;Monitor 对象是同步的基本实现单元。 https://docs.oracle.com/javase/specs/jls/se10/html/jls-8.html#d5e13622 在Jav…

Spring主要用到两种设计模式

Spring主要用到两种设计模式 1、工厂模式 Spring容器就是实例化和管理全部Bean的工厂。 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来。 调用者只关心被调用者必须满足的某种规则&#xff0c;这里的规则我们可以看做是接口&#xff0c;而不必关心实例的具体实…

意外收获字节跳动内部资料,已开源

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期&#xff0c;招聘需求集中、空缺岗位多&#xff0c;用人单位也习惯在初秋进行大规模招聘。 金九银十&#xff0c;招聘旺季&#xff0c;也是一个求职旺季。 不打无准备的仗&#xff0c;在这种关键时期&…

成功跳槽百度工资从15K涨到28K,威力加强版

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了&#xff0c;但是中高级的Android技术人才仍然稀缺“&#xff0c;这的确不假&#xff0c;从我在百度所进行的一些面试来看&#xff0c;找一个适合的高级Android工程师的确不容易&#xff0c;一般需要进行大…

Redis下载及安装(windows版)

下载地址 1、Github下载地址&#xff1a;https://github.com/MicrosoftArchive/redis/releases 2、百度网盘下载地址 https://pan.baidu.com/s/1z1_OdNVbtgyEjiktqgB83g 密码&#xff1a;kdfq 安装过程 1.首先先把下载的压缩包解压到一个文件夹中 2.打开cmd指令窗口 3.输入你刚…

成功跳槽百度工资从15K涨到28K,跳槽薪资翻倍

前言 这篇文章主要是分享今年上半年的面试心得&#xff0c;现已就职于某大厂有三个月了&#xff0c;近期有很多公司均已启动秋招&#xff0c;也祝大家在 2020 的下半年面试顺利&#xff0c;获得理想的offer&#xff01; 之前找工作的那段时间感想颇多&#xff0c;总结一点面试…

分布式锁RedLock的java实现Redisson

1. 概述Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue,…

我三年开发经验,从字节跳动抖音离职后,看看这篇文章吧!

最新BAT大厂面试者整理的Android面试题目&#xff01; 近期根据网友分享大厂面试题目&#xff0c;今天我将网友面试的BAT等大厂Android面试题目整理出来&#xff0c;希望能够帮助大家&#xff01; 珍藏版&#xff08;1&#xff09;——高级 UI 晋升 第一节、触摸事件分发机制…

arthas命令redefine实现Java热更新

Arthas非常重要的命令redefine&#xff0c;主要作用是加载外部的.class文件&#xff0c;用来替换JVM已经加载的类&#xff0c;总结起来就是实现了Java的热更新。 redefine在一下几种情况中会失败&#xff1a;1、增加了field&#xff1b;2、增加了method&#xff1b;3、替换正在…

我了解到的面试的一些小内幕!附面试题答案

背景 首先我是个菜鸡&#xff0c;工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发&#xff0c;干了快两年的时候&#xff0c;跳槽到了一家伪大厂干安全。投了不少简历都没有回音&#xff0c;只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西&#xff0c;然而…

学习单调队列小结

因为一直在听身边的人说什么单调队列/斜率优化dp/背包&#xff0c;(ps:我也不清楚这样称呼对不对&#xff0c;因为我真心是没见过这些东西)我都觉得那是神一样的东西。终于抽出时间学了一下。 昨天在朋友一本书里面看到一句话&#xff0c;这里先跟大家分享一下&#xff1a; 没有…

我们究竟还要学习哪些Android知识?完整版开放下载

前言 移动研发火热不停&#xff0c;越来越多人开始学习 android 开发。但很多人感觉入门容易成长很难&#xff0c;对未来比较迷茫&#xff0c;不知道自己技能该怎么提升&#xff0c;到达下一阶段需要补充哪些内容。市面上也多是谈论知识图谱&#xff0c;缺少体系和成长节奏感&a…

ELK7.8.1的Docker搭建过程

在linux下首先在目录准备文件 首先说明&#xff0c;我的电脑宿主机的IP是192.168.1.5 为es准备文件 mkdir -p /opt/elk7/es cd /opt/elk7/es #创建对应的文件夹 数据 / 日志 / 配置 mkdir conf data logs #授权 chmod 777 -R conf data logs然后进入到/opt/elk7/es/conf下 …

如何使用git创建项目,创建分支

git config -global user.name "Your name" git config -global user.email "youexample.com" 建立一个存放工程的文件夹 git init命令用于初始化当前所在目录的这个项目 会创建一个隐藏文件 .git 创建 main.c 文件 创建 .gitignore文件&#xff0c;忽略…

我们究竟还要学习哪些Android知识?附赠课程+题库

2021新的一年&#xff0c;开启新的征程&#xff0c;回顾2020&#xff0c;真是太“南”了。 从年初各大厂裁员&#xff0c;竟然成为一件理所应当的事情&#xff0c;到四月份 GitHub 上“996.ICU” 引起了大家的共鸣。即使我们兢兢业业“996”&#xff0c;但依旧难以抵御 35 岁时…

WINDOWS上KAFKA运行环境安装

WINDOWS上KAFKA运行环境安装 1. 安装JDK 1.1 安装文件&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK 1.2 安装完成后需要添加以下的环境变量&#xff08;右键点击“我的电脑” -> "高级系统设置" -> "环境变…