.net快速开发平台

工作流+智能表单
帮助企业快速应对变化
使用silverlight构建一个工作流设计器(十七)-持久化数据到数据库—设计webservices接口
 

源代码下载:http://www.shareidea.net/opensource.htm

在线演示:http://www.shareidea.net/workflow.htm

视频教程: http://www.shareidea.net/video/sharedesigner/sharedesigner.html

QQ群:85444465 

如果您方便,请参与下面的调查,支持sharedesigner发展: 打开调查页面

本文系列索引: 

使用silverlight构建一个工作流设计器(一)

使用silverlight构建一个工作流设计器(二)

使用silverlight构建一个工作流设计器(三)

使用silverlight构建一个工作流设计器(四)

使用silverlight构建一个工作流设计器(五)

使用silverlight构建一个工作流设计器(六)

使用silverlight构建一个工作流设计器(七)

使用silverlight构建一个工作流设计器(八)

使用silverlight构建一个工作流设计器(九)

使用silverlight构建一个工作流设计器(十)  

使用silverlight构建一个工作流设计器(十一)  

使用silverlight构建一个工作流设计器(十二)  

使用silverlight构建一个工作流设计器(十三)  

使用silverlight构建一个工作流设计器(十四)  

使用silverlight构建一个工作流设计器(十五)    

使用silverlight构建一个工作流设计器(十六) 

使用silverlight构建一个工作流设计器(十七) 

在开始之间,先说下程序增加的一个小功能,就是给容器增加网格线的功能,使得容器看上去类似下面的样子

 

当然可以有两种方法来实现,一种就是使用背景图片,但本文一贯的原色就是少用图片,多用silverlight的画图功能来实现,这些网格都可以使用xaml中的Line对象来实现。为此我们需要动态设定一个Canvas,然后把这些动态生成的Line对象添加到Canvas中,最后再把Canvas添加到容器里面,这里讲的比较简单,但是在程序中,还需要考虑回滚,Zindex的影响。下面的代码描述了动态增加网格线的功能。

 

Code

 

  

十七、保存到数据库—设计webservices接口

17.2 设计webservices服务接口

首先我们需要两个webservices服务,一个用户从服务器端下载流程xml描述文件,另一个将用户本地的流程xml描述更新到服务。

这个工作涉及到两个部分,首先在客户端需要作一些修改以适应目前这种情况。

另一个部分就是服务器端增加新的方法来持久化数据

17.2.1 webservices服务接口

ShareDesigner.Web项目中增加一个WorkFlow.asmx服务页,增加两个服务接口方法。如下所示:

public class WorkFlow : System.Web.Services.WebService

    {

        /// <summary>

        /// 获取工作流xml描述

        /// </summary>

        /// <param name="workflowID">流程ID</param>

        /// <returns></returns>

        [WebMethod]

        public string GetWorkFlowXML(string workflowID)

        {

 

            return "";

        }

        /// <summary>

        /// 更新流程xml

        /// </summary>

        /// <param name="workFlowXml">流程xml描述</param>

        [WebMethod]

        public void UpdateWorkFlowXML(string workFlowXml)

        {

            

        }

}

 

17.2.2 客户端方法实现

客户端首先添加webservices引用,名称空间为ServicesClient

l         从服务器获取工作流xml描述

if (!string.IsNullOrEmpty(WorkFlowUrlID))

            {

 

                System.ServiceModel.BasicHttpBinding bind = new System.ServiceModel.BasicHttpBinding();

                System.ServiceModel.EndpointAddress endpoint = new System.ServiceModel.EndpointAddress(

                    new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, "services/workflow.asmx"), null);

 

                ServicesClient.WorkFlowSoapClient wfClient = new Shareidea.Web.UI.Control.Workflow.Designer.ServicesClient.WorkFlowSoapClient(bind, endpoint);

                wfClient.GetWorkFlowXMLCompleted += new EventHandler<Shareidea.Web.UI.Control.Workflow.Designer.ServicesClient.GetWorkFlowXMLCompletedEventArgs>(wfClient_GetWorkFlowXMLCompleted);

                wfClient.GetWorkFlowXMLAsync(WorkFlowUrlID);

 

            }

在上面的代码中,WorkFlowUrlID是一个属性,如下所示:

public string WorkFlowUrlID

        {

            get

            {

                if (System.Windows.Browser.HtmlPage.Document.QueryString.ContainsKey("id"))

                    return System.Windows.Browser.HtmlPage.Document.QueryString["id"].ToString();

                return "";

            }

        }

这表明,根据从url传递的id值从服务器获取工作流描述。一个常见的访问场景如下所示:

 

http://localhost/ ShareDesinger.aspx?id=1234567

 

l         更新xml描述到服务器

 

            System.ServiceModel.BasicHttpBinding bind = new System.ServiceModel.BasicHttpBinding();

            System.ServiceModel.EndpointAddress endpoint = new System.ServiceModel.EndpointAddress(

                new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, "services/workflow.asmx"), null);

 

            ServicesClient.WorkFlowSoapClient wfClient = new Shareidea.Web.UI.Control.Workflow.Designer.ServicesClient.WorkFlowSoapClient(bind, endpoint);

            wfClient.UpdateWorkFlowXMLCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(wfClient_UpdateWorkFlowXMLCompleted);

            wfClient.UpdateWorkFlowXMLAsync(ToXmlString());

 

 其中使用到了更新方法的回调,方法如下:

void wfClient_UpdateWorkFlowXMLCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)

        {

            System.Windows.Browser.HtmlPage.Window.Alert(Text.Message_Saved);

        }

 

需要注意的是,在这里并没有做异常的处理逻辑,留待以后添加吧。

本章内容就是这样了,下一张将完成整个持久化工作。敬请关注:)

 

posted on 2009-06-26 00:16  chegan  阅读(3527)  评论(6编辑  收藏  举报