业务部门抱怨IT响应速度慢、很多的精力被琐碎的事情给牵绊、上传下达的沟通很困难……在和很多CIO的交流过程中,总是会听到诸如此类的抱怨。我们也经常会看到如何做好有效沟通、如何提高工作效率等等方面的文章,而事实除了从IT部门解决问题之外,和业务部门的相处还有没有更好的办法呢?对于CIO而言,又是否可以适当地借助外力提高响应速度、提高工作效率呢?
之前去上海走访了三家企业,有做服装零售的马克华菲,也有有着多年外包经验的某信用卡中心,还有一家做汽车零部件的全球性企业。三家企业在信息化建设的程度上、管理模式上都各具特色,但又都有着共同特点:即巧妙地借助一些外力和管理手段提升IT响应速度,满足业务部门的需求。后来又与做IT运营管理服务的金道公司的高级副总裁王勇交流了关于企业如何做好IT外包对于处理与业务部门关系的意义。
如何处理与业务部门的关系是个永恒的话题
查询以往,会发现其中很大一部分的讨论话题都可以归结于CIO如何很好地应对来自业务部门的需求。这次走访的三家企业,性质、规模和管理方式上都有很大的不同,但是和三位CIO的交流的过程中发现,如何处理与业务部门的关系是个永恒的话题,对于目前多数企业的IT部门而言,都是在被动地接受业务部门提过来的需求,然后尽量以最短的时间来解决这些问题。
虽然众多的观点都在强调IT部门需要做到引领业务发展,但是具体到工作细节时,尤其对于IT依赖程度较高的企业,IT部门每天都需要接到各种各样,或紧急、或长期的业务需求。在如何高效率地满足这些需求的问题上,和三位CIO交流,三位都表达了IT不可能让业务百分百满意的观点。
只是面对一些抱怨时,IT部门要做的是不能悲观接受,而是积极做出改变。在和几位CIO的交流中,我也总结出了常规工作中多数可以借鉴的处理与业务部门关系的技巧。
1、明确自身的角色定位。IT部门在企业的日常工作中,多数还扮演的是服务性的角色,无论技术如何发展,抑或是现在热门的走向云端,IT部门都需要在日常生活中坚守服务角色定位。
2、结合业务特色打造相应的IT团队。马克华菲的CIO左敬东就分享了这样一个经验,马克华菲的核心是做品牌和渠道建设,业务重点也多是在直营以及电子商务层面。对此其IT总监左敬东将IT团队分为零售部门、支持部门和业务部门,这就区别了多数企业的应用、基础架构和服务的分类方式。
3、不要轻易去否决业务部门的需求。有时候面对过多甚至有些无理的业务部门需求时,IT部门首先做的不是否决这些需求,而是需要客观地进行评估这个需求需要付出的成本,然后告知业务部门。
4、解决方案多给出几套。接上一条,在面对很难的需求时,IT部门需要给出几套不同的方案,及每个方案所能达到的效果和所需的时间、财力成本等。
5、制定SOP,用流程制度规范。与业务部门的接触很频繁,在频繁的沟通中一定会存在不够清晰和顺畅的时候,那作为IT部门而言,需要主动制定SOP(标准运作流程),以实现标准化的管理。
6、业务部门付费获得相关服务。当然这是个相对理想的状态,在该信用卡中心就有着这样一个传统。其基础架构经理Tiger介绍的经验是,业务部门每年都会有IT预算,在向IT部门提相应的需求时是需要根据工作量、时间成本、人力成本等付相应的费用。这个时候业务部门会根据IT部门提供的解决方案来评估哪些需求是必须的,哪些是可以暂缓的。
7、执行中主动告知并记录进展细节和成果。在解决业务部门提出的问题时,IT部门要做的应该不仅仅是执行,而是需要利用及时告知对方进展,以及记录相关细节,这样才可以有充分的理由解释后期可能会出现的一些抱怨等。也可以更清晰地让业务部门了解IT的价值和所付出的努力。
8、进行满意度调查。除了工作上的接触之外,IT部门也可以主动地去征询业务部门的一些意见,如设定一些调查问卷,让业务部门记名或不记名方式选择其所满意的和不满意的服务。将业务部门真正当做客户。
9、做一个好的销售团队。在走访那家全球领先的汽车零配件厂商时,该企业的亚太区IT总监Dennis介绍了一个很好的经验。即整个IT团队需要成为一个好的销售团队,这主要是用在向公司内部介绍新的IT技术、系统及服务管理流程时。很多业务部门很难接受一些变革,尤其是打破其原有工作模式的IT新技术、新系统和新服务管理流程,对此IT部门可以采取培训加销售的理念进行推广。Dennis做的是,先进行一场培训,然后进行一段时间试用后,再举办一场有奖问答的趣味比赛,通过这样轻松的环境向大家更加生动地展示IT会带来的改变,让业务部门更易于接受。
10、借助外力。IT外包已经不是个新名词,在和三家企业接触中发现,他们都或多或少地采取了一些外包。将繁琐的工作进行外包,可以有助于提高IT响应速度,解决IT人员不足问题及获取专业管理等。
这十点总的思路上都要求CIO可以变换以往的工作思路,即被动接受需求安排。在与业务部门的接触中,需要一定的智慧和技巧,用标准的管理流程和良好的服务态度去获得业务部门的理解和支持。IT和业务应该是目标一致的,即促进公司业务的发展。
外包工作量≠外包责任
三家不同的企业,三家都有IT外包的实践。在和他们的接触中,也有个很深的感受,因为企业自身性质的不同,企业文化的差异,三位CIO给我所带来的感觉也不太相同。马克华菲是一家民营企业,在整个IT建设上,都更多地会选择与业务部门进行融合,其服务角色的定位反而更加明显。而该信用卡中心,因为之前一直是与花旗合作,所以在管理上更加标准化,与业务部门的关系也更加流程化。汽车零部件的企业,因为属于外企,其标准化就更加明显了,同时其所体现出来的包容、灵活性也更加突出。
因为外包的传统不同,在选择IT外包商的时候也会有较为明显的差距。马克华菲所重视的更多的是企业文化与之相同的IT外包提供商,另外两家则更加重视有着很强规范性的服务商进行合作。
无论是重视文化,还是重视流程制度,在IT外包上也需要进行很慎重的考虑和管理,才能将IT外包转化为助力。金道是提供IT运营管理服务的公司,王勇深入接触过很多各类型的企业,他也指出如果进行外包,企业自身需要具备哪些条件。
1、企业信息化已经到了一定程度。如果说还处于基础建设阶段,即在应用开发阶段,这个时候的外包更多的软件开发、项目集成,但不适合运营和维护的角度进行外包。
2、开始达到精细化管理阶段。在运营、运维阶段需要制定相应的制度,日常很多故障繁琐的事情创造的价值低,这就适合外包。
3、考虑企业管理风格的影响。如果企业的管理还处于比较粗放的状态还是需要等一等再进行IT外包。
当企业的管理、信息化程度已经适合做外包时,企业也需要充分做好准备迎接IT外包。很多企业会抱怨外包商提供的服务不够好,后期与服务商之间的矛盾也日益增多,为避免这些矛盾,企业IT部门之前就需要做好种种准备。结合几位CIO的意见,以及服务商的建议,记者也总结了几条IT外包成功的经验。
1、IT外包之前要了解自身的核心竞争力。首先了解企业的业务核心,然后根据业务需求选择性地进行IT外包。
2、将成熟的内容进行外包。自己做不好的,不要指望服务商可以做好。在选择IT外包之前,一定要明确在哪些方面自身已经很成熟了,可以掌控了,这样才可以进行外包,以方便日后管理IT外包的工作。
3、签订IT外包合同四大关键词。在和Dennis的聊天中了解到,其自己准备了一套很完整的成功IT外包的文本,其中在签订合同时就需要掌握四大关键词:SOW(工作说明书)、KPI、奖罚以及特别条款。合同越细,日后管理也就更加轻松。
4、外包工作量≠外包责任。Tiger用了很好一句话总结了IT外包的核心,即外包工作量不等于外包责任。对于IT部门而言,将部分工作量进行外包后,还需要实时监测服务商的工作成果,把控时间进度、服务结果等。
5、团队建设整体提升沟通能力。在IT团队建设方面,员工已不再只是做一些相应的技术工作,当外包了一部分工作量后,所有的员工都应该具备管理能力和很好的沟通技巧,这也是成功管理IT外包的重要力量。
从明确需求,到选择外包商,再到明确合同细节,最后管理外包工作,这些环节CIO都需要关注到。只有在每个环节上都做好、管理好,才能真正地让IT外包成为一个助力,而不是增加工作量,带来更多负面的力量。
无论是IT部门自身注意与业务部门接触的智慧和技巧,还是借助IT外包这样一个外力,这些都对CIO以及整个IT部门提出了管理、销售等各方面的需求。随着IT地位的提升,重要性日益明显,而也正因为这样消除了IT的神秘性,IT部门更需要转变自身的思路,不仅仅是限于技术的认识上。
1 /// <summary>
2 /// POS机弹出钱箱
3 /// </summary>
4 public static void MoneyOut()
5 {
6 try
7 {
8 IntPtr iHandle = CreateFile("LPT1", 0x40000000, 0, 0, 3, 0, 0);//"LPT1"
9 if (iHandle.ToInt32() == -1)
10 {
11 MessageBox.Show("没有连接打印机或者打印机端口未打开!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
12 }
13 else
14 {
15 Microsoft.Win32.SafeHandles.SafeFileHandle handle = new Microsoft.Win32.SafeHandles.SafeFileHandle(iHandle, true);
16 FileStream fs = new FileStream(handle, FileAccess.ReadWrite);
17 StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
18 sw.Write(((char)27).ToString() + "p" + ((char)0).ToString() + ((char)60).ToString() + ((char)255).ToString());
19
20 sw.Close();
21
22 fs.Close();
23 }
24 }
25 catch (Exception e)
26 {
27 throw;
28 }
29 }
30
31 //Win32 API:打开端口
32 [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
33 private static extern IntPtr CreateFile(string lpFileName,
34 int dwDesiredAccess,
35 int dwShareMode,
36 int lpSecurityAttributes,
37 int dwCreationDisposition,
38 int dwFlagsAndAttributes,
39 int hTemplateFile);
40
41 private static void Clear()
42 {
43 SerialPort serialPort1 = new SerialPort();
44 serialPort1.PortName = "COM1";
45 serialPort1.BaudRate = 2400;
46 serialPort1.Open();
47 serialPort1.WriteLine("\f");
48 serialPort1.Close();
49 }
50
51 private static void Init()
52 {
53 SerialPort serialPort1 = new SerialPort();
54 serialPort1.PortName = "COM1";
55 serialPort1.BaudRate = 2400;
56 serialPort1.Open();
57 serialPort1.WriteLine("esc@");
58 serialPort1.Close();
59 }
60
61 private static void 单价(string data)
62 {
63 SerialPort serialPort1 = new SerialPort();
64 serialPort1.PortName = "COM1";
65 serialPort1.BaudRate = 2400;
66 serialPort1.Open();
67 serialPort1.WriteLine(@"s1 Q A" + Char.ConvertFromUtf32(27) + Char.ConvertFromUtf32(81) + Char.ConvertFromUtf32(65) + data + Char.ConvertFromUtf32(13));
68 serialPort1.Close();
69 }
70
71 private static void 总计(string data)
72 {
73 SerialPort serialPort1 = new SerialPort();
74 serialPort1.PortName = "COM1";
75 serialPort1.BaudRate = 2400;
76 serialPort1.Open();
77 serialPort1.WriteLine(@"s2 Q A" + Char.ConvertFromUtf32(27) + Char.ConvertFromUtf32(81) + Char.ConvertFromUtf32(65) + data + Char.ConvertFromUtf32(13));
78 serialPort1.Close();
79 }
80
81 private static void 收款(string data)
82 {
83 SerialPort serialPort1 = new SerialPort();
84 serialPort1.PortName = "COM1";
85 serialPort1.BaudRate = 2400;
86 serialPort1.Open();
87 serialPort1.WriteLine(@"s3 Q A " + Char.ConvertFromUtf32(27) + Char.ConvertFromUtf32(81) + Char.ConvertFromUtf32(65) + data + Char.ConvertFromUtf32(13));
88 serialPort1.Close();
89 }
90
91 private static void 找零(string data)
92 {
93 SerialPort serialPort1 = new SerialPort();
94 serialPort1.PortName = "COM1";
95 serialPort1.BaudRate = 2400;
96 serialPort1.Open();
97 serialPort1.WriteLine(@"s4 Q A " + Char.ConvertFromUtf32(27) + Char.ConvertFromUtf32(81) + Char.ConvertFromUtf32(65) + data + Char.ConvertFromUtf32(13));
98 serialPort1.Close();
99 }
一、接口:
1 //定义接口
2 public interface IBonuss
3 {
4 double Calculate();
5
6 string name
7 {
8 get;
9 set;
10 }
11 }
12
13 //实现接口
14 public class ChineseBonuss : IBonuss
15 {
16 public double Calculate()
17 {
18 return 111;
19 }
20
21 string strName = "";
22 public string name
23 {
24 get
25 {
26 return strName;
27 }
28 set
29 {
30 value = strName;
31 }
32 }
33 }
34 //调用
35 public static void Main(string[] args)
36 {
37 IBonuss i = new ChineseBonuss();
38 double dd = i.Calculate();
39 Console.WriteLine(dd.ToString());
40 Console.ReadLine();
41 return;
42 }
1 /// <summary>
2 /// 测试类
3 /// </summary>
4 public class test
5 {
6 public static void Main(string[] args)
7 {
8 Operation op = OperationFactroy.CreatOperate("+");
9 op.NumberA=1;
10 op.NumberB=2;
11 Console.WriteLine(op.GetResult());
12 }
13 }
14 /// <summary>
15 /// 简单工厂类
16 /// </summary>
17 public class OperationFactroy
18 {
19 public static Operation CreatOperate(string strOperate)
20 {
21 Operation operation = null;
22
23 switch (strOperate)
24 {
25 case "+":
26 operation = new AddOperation();
27 break;
28 case "-":
29 operation = new SubOperation();
30 break;
31 case "*":
32 operation = new MulOperation();
33 break;
34 case "/":
35 operation = new DivOperation();
36 break;
37 default:
38 operation = new AddOperation();
39 break;
40 }
41
42 return operation;
43 }
44 }
45
46 public class Operation
47 {
48 private double _numberA = 0;
49
50 public double NumberA
51 {
52 get { return _numberA; }
53 set { _numberA = value; }
54 }
55 private double _numberB = 0;
56
57 public double NumberB
58 {
59 get { return _numberB; }
60 set { _numberB = value; }
61 }
62 /// <summary>
63 /// 虚方法
64 /// </summary>
65 /// <returns></returns>
66 public virtual double GetResult()
67 {
68 double result = 0;
69 return result;
70 }
71 }
72
73 public class AddOperation : Operation
74 {
75 public override double GetResult()
76 {
77 double result = 0;
78 result = NumberA + NumberB;
79 return result;
80 }
81 }
82
83 public class SubOperation : Operation
84 {
85 public override double GetResult()
86 {
87 double result = 0;
88 result = NumberA - NumberB;
89 return result;
90 }
91 }
92
93 public class MulOperation : Operation
94 {
95 public override double GetResult()
96 {
97 double result = 0;
98 result = NumberA * NumberB;
99 return result;
100 }
101 }
102
103 public class DivOperation : Operation
104 {
105 public override double GetResult()
106 {
107 double result = 0;
108 if (NumberB == 0)
109 {
110 throw new Exception("对不起,除数不能为零");
111 }
112 result = NumberA / NumberB;
113 return result;
114 }
115 }
1 /// <summary>
2 /// 饿汉单例模式:类被加载时,将自己类实例化(静态初始化)
3 /// </summary>
4 public sealed class Singleton1
5 {
6 private static readonly Singleton1 instance = new Singleton1();
7 private Singleton1()
8 { }
9
10 public static Singleton1 GetInstance()
11 {
12 return instance;
13 }
14 }
15
16 /// <summary>
17 /// 懒汉单例模式:类第一次被引用时,将自身类实例化
18 /// </summary>
19 public class Singleton2
20 {
21 private static Singleton2 instance;
22 private static readonly object syncRoot = new object();
23
24 private Singleton2()
25 { }
26
27 public static Singleton2 GetInstance()
28 {
29 if (instance == null)
30 {
31 lock (syncRoot)//加锁
32 {
33 if (instance == null)
34 {
35 instance = new Singleton2();
36 }
37 }
38 }
39
40 return instance;
41 }
42 }
欢迎您下载使用XPS文件查看工具,本软件根据MS实例编写而成,基于.net 3.0框架,采用WPF技术,转载请注意版权信息。如有任何意见或者BUG请通过以下电子邮箱联系我!不甚感激……
Email:zwaxm@163.com
源码及安装包:Xps文件查看工具
摘要: VB.NET修饰符1.Shadows Shadows 关键字指示被声明的编程元素隐藏基类中一个同名元素或一组重载元素。可以用其他任何类型的元素来隐藏任何类型的被声明元素。被隐藏的元素在隐藏它的派生类中不可用。 Shadows 关键字用于下面的上下文中:Class 语句 Const 语句 Declare 语句 Delegate 语句 Dim 语句 Enum 语句 Event 语句 Function 语句 Interface 语句 Property 语句 Structure 语句 Sub 语句 VB.NET修饰符2.Shared Shared 关键字指示一个或多个被声明的编程元素将被共享。
阅读全文
摘要: 情况一:系统已安装excel 创建excel对象进行导出;情况二:系统未安装excel 1、方案一:先将数据转换为byte数组(注意编码格式),再将byte数组写入txt文件,最后将txt文件扩展名改成xls即可; 2、方案二:将xls文件当作数据源,利用ado进行导出; 3、方案三:开源工程导出工程(http://www.codeproject.com/KB/office/ExcelReader.aspx); 4、方案四:开源工程npoi; 5、方案五:微软开源工程owc;情况一,实现方式网上很多.方案一已实现,方案二已实现,方案三直接参考测试项目,方案四待研究,方案五待研究.小
阅读全文
摘要: 注释已到位,无需多写了!ReadXMLBC .javapackage lll;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.ResourceBundle;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBui
阅读全文