【C#】代码解析--打印数据集

系列文章

【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】MySQL数据库导入工具(批量Excel插入)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】简单二维码制作和打印工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印(打印模板、条形码&二维码、字体样式、项目源码)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】数据建模,你是使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl动态更换DataSource,数据查询异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305424

【C#】GridControl日期字段显示时分秒
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130718303

【C#】GridControl增加选择列(不用二次点击)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130763713

【C#】数据库检查工具(可跨库访问)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/97172329


文章目录

  • 系列文章
  • 更新日志
  • 前言
  • 一、问题描述
  • 二、解决方案
  • 三、软件开发(源码)
    • 3.1 下载CVS代码
    • 3.2 定位代码行数
    • 3.3 根据定位行,获取整个打印方法
    • 3.4 获取打印类型、数据集、数据表
    • 3.5 获取 数据集字段
    • 3.6 截取打印参数
    • 3.7 项目下查找文件
    • 3.8 删除文件夹目录
    • 3.9 从开始字符串、结束字符串,截取中间字符串
    • 3.10 读取XML文件
  • 四、项目展示
  • 五、资源链接
    • 5.1 变更内容
    • 5.2 逻辑方案:


更新日志

版本 更新日期 更新说明
V1.0 2015-03-20 首次发布代码解析–打印数据集
V2.0 2015-04-02 打印数据集管理变更内容,见第5章,变更说明

前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
3A0N000001


一、问题描述

抓取MainController.cs代码中“打印”相关的数据,获取打印参数值,用于一致性对比。

二、解决方案

自动下载CVS代码;
工程目录下找到MainController.cs文件,加载进内存;
以“PrintCall.Print”关键字,快速定位到代码行(一整条语句行,分号结束);
反向读取代码行,找到打印方法名;
截取打印类型变量名、打印数据集变量名、打印数据表变量名;
全文扫描代码行,获取其所对应的 打印类型、打印数据集名、打印数据表名;
根据打印数据集名,在工程目录下找到对应的*.dsxml文件;
解析*.dsxml文件,获取其中的打印字段数据。

三、软件开发(源码)

3.1 下载CVS代码

使用CMD命令,调用CVS程序开始下载服务器代码。

		/// 
		/// CVS下载
		/// 
		/// 
		/// 
		/// 
		/// 
		/// 
		public bool CVSCodeDown(string a_CVSExePath,string a_CVSCmd,string a_WorkDir,out string a_strMsgError)
		{
			try
			{
				ProcessStartInfo info = new ProcessStartInfo();
				{
					info.FileName = a_CVSExePath;//CVS程序路径
					info.Arguments = a_CVSCmd;//指令1
					info.CreateNoWindow = true;
					info.WorkingDirectory = a_WorkDir;//工作路径
					info.ErrorDialog = true;
					info.WindowStyle = ProcessWindowStyle.Normal;
					info.UseShellExecute = false;
					info.RedirectStandardError = true;
				}
				
				using (Process p = Process.Start(info))
				{
					p.ErrorDataReceived += new DataReceivedEventHandler(this.p_ErrorDataReceived);
					a_strMsgError="下载超时";
					return p.WaitForExit(180000);
				}
			}
			catch(Exception ex)
			{
				a_strMsgError = ex.Message;
				this.p_ErrorDataReceived(null,null);
				return false;
			}
		}
		

【C#】代码解析--打印数据集_第1张图片
【C#】代码解析--打印数据集_第2张图片
【C#】代码解析--打印数据集_第3张图片

3.2 定位代码行数

找到“PrintCall.Print”所在代码行
【C#】代码解析--打印数据集_第4张图片

3.3 根据定位行,获取整个打印方法

【C#】代码解析--打印数据集_第5张图片

3.4 获取打印类型、数据集、数据表

【C#】代码解析--打印数据集_第6张图片

3.5 获取 数据集字段

【C#】代码解析--打印数据集_第7张图片

3.6 截取打印参数

【C#】代码解析--打印数据集_第8张图片
【C#】代码解析--打印数据集_第9张图片
【C#】代码解析--打印数据集_第10张图片

3.7 项目下查找文件

本方法已经封装进我的底层库

【C#】代码解析--打印数据集_第11张图片

3.8 删除文件夹目录

本方法已经封装进我的底层库

【C#】代码解析--打印数据集_第12张图片

3.9 从开始字符串、结束字符串,截取中间字符串

本方法已经封装进我的底层库

【C#】代码解析--打印数据集_第13张图片

3.10 读取XML文件

【C#】代码解析--打印数据集_第14张图片
【C#】代码解析--打印数据集_第15张图片

四、项目展示

【C#】代码解析--打印数据集_第16张图片
【C#】代码解析--打印数据集_第17张图片
【C#】代码解析--打印数据集_第18张图片
【C#】代码解析--打印数据集_第19张图片
【C#】代码解析--打印数据集_第20张图片

五、资源链接

5.1 变更内容

1、任务单功能,右键 文件提取工具新-对于组件和功能导入到组件库的代码去掉。
2、后台数据刷入,根据【CVS代码目录管理】,把组件库(wsbase923)里的组件列表的CVS代码,刷进去。
3、根据组件库的 项目类型、组件号和CVS路径,把 组件对应的 打印信息增加到组件库里。

5.2 逻辑方案:

1、获取打印方法
组件库(wsbase923)–>CVS路径–>下载代码–>读取MainController文件–>
按行读取文件–>找到匹配关键字“PrintCall.Print”所在位置–>反向读取到“void”、“(object sender)”–>截取打印方法名–>将所有方法名保存到列表m_ListPrintMethod中。
​​【C#】代码解析--打印数据集_第21张图片

2、打印类型功能参数
打印方法名–>“{}”内部读取–>找到匹配关键字“PrintCall.Print”,所在的起始位置,到“;”为止。
第二个参数为 打印类型变量print_type,
第三个参数为 打印数据集变量dataset,
第四个参数 打印数据集dataset_field。
找“print_type”出现的行,匹配到关键字“GetFunPar”,此时GetFunPar的值即为打印类型功能参数。
【C#】代码解析--打印数据集_第22张图片

3、打印数据集功能参数
找“dataset”出现的行–>找匹配关键字“GetFunPar”–>GetFunPar里面的值+功能标识–>获取到功能参数值。
功能参数的表

select param_no from WBF_sys_fun_args where fun_guid='F201206_SaleOrder_Input'
 and fun_no='F201206' and param_no='cds_master'

4、数据集字段
找“dataset_field”出现的行,找匹配关键字“GetFunPar”,此时GetFunPar的值即为打印数据集功能参数。

5、打印表字段
打印类型、打印数据集功能参数–>取数获取 字段名称、字段备注、数据类型、字段长度。

Select field_name,field_note,data_type,field_size
From wssys_print_type_field  Where print_type_no = 'account_voucher_qry'    
and dataset_name = 'cds_detail'  

6、数据集字段
找“dataset_field”出现的行–>“Entity”字样的,获取它的名称–>去当前目录DataSet文件夹中寻找“.dsxml”文件–>解析xml文件–>获取 字段、标题、数据类型、字段备注。
【C#】代码解析--打印数据集_第23张图片

7、存入组件库中
以上获取到的数据存进,组件库中,方便其后的比较操作。

select * from T_client_assembly_print_method
select * from T_client_assembly_print_dataset
select * from T_client_assembly_print_dataset_field

你可能感兴趣的:(C#项目,c#,开发语言,代码解析)