置顶随笔

摘要: 最近一直在出差,很久没看bolg了,没想到,无意间写的几句话,引来这么多人的声讨,呵呵。感谢各位的评论,你们说的都对,这些东西我本不是想写到blog上的,只是在开会前给项目组的一个稿子。我强调用try 和catch并没有说,不用if else,if else是我们能够预知的现象,而try catch 在帮组我们捕捉不能预知的错误。check in 大家说得也没错,但我更多的是针对我们项目发生的问题...阅读全文
posted @ 2006-07-12 09:52 安徒生的童话 阅读(439) 评论(0) 编辑
摘要: 这几件事总是要提前,所以总结一下编程时要养成几个习惯:1、异常处理,写一个好的程序特别要特别注意异常处理代码,每一个Method内都应改至少包含一个try{} catch{}语句,并且越是接近用户的代码,容错代码所占的比例应该越多, 被其他程序调用的代码出现异常,应该将异常throw给调用者 ,被用户使用的代码,异常需要做拦截,比如我们经常使用的UserMessage.ShowErrorBox(e...阅读全文
posted @ 2006-06-21 15:54 安徒生的童话 阅读(1299) 评论(15) 编辑

2006年7月12日

最近一直在出差,很久没看bolg了,没想到,无意间写的几句话,引来这么多人的声讨,呵呵。
感谢各位的评论,你们说的都对,这些东西我本不是想写到blog上的,只是在开会前给项目组的一个稿子。我强调用try 和catch并没有说,不用if else,if else是我们能够预知的现象,而try catch 在帮组我们捕捉不能预知的错误。check in 大家说得也没错,但我更多的是针对我们项目发生的问题而说的。
感谢评论者严谨的态度,以后不敢随便发稿子了,呵呵
posted @ 2006-07-12 09:52 安徒生的童话 阅读(439) 评论(0) 编辑

2006年6月21日

这几件事总是要提前,所以总结一下
编程时要养成几个习惯:
1、异常处理,写一个好的程序特别要特别注意异常处理代码,每一个Method内都应改至少包含一个try{} catch{}语句,并且越是接近用户的代码,容错代码所占的比例应该越多, 被其他程序调用的代码出现异常,应该将异常throw给调用者 ,被用户使用的代码,异常需要做拦截,比如我们经常使用的UserMessage.ShowErrorBox(ex.Message)。
2、被用户直接使用的代码,一定要注意鼠标的状态,Cursor=Cursors.WaitCursor,用于告诉用户你在响应他的操作,结束时,通过try{} catch{} finally{},在finally中还原鼠标的状态finally{Cursor=Cursors.Default},这样能够确保出现任何问题都让鼠标恢复正常状态。
3、签入到代码服务器的程序一定是可编译的。
4、每天下班要离开前,一定要将自己的代码签入服务器,即便你的代码没有调试成功,也要将错误代码内容注视后,签入,签如的程序一定是可编译的。
5、项目组中最后一个离开的人应获取服务器的代码,进行备份,学习一下微软,人家可是Daily Build,我们做不到那么频繁,也应该定期进行一次备份。
6、当自己独占某一段代码后,使用完可编译,请立即签入代码服务器,尽量避免在开发过程中,经常问,谁在占用**文件。
7、遵守编码规范。
8、多利用.NET 2005的模板,这可以提高开发效率,规范程序代码。
posted @ 2006-06-21 15:54 安徒生的童话 阅读(1299) 评论(15) 编辑

2006年5月8日

1、安装Windows Workflow Foundation

      目前微软发布的最新版本为:Visual Studio 2005 Extensions for Windows Workflow Foundation Beta 1.2.exe

      微软的WebCast课堂讲师说要先安装 WWF,然后安装 VS2005,才能够正常使用Workflow Foundation,如果流程相反,VS 2005将不能够创建项目。我也遇到了这个问题,但还好,只是无法创建WorkflowProject,因为新建项目中根本就没有WWF项目,其他的项目还能够正常使用,经查找,是WWFProject Templates以及 Item Templates没有被注册到VS 2005中。

解决方法

找到Workflow 模版所在位置:

D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates\CSharp\Workflow\1033

D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates\CSharp\1033

打开VS 2005 工具菜单中的选项,如下图:

 


将用户模版的位置指定到
Workflow模版的目录上,新建,可以看到Workflow项目了。

 

 

2、Simple Sequential Workflow

成功安装WWF后,在其帮助文档中,我们可以找到 Windows Workflow Foundation Simples,这里面是微软为开发者提供的Simples,几乎涵盖了WWF中的各种技术的应用,就连微软WebCast讲师所使用的DEMO也是源于这里。

先从简单的学起:Sequential Workflow

 


这是一个只采用了一个
IfElse Activity的工作流,很简单只有一个选择路径。

很可惜这个例子中的设计代码和程序代码并没有分离。

运行Workflow:

看看Workflow是怎样启动的

        static AutoResetEvent waitHandle = new AutoResetEvent(false); //控制线程用

        static void Main(string[] args)

        {

            //首先建立一个WorkflowRuntime 对象

            WorkflowRuntime workflowRuntime = new WorkflowRuntime();

            Console.WriteLine("Runtime Started.");

            //获取这个事例中workflow的类型type

            Type type = typeof(SimpleSequentialWorkflow);

            // 添加一个事件,当workflow运行后执行

            workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(OnWorkflowCompleted);

            // 启动这个workflow

            workflowRuntime.StartWorkflow(type);

            Console.WriteLine("Workflow Started.");

            // 停止这个线程,直至WorkflowCompleted时,启动

            waitHandle.WaitOne();

            Console.WriteLine("Program Complete.");

        }

        static void OnWorkflowCompleted(object sender, WorkflowCompletedEventArgs instance)

        {

            MessageBox.Show("workflowRuntime Complete.");

            waitHandle.Set();

        }

 

IfElse Activity 一个非常重要的属性Condition,这个属性确定了if else 最后返回的结果是什么。

 

3Simple State Machine

Sequential Workflow 是按照某种顺序的流程进行工作的,State Machine 则是根据每个Activity 的状态决定是否执行下一个Activty。如,审批流程中,如果Activity的状态值为011代表同意,0代表不同意,如果是1执行下一个Activity,如果是0返回。

 

这个事例中有3State Activity,对一个state machine workflow 而言必须有一个InitialState CompletedState,以表明行为从哪里开始,到哪里结束。对State Activity而言,执行具体的行为,需要在该对象中,添加Event Driven对象,用于驱动这个状态行为,双击EventDriven对象进入到一个状态行为的具体设计流程中,如下图

 

对于一个状态行为内部流程,我们可以象执行Sequential流程那样定义,最后用Set State对象结尾,Set State 对象的TargetState属性用于表明,由该状态行为中跳出,跳转到TargetState指定的对象。

 

posted @ 2006-05-08 15:12 安徒生的童话 阅读(2534) 评论(4) 编辑

4、           Sequential Workflow With Parameters

Workflow的流程是可以带参数的,这样,流程代码可以根据外界参数的值来对后面执行情况进行选择判断。

在本例用选中SequentialWorkflow对象,可以看到该对象有Parameters属性,点击该属性,探出如下图窗体:

这里可以定义多个Parameter对象,包括对象的NameType等属性,Direction用于表明该参数是输入参数还是输出参数。本例中定义了amount输入参数,和status输出参数。

本例流程如图,ifElseBranch1Condition属性的执行方法如下:

  private bool IsApproved(object sender, EventArgs e)

        {

            if (Convert.ToInt32(this.Parameters["amount"].Value) < 500)

                return true;

            else

                return false;

        }

这里是根据外界传递来的参数amount的值判断ifElse最终选择的路径的。

Code1中:

private void Approved(object sender, EventArgs e)

{

    this.Parameters["status"].Value = "approved";

}

Code2中:

private void Rejected(object sender, EventArgs e)

{

    this.Parameters["status"].Value = "rejected";

}

Code1Code2分别给出了2种路径的输出参数值。

在看看Program.cs中是怎样调用这个带参数的工作流的

Dictionary<string, object> parameters = new Dictionary<string, object>();

parameters.Add("amount", Convert.ToInt32(args[0]));

 

// Load the workflow type

Type type = typeof(SequentialWorkflowWithParameters);

 

// Create and start an instance of the workflow

workflowRuntime.StartWorkflow(type, parameters);

在工作流结束的事件中,通过OutputParameters属性,拿到了输出参数status的值。

static void OnWorkflowCompleted(object sender, WorkflowCompletedEventArgs workflowCompletedEventArgs)

{

  //The order status is stored in the "status" "in" parameter

  string orderStatus = workflowCompletedEventArgs.OutputParameters["status"].ToString();

  Console.WriteLine("Order was " + orderStatus);

  waitHandle.Set();

}

posted @ 2006-05-08 15:07 安徒生的童话 阅读(1769) 评论(2) 编辑

2006年1月20日

SAP R/3软件具备以下功能和主要特点:
  功能性:R/3以模块化的形式提供了一整套业务措施,其中的模块囊括了全部所需要的业务功能并把用户与技术性应用软件相联而形成一个总括的系统,用于公司或企业战略上和运用上的管理。
  集成化: R/3把逻辑上相关联的部分连接在一起。重复工作和多余数据被完全取消,规程被优化,集成化的业务处理取代了传统的人工操作。
  灵活性:R/3系统中方便的裁剪方法使之具有灵活的适应性,从而能满足各种用户的需要和特定行业的要求。R/3还配备有适当的界面来集成用户自己的软件或外来的软件。
  开放性:R/3的体系结构符合国际公认的标准,使客户得以突破专用硬件平台及专用系统技术的局限。同时,SAP提供的开放性接口,可以方便地将第三方软件产品有效地集成到R/3系统中来。
  用户友好:图标与图形符号简化了人机交互时的操作。统一设计的用户界面确保了工作人员能够运用同样的熟悉的技术从事不通的工作。
  模块化:R/3的模块结构使用户既可以一个一个的选用新的实用程序,也可以完全转入一个新的组织结构体系。
  可靠:作为用户的商业伙伴SAP始终不断地为集成化软件的质量设立越来越多的国际标准。
  低成本高效益:信息处理是取得竞争优势的要点之一。当竞争加剧时,企业必须更加努力地获取其市场占有量。这就要使用高度集成化的数据处理软件,而R/3正是这种软件的优秀典范。
  国际适用:R/3支持多种语言,而且是为跨国界操作而设计的。R/3可以灵活地适应各国的货币及税物要求。
  服务:R/3系统实施过程中,用户将得到SAP技术专家的全面支持与服务,包括组织结构方面与技术方面的咨询,项目计划与实施方面的协助,以及培训课程。
★生产计划和控制
★销售与分销
★物料管理
★财务会计
★管理会计
★资产管理
★系统技术基础
posted @ 2006-01-20 09:49 安徒生的童话 阅读(305) 评论(0) 编辑

统计