使用silverlight构建一个工作流设计器(十七)-持久化数据到数据库—设计webservices接口
在开始之间,先说下程序增加的一个小功能,就是给容器增加网格线的功能,使得容器看上去类似下面的样子
当然可以有两种方法来实现,一种就是使用背景图片,但本文一贯的原色就是少用图片,多用silverlight的画图功能来实现,这些网格都可以使用xaml中的Line对象来实现。为此我们需要动态设定一个Canvas,然后把这些动态生成的Line对象添加到Canvas中,最后再把Canvas添加到容器里面,这里讲的比较简单,但是在程序中,还需要考虑回滚,Zindex的影响。下面的代码描述了动态增加网格线的功能。
Code
GridLinesContainer.Children.Clear();
SolidColorBrush brush = new SolidColorBrush();
brush.Color = Color.FromArgb(255, 160, 160, 160);
// brush.Color = Color.FromArgb(255, 255, 255, 255);
double thickness = 0.3;
double top = 0;
double left = 0;
double width = cnsDesignerContainer.Width;
double height = cnsDesignerContainer.Height;
double stepLength = 40;
double x, y;
x = left + stepLength;
y = top;
while (x < width + left)
{
Line line = new Line();
line.X1 = x;
line.Y1 = y;
line.X2 = x;
line.Y2 = y + height;
line.Stroke = brush;
line.StrokeThickness = thickness;
line.Stretch = Stretch.Fil;
GridLinesContainer.Children.Add(line);
x += stepLength;
}
x = left;
y = top + stepLength;
while (y < height + top)
{
Line line = new Line();
line.X1 = x;
line.Y1 = y;
line.X2 = x + width;
line.Y2 = y;
line.Stroke = brush;
line.Stretch = Stretch.Fil;
line.StrokeThickness = thickness;
GridLinesContainer.Children.Add(line);
y += stepLength;
}
十七、保存到数据库—设计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 GetWorkFlowXM(string workflowID)
{
return "";
}
/// <summary>
/// 更新流程xm
/// </summary>
/// <param name="workFlowXm">流程xml描述</param>
[WebMethod]
public void UpdateWorkFlowXM(string workFlowXm)
{
}
}
17.2.2 客户端方法实现
客户端首先添加webservices引用,名称空间为ServicesClient
从服务器获取工作流xml描述
if (!string.IsNullOrEmpty(WorkFlowUrlID))
{
System.ServiceMode.BasicHttpBinding bind = new System.ServiceMode.BasicHttpBinding();
System.ServiceMode.EndpointAddress endpoint = new System.ServiceMode.EndpointAddress(
new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, "services/workflow.asmx"), nul);
ServicesClient.WorkFlowSoapClient wfClient = new Sha
|