【C#基础】CSA控件编写秘籍
新建CSA控件
1、新建一个纯类,命名空间是:
namespace SimPerfect.CSAControlLibrary.CSAControls
2、实现两个构造函数:无参和传Candy参数
public CDealProcess()
{
InitMe();
} public CDealProcess(Candy parentCandy)
{
this.ParentCandy = parentCandy;
InitMe();
}
3、编写InitMe()方法初始化控件属性:
private void InitMe()
        {
            base.SetDragMode();
            base.SetControlName("控件名称");
            base.SetControlDefaultSize(, );//默认大小
        }
4、重写RefreshMe()方法并进行异步消息事件的注册
 public override void RefreshMe()
        {
            base.RefreshMe();
            if (this.ParentCandy != null && this.ParentCandy.BindPebble != null)
            {
                ParentCandy.BindPebble.Event_PebbleRunSQLInvokeIDWithReturn -= new Pebble.EVENT_PebbleRunSQLInvokeIDWithReturn(BindPebble_Event_PebbleRunSQLInvokeIDWithReturn);
                ParentCandy.BindPebble.Event_PebbleRunSQLInvokeIDWithReturn += new Pebble.EVENT_PebbleRunSQLInvokeIDWithReturn(BindPebble_Event_PebbleRunSQLInvokeIDWithReturn);
            }
        }
5、重写UpdateMe()方法
public override void UpdateMe()
        {
            base.UpdateMe();
            FreshList();
        }
6、编写异步消息处理方法
 public void BindPebble_Event_PebbleRunSQLInvokeIDWithReturn(string InvokeID, System.Xml.XmlElement resultXMLInfo)
        {
            DataExchange dataExchange = new DataExchange();
            DataRows dataRows = dataExchange.ProcessReceivedData(resultXMLInfo);
            switch (InvokeID)
            {
                case "**********":
                //处理返回xml的函数
                    break;
            }
        }
7、给DTE发送消息的方法
//发送查询命令
        private void SendQueryCommand(string strSQL, string commandType)
        {
            if (ParentCandy != null)
            {
                if (ParentCandy.BindPebble != null)
                {
                    ParentCandy.BindPebble.Method_DTESQLCommand(strSQL, commandType, false);
                }
            }
        }
8、重写OnResize(EventArgs e)调整界面位置
 protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
        }
Pabble数据库操作
1、 获取工单ID
在很多CSA控件操作中都需要操作工单ID,这时候可以通过以下两个方法实现工单ID的获取:
(1)绑定一个Pabble,Pabble中需要选择Order对象的Order.ID属性,并通过如下代码获取
m_OrderID = ParentCandy.BindPebble.GetFieldValue("Order.ID");
(2)直接通过工单的P_Order获取
m_OrderID = ParentCandy.BindPebble.AllPebbles["P_Order"].GetFieldValue("Order.ID");
2、GET、SET其他PABBLE信息,需要先判断PABBLE是否存在否则会报错。
if (ParentCandy.BindPebble.AllPebbles.ContainsKey("P_Order"))
           {
               ParentCandy.BindPebble.AllPebbles["P_Order"].SetFieldValue("Order.HandleType.ID", _Value);
           }
插入数据之前获取ID
1、发送Pabble内容:
string newPabble = "<Pebble ID=\"\" Name=\"P_DealProcess\" Command=\"New\"><Field Name=\"DealProcess.ID\" /></Pebble>"; ParentCandy.BindPebble.Method_DTEPebbleCommand(newPabble, "new_DealProcessID");
2、解析方法:
            case "new_DealProcessID":
                    m_ProcessID = RegxID(resultXMLInfo.InnerXml,"<Object ID=\"(.*?)\" />");
                    m_ProcessID = m_ProcessID.Replace("<Object ID=\"", "").Replace("\" />", "");
                    if (string.IsNullOrEmpty(m_ProcessID))
                    {
                        MessageBox.Show("服务器开小差了,请重新点击新增!", "提示", MessageBoxButtons.OK);
                        return;
                    }
                    else
                    {
                        //根据取到的ID,进行业务处理
                    }
                    break;
获取当前座席信息
private string m_EmployeeWorkID = Commonuse.mSystemDataObjects.AgentWorkID;
private string m_EmployeeID = Commonuse.mSystemDataObjects.AgentID;
添加工单编辑器中的控件属性配置项
1、首先定义变量
在CSABaseControl基类中新加属性
例如上传附件的控件:
     //CAttachFiles
        public string CAF_FTPServerIP = "";//工单上传下载附件的FTP服务器地址   
        public string CAF_FTPUserID = "";//工单上传下载附件FTP服务器登录的用户名
        public string CAF_FTPPassword = "";//工单上传下载附件FTP服务器登录密码
        public string CAF_FileLimit = "";//附件大小限制
2、自定义CSA控件重写OnControlPropertiesAdded方法获取父类CSABaseControl中的变量
public override void OnControlPropertiesAdded(Dictionary<string, Pebble> pebbles)
        {
            base.OnControlPropertiesAdded(pebbles);
            //重新赋值
            FTPServerIP = CAF_FTPServerIP;
            FTPUserID = CAF_FTPUserID;
            FTPPassword = CAF_FTPPassword;
            FileLimit = CAF_FileLimit;
        }
3、配置在工单编辑器中显示,在CSABaseControl基类中添加如下配置:
//初始化控件属性
        private void InitCSAControlPropertyInfos()
        {
            if (ParentCandy.IsEdit)
            {
                CSAControlPropertyInfos.Clear();
//最后一个参数表示需要对哪个控件生效。
                AddCSAControlProperty("CAF_FTPServerIP", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器IP", "CWorkSheetAttachedFile");
                AddCSAControlProperty("CAF_FTPUserID", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器用户名", "CWorkSheetAttachedFile");
                AddCSAControlProperty("CAF_FTPPassword", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器密码", "CWorkSheetAttachedFile");
                AddCSAControlProperty("CAF_FileLimit", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "附件大小限制", "CWorkSheetAttachedFile");
                AddCSAControlProperty("CF_FTPServerIP","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器IP","CFAX");
                AddCSAControlProperty("CF_FTPUserID","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器用户名","CFAX");
                AddCSAControlProperty("CF_FTPPassword","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器密码","CFAX");
            }
        }
4、在基类的数据传递方法中加上属性值
     /// <summary>
        /// 运行时,控件执行的方法
        /// </summary>
        /// <param name="pebbles"></param>
        public virtual void OnControlPropertiesAdded(Dictionary<string, Pebble> pebbles)
        {
            foreach (CSAControlProperty controlProperty in CSAControlPropertyInfos)
            {
                switch (controlProperty.Name)
                {
             //CFAX
                    case "CF_FTPServerIP":
                        CF_FTPServerIP = controlProperty.Value;
                        break;
                    case "CF_FTPUserID":
                        CF_FTPUserID = controlProperty.Value;
                        break;
                    case "CF_FTPPassword":
                        CF_FTPPassword = controlProperty.Value;
                        break;
                    case "CF_IVRNum":
                        CF_IVRNum = controlProperty.Value;
                        break;
  }
}
【C#基础】CSA控件编写秘籍的更多相关文章
- iOS基础UI控件介绍-Swift版
		iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ... 
- SharePoint用户控件编写的简单介绍
		转:http://www.it165.net/design/html/201204/1131.html 我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickP ... 
- SharePoint 用户控件编写的简单介绍
		我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickPart+用户控件的方式,算是自己的学习笔记,也和大家交流下心得. 1. 新建Web应用程序 2. 在项目 ... 
- QSS基础-设置控件样式
		1.QSS基础-设置同类控件样式'''QSS基础:Qt Style SheetQt样式表用于设置控件的样式和风格(比如控件的背景色,字体颜色,字体大小等)和CSS的功能比较相似,功能相似''' fro ... 
- Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)
		第一步:新建一个单视图(single view)的工程, 命名为pickerTest,不要勾选下面两个选项,第一个是新版本里面的,第二个是单元测试,现在用不着. 点击next ->creat之 ... 
- iOS开发基础-UITableView控件简单介绍
		UITableView 继承自 UIScrollView ,用于实现表格数据展示,支持垂直滚动. UITableView 需要一个数据源来显示数据,并向数据源查询一共有多少行数据以及每一行显示什么 ... 
- Flex 自定义打印控件编写
		打印历来是web应用一个比较棘手的问题,幸好flex web应用是运行在flash player上的,flash player可以访问打印机,所以flex 应用可以实现比较强大的打印功能.Flex 自 ... 
- 控件编写:增强 TMEMO (一)(增加对WM_HSCROLL消息的处理)
		相信没有什么人对 MEMO 陌生了吧.尽管其组件的功能不错.但是,对它进行一些功能的改进,可以更好的使用. 有的时候,我们想要知道,当前的坐标是什么?甚至,想要在 滚动条滚动时触发一些事件. 但,TM ... 
- MFC对话框贴图基础上控件Stasic变成透明的
		对应WM_CTLCOLOR函数 加入下面代码: HBRUSH CMFCApplication2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ... 
随机推荐
- IO-序列化 Serializable Parcelable Object
			简介 1.什么是序列化和反序列化 对象的寿命通常随着生成该对象的程序的终止而终止,有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种,能记录自己的状态以便将来再生的能力,叫作 ... 
- 05-XML遍历递归显示到TreeView上(XDocument类)
			1.XML文件(x1.xml): <?xml version="1.0" encoding="utf-8" ?> <itcast> &l ... 
- 小学生之Map集合框架的使用
			Map用于保存具有映射关系的数据(key-vlaue).Map的key不允许重复,即同一个Map对象的任何两个key通过equals方法比较总是返回false Map中包含了一个keySet()方法, ... 
- web第一节课 sql 数据库连接 查询
			1.数据库连接语句 <connectionStrings> <add name="yhotel" connectionString="Database= ... 
- ASP.NET-FineUI开发实践-3
			1.参照模拟数据库分页通过缓存重写内存分页,优化页面响应速度 Grid的响应速度是硬伤,我写了个通用方法把所有数据放在缓存中模拟数据库分页,比自带的缓存分页快很多,这里贴上实体类的通用方法,DataT ... 
- Android布局文件-错误
			View requires API level 14 (current min is 8): <?xml version="1.0" encoding="utf-8 ... 
- 纯 CSS 创建各种不同的图形形状
			使用代码 矩形 .rectangle { width: 250px; height: 150px; background-color: #6DC75F; } <div></div&g ... 
- ASPNET 5
			1. 什么是APS.NET 5 ASP.NET 5是一个可构建基于云服务的Web应用的构架,并且它是开源的和跨平台的.我们提供了重新设计的一个可以部署在本地和云服务的优化框架.它由一个一个模块组成,因 ... 
- curl 命令使用
			1.开启gzip请求curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响应时间curl -o /dev/nu ... 
- Linux命令行文本处理工具
			关键字搜索: grep 关键字 指定文件 -i 搜索时忽略大小写 -n 显示结果所在行 -v 显示不包含关键字的行 基于列的文本处理: cut -d: -f1 /etc/passwd -d ... 
