zoukankan      html  css  js  c++  java
  • 使用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);

            }

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

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

    ========================================================

    比sharepoint更强大的表单功能,图形化的流程设计,与asp.net完美结合,支持vs.net编程扩展

    ========================================================

  • 相关阅读:
    phpstorm 2016.3.2 的最新破解方法(截止2017-2-20)
    在GitHub多个帐号上添加SSH公钥
    mac laravel 环境变量设置bash_profile
    Laravel的三种安装方法总结
    laravel登录后台500错误!
    composer镜像安装laravel
    phpstorm 代码按列对齐
    .DS_Store 文件是什么?Mac下面如何禁止.DS_Store生成
    如何在Mac下显示Finder中的所有文件
    PHP_环境配置_python脚本_2017
  • 原文地址:https://www.cnblogs.com/chegan/p/1511314.html
Copyright © 2011-2022 走看看