新建CSA控件

1、新建一个纯类,命名空间是:

  1. namespace SimPerfect.CSAControlLibrary.CSAControls

2、实现两个构造函数:无参和传Candy参数

  1. public CDealProcess()
  2. {
  3. InitMe();
  4. }
  5.  
  6. public CDealProcess(Candy parentCandy)
  7. {
  8. this.ParentCandy = parentCandy;
  9. InitMe();
  10. }

3、编写InitMe()方法初始化控件属性:

  1. private void InitMe()
  2.  
  3. {
  4.  
  5. base.SetDragMode();
  6.  
  7. base.SetControlName("控件名称");
  8.  
  9. base.SetControlDefaultSize(, );//默认大小
  10.  
  11. }

4、重写RefreshMe()方法并进行异步消息事件的注册

  1. public override void RefreshMe()
  2.  
  3. {
  4.  
  5. base.RefreshMe();
  6.  
  7. if (this.ParentCandy != null && this.ParentCandy.BindPebble != null)
  8.  
  9. {
  10.  
  11. ParentCandy.BindPebble.Event_PebbleRunSQLInvokeIDWithReturn -= new Pebble.EVENT_PebbleRunSQLInvokeIDWithReturn(BindPebble_Event_PebbleRunSQLInvokeIDWithReturn);
  12.  
  13. ParentCandy.BindPebble.Event_PebbleRunSQLInvokeIDWithReturn += new Pebble.EVENT_PebbleRunSQLInvokeIDWithReturn(BindPebble_Event_PebbleRunSQLInvokeIDWithReturn);
  14.  
  15. }
  16.  
  17. }

5、重写UpdateMe()方法

  1. public override void UpdateMe()
  2.  
  3. {
  4.  
  5. base.UpdateMe();
  6.  
  7. FreshList();
  8.  
  9. }

6、编写异步消息处理方法

  1. public void BindPebble_Event_PebbleRunSQLInvokeIDWithReturn(string InvokeID, System.Xml.XmlElement resultXMLInfo)
  2.  
  3. {
  4.  
  5. DataExchange dataExchange = new DataExchange();
  6.  
  7. DataRows dataRows = dataExchange.ProcessReceivedData(resultXMLInfo);
  8.  
  9. switch (InvokeID)
  10.  
  11. {
  12.  
  13. case "**********":
  14.  
  15. //处理返回xml的函数
  16.  
  17. break;
  18.  
  19. }
  20.  
  21. }

7、给DTE发送消息的方法

  1. //发送查询命令
  2.  
  3. private void SendQueryCommand(string strSQL, string commandType)
  4.  
  5. {
  6.  
  7. if (ParentCandy != null)
  8.  
  9. {
  10.  
  11. if (ParentCandy.BindPebble != null)
  12.  
  13. {
  14.  
  15. ParentCandy.BindPebble.Method_DTESQLCommand(strSQL, commandType, false);
  16.  
  17. }
  18.  
  19. }
  20.  
  21. }

8、重写OnResize(EventArgs e)调整界面位置

  1. protected override void OnResize(EventArgs e)
  2.  
  3. {
  4.  
  5. base.OnResize(e);
  6.  
  7. }

Pabble数据库操作

1、   获取工单ID

在很多CSA控件操作中都需要操作工单ID,这时候可以通过以下两个方法实现工单ID的获取:

(1)绑定一个Pabble,Pabble中需要选择Order对象的Order.ID属性,并通过如下代码获取

  1. m_OrderID = ParentCandy.BindPebble.GetFieldValue("Order.ID");

(2)直接通过工单的P_Order获取

  1. m_OrderID = ParentCandy.BindPebble.AllPebbles["P_Order"].GetFieldValue("Order.ID");

2、GET、SET其他PABBLE信息,需要先判断PABBLE是否存在否则会报错。

  1. if (ParentCandy.BindPebble.AllPebbles.ContainsKey("P_Order"))
  2.  
  3. {
  4.  
  5. ParentCandy.BindPebble.AllPebbles["P_Order"].SetFieldValue("Order.HandleType.ID", _Value);
  6.  
  7. }

插入数据之前获取ID

1、发送Pabble内容:

  1. string newPabble = "<Pebble ID=\"\" Name=\"P_DealProcess\" Command=\"New\"><Field Name=\"DealProcess.ID\" /></Pebble>";
  2.  
  3. ParentCandy.BindPebble.Method_DTEPebbleCommand(newPabble, "new_DealProcessID");

2、解析方法:

  1.            case "new_DealProcessID":
  2.  
  3. m_ProcessID = RegxID(resultXMLInfo.InnerXml,"<Object ID=\"(.*?)\" />");
  4.  
  5. m_ProcessID = m_ProcessID.Replace("<Object ID=\"", "").Replace("\" />", "");
  6.  
  7. if (string.IsNullOrEmpty(m_ProcessID))
  8. {
  9.  
  10. MessageBox.Show("服务器开小差了,请重新点击新增!", "提示", MessageBoxButtons.OK);
  11.  
  12. return;
  13. }
  14. else
  15. {
  16.  
  17. //根据取到的ID,进行业务处理
  18. }
  19. break;

获取当前座席信息

  1. private string m_EmployeeWorkID = Commonuse.mSystemDataObjects.AgentWorkID;
  2. private string m_EmployeeID = Commonuse.mSystemDataObjects.AgentID;

添加工单编辑器中的控件属性配置项

1、首先定义变量

在CSABaseControl基类中新加属性

例如上传附件的控件:

  1.      //CAttachFiles
  2.  
  3. public string CAF_FTPServerIP = "";//工单上传下载附件的FTP服务器地址
  4.  
  5. public string CAF_FTPUserID = "";//工单上传下载附件FTP服务器登录的用户名
  6.  
  7. public string CAF_FTPPassword = "";//工单上传下载附件FTP服务器登录密码
  8.  
  9. public string CAF_FileLimit = "";//附件大小限制

2、自定义CSA控件重写OnControlPropertiesAdded方法获取父类CSABaseControl中的变量

  1. public override void OnControlPropertiesAdded(Dictionary<string, Pebble> pebbles)
  2.  
  3. {
  4.  
  5. base.OnControlPropertiesAdded(pebbles);
  6.  
  7. //重新赋值
  8.  
  9. FTPServerIP = CAF_FTPServerIP;
  10.  
  11. FTPUserID = CAF_FTPUserID;
  12.  
  13. FTPPassword = CAF_FTPPassword;
  14.  
  15. FileLimit = CAF_FileLimit;
  16.  
  17. }

3、配置在工单编辑器中显示,在CSABaseControl基类中添加如下配置:

  1. //初始化控件属性
  2.  
  3. private void InitCSAControlPropertyInfos()
  4.  
  5. {
  6.  
  7. if (ParentCandy.IsEdit)
  8.  
  9. {
  10.  
  11. CSAControlPropertyInfos.Clear();
  12.  
  13. //最后一个参数表示需要对哪个控件生效。
  14.  
  15. AddCSAControlProperty("CAF_FTPServerIP", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器IP", "CWorkSheetAttachedFile");
  16.  
  17. AddCSAControlProperty("CAF_FTPUserID", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器用户名", "CWorkSheetAttachedFile");
  18.  
  19. AddCSAControlProperty("CAF_FTPPassword", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "FTP服务器密码", "CWorkSheetAttachedFile");
  20.  
  21. AddCSAControlProperty("CAF_FileLimit", "", DEF_ControlPropertyValueType.ShortTextBoxValue, "附件大小限制", "CWorkSheetAttachedFile");
  22.  
  23. AddCSAControlProperty("CF_FTPServerIP","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器IP","CFAX");
  24.  
  25. AddCSAControlProperty("CF_FTPUserID","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器用户名","CFAX");
  26.  
  27. AddCSAControlProperty("CF_FTPPassword","",DEF_ControlPropertyValueType.ShortTextBoxValue,"FTP服务器密码","CFAX");
  28.  
  29. }
  30.  
  31. }

4、在基类的数据传递方法中加上属性值

  1.     /// <summary>
  2.  
  3. /// 运行时,控件执行的方法
  4.  
  5. /// </summary>
  6.  
  7. /// <param name="pebbles"></param>
  8.  
  9. public virtual void OnControlPropertiesAdded(Dictionary<string, Pebble> pebbles)
  10.  
  11. {
  12.  
  13. foreach (CSAControlProperty controlProperty in CSAControlPropertyInfos)
  14.  
  15. {
  16.  
  17. switch (controlProperty.Name)
  18.  
  19. {
  20.  
  21.           //CFAX
  22.  
  23. case "CF_FTPServerIP":
  24.  
  25. CF_FTPServerIP = controlProperty.Value;
  26.  
  27. break;
  28.  
  29. case "CF_FTPUserID":
  30.  
  31. CF_FTPUserID = controlProperty.Value;
  32.  
  33. break;
  34.  
  35. case "CF_FTPPassword":
  36.  
  37. CF_FTPPassword = controlProperty.Value;
  38.  
  39. break;
  40.  
  41. case "CF_IVRNum":
  42.  
  43. CF_IVRNum = controlProperty.Value;
  44.  
  45. break;
  46.   }
    }

【C#基础】CSA控件编写秘籍的更多相关文章

  1. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

  2. SharePoint用户控件编写的简单介绍

    转:http://www.it165.net/design/html/201204/1131.html 我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickP ...

  3. SharePoint 用户控件编写的简单介绍

    我们开发中,通常需要写各种各样的部件来实现我们的展示或者功能,下面就介绍下刚刚接触的QuickPart+用户控件的方式,算是自己的学习笔记,也和大家交流下心得. 1. 新建Web应用程序 2. 在项目 ...

  4. QSS基础-设置控件样式

    1.QSS基础-设置同类控件样式'''QSS基础:Qt Style SheetQt样式表用于设置控件的样式和风格(比如控件的背景色,字体颜色,字体大小等)和CSS的功能比较相似,功能相似''' fro ...

  5. Objective-C ,ios,iphone开发基础:picker控件详解与使用,(实现省市的二级联动)

    第一步:新建一个单视图(single view)的工程, 命名为pickerTest,不要勾选下面两个选项,第一个是新版本里面的,第二个是单元测试,现在用不着. 点击next  ->creat之 ...

  6. iOS开发基础-UITableView控件简单介绍

     UITableView 继承自 UIScrollView ,用于实现表格数据展示,支持垂直滚动.  UITableView 需要一个数据源来显示数据,并向数据源查询一共有多少行数据以及每一行显示什么 ...

  7. Flex 自定义打印控件编写

    打印历来是web应用一个比较棘手的问题,幸好flex web应用是运行在flash player上的,flash player可以访问打印机,所以flex 应用可以实现比较强大的打印功能.Flex 自 ...

  8. 控件编写:增强 TMEMO (一)(增加对WM_HSCROLL消息的处理)

    相信没有什么人对 MEMO 陌生了吧.尽管其组件的功能不错.但是,对它进行一些功能的改进,可以更好的使用. 有的时候,我们想要知道,当前的坐标是什么?甚至,想要在 滚动条滚动时触发一些事件. 但,TM ...

  9. MFC对话框贴图基础上控件Stasic变成透明的

    对应WM_CTLCOLOR函数 加入下面代码: HBRUSH CMFCApplication2Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) ...

随机推荐

  1. SuperSocket快速入门(一):什么是SuperSocket

    什么是SuperSocket SuperSocket(下文简称SS)是一个轻量级, 跨平台而且可扩展的 .Net/Mono Socket 服务器程序框架.你无须了解如何使用 Socket, 如何维护 ...

  2. JSP验证码

    ImageServlet.java package cn.hist.test.servlet; import java.awt.Color; import java.awt.Font; import ...

  3. mongodb查询之模糊查询

    mongodb的模糊查询是用正则表达式来实现的.例子如下: db.COMMODITY_COMMODITY_SHOP.find({name:{$regex :/南京/i}})

  4. vmware桥接模式创建ubuntu虚拟机

  5. java反射机制(工厂模式)

    http://www.phpddt.com/dhtml/338.html java里面没有typeof,js有. 我终于实现了用反射机制编写的工厂模式.java反射在工厂模式可以体现. 包含产品接口类 ...

  6. solr集群solrCloud的搭建

    上一章讲了solr单机版的搭建,本章将讲解sole集群的搭建.solr集群的搭建需要使用到zookeeper,搭建参见zookeeper集群的安装 一.solr实例的搭建 1. tomcat安装 这里 ...

  7. 【转】深入理解Java内存模型(七)——总结

    处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照.JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序 ...

  8. 几种破解MySQL root密码的几种方法:

    几种破解MySQL root密码的几种方法: 方法一 使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWord函数. 方法二 使用mysqladmin,这 ...

  9. mysql innodb myisam 主要区别与更改方法

    一.主要区别 1.事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好.   2.select ,update ,insert ,delete 操作   ...

  10. PHPCMS V9 简单的二次开发

    更多二次开发技巧,查看phpcms系统帮助 ,前台模板解析后的缓存 caches\caches_template\default 前台控制类index.php,前台标签类*_tag.class.php ...