[登录]
[注册]
|
输入您的搜索字词
提交搜索表单
Web
www.pin5i.com
Visual Studio.NET
Ajax
ExtJS
JavaScript
jQuery
Java
C&C++
框架设计
编程工具
标签
拼吾爱程序人生
»
.Net编程
»
Silverlight
»
使用silverlight构建一个工作流设计器(十八)-持久化数据到数据库—服务器段功能实现
使用silverlight构建一个工作流设计器(十八)-持久化数据到数据库—服务器段功能实现
[
381
浏览 ][
手机版
]
返回列表
发布日期: 2009-07-02 13:17 发布者: cobra
1
#
字体大小:
t
T
上一篇:
使用silverlight构建一个工作流设计器(十七)-持久化数据到数据库—设计webservices接口
十八、保存到数据库—服务器段功能实现
17.3 服务器端代码实现
服务器端的功能是将数据保存到数据库,以及从数据库中取出xml描述文件返回给客户端。本文使用LINQ to Sql Classes的方法对数据库进行操作。如下图所示,增加一个linq的类
附件:
您所在的用户组无法下载或查看附件
然后在左边的数据库链接管理器中,增加一个数据库链接,如下图所示:
附件:
您所在的用户组无法下载或查看附件
剩下的工作就是编写更新和获取工作流xml描述的代码了。
获取工作流xml描述
/// <summary>
/// 获取工作流xml描述
/// </summary>
/// <param name="workflowID">流程ID</param>
/// <returns></returns>
[WebMethod]
public string GetWorkFlowXML(string workflowID)
{
string xml = "";
using (ShareDesigner.Web.Class.WorkFlowDataContext dataContext = new WorkFlowDataContext())
{
WorkFlow_Process process = dataContext.WorkFlow_Processes.First(p => p.WorkFlowID == workflowID);
if (process != null)
xml = process.WorkFlowXML;
}
return xml;
}
复制代码
更新工作流xml描述
/// <summary>
/// 更新流程xml
/// </summary>
/// <param name="workFlowXml">流程xml描述</param>
[WebMethod]
public void UpdateWorkFlowXML(string workFlowXml) {
using (ShareDesigner.Web.Class.WorkFlowDataContext dataContext = new WorkFlowDataContext()) {
WorkFlow_Process process = new WorkFlow_Process();
Byte[] b = System.Text.UTF8Encoding.UTF8.GetBytes(workFlowXml);
XElement xele = XElement.Load(System.Xml.XmlReader.Create(new MemoryStream(b)));
process.WorkFlowName = xele.Attribute(XName.Get("Name")).Value;
process.WorkFlowID = xele.Attribute(XName.Get("UniqueID")).Value;
process.WorkFlowXML = workFlowXml;
deleteExistsWorkFlow(process.WorkFlowID);
var partNos = from item in xele.Descendants("Activity") select item;
foreach (XElement node in partNos)
{
WorkFlow_Activity activity = new WorkFlow_Activity();
process.WorkFlow_Activities.Add(activity);
activity.ActivityID = node.Attribute(XName.Get("UniqueID")).Value;
activity.ActivityName = node.Attribute(XName.Get("ActivityName")).Value;
activity.ActivityType = node.Attribute(XName.Get("Type")).Value;
}
dataContext.WorkFlow_Processes.InsertOnSubmit(process);
partNos = from item in xele.Descendants("Rule") select item;
WorkFlow_Rule rule = null;
foreach (XElement node in partNos)
{ rule = new WorkFlow_Rule();
rule.BeginActivityID = node.Attribute(XName.Get("BeginActivityUniqueID")).Value;
rule.Condition = node.Attribute(XName.Get("RuleCondition")).Value;
rule.EndActivityID = node.Attribute(XName.Get("EndActivityUniqueID")).Value;
rule.RuleID = node.Attribute(XName.Get("UniqueID")).Value;
rule.RuleName = node.Attribute(XName.Get("RuleName")).Value;
rule.RuleType = node.Attribute(XName.Get("LineType")).Value;
dataContext.WorkFlow_Rules.InsertOnSubmit(rule);
}
dataContext.SubmitChanges();
}
}
复制代码
17.4 增加子流程的选择
有了以上的基础,我们可以在活动属性中设置子流程了。如下图所示:
附件:
您所在的用户组无法下载或查看附件
其中获取子流程的服务方法如下所示:
[WebMethod]
public string GetWorkFlowList()
{
string xml = "";
using (ShareDesigner.Web.Class.WorkFlowDataContext dataContext = new WorkFlowDataContext())
{
try
{
XDocument doc = new XDocument(
new XElement("WorkFlows", from p in dataContext.WorkFlow_Processes
select (new XElement("WorkFlow",
new XAttribute("Name", p.WorkFlowName),
new XAttribute("ID", p.WorkFlowID)))));
xml = doc.ToString();
}
catch (Exception e)
{
xml = "";
}
}
return xml; }
复制代码
客户端获取流程并显示的方法如下:
Byte[] b = System.Text.UTF8Encoding.UTF8.GetBytes(xml);
XElement xele = XElement.Load(System.Xml.XmlReader.Create(new MemoryStream(b)));
var partNos = from item in xele.Descendants("WorkFlow")
select new WorkflowListItem { Name = item.Attribute("Name").Value, ID = item.Attribute("ID").Value };
cbSubFlowList.ItemsSource = partNos;
cbSubFlowList.SelectedIndex = 0;
复制代码
其中WorkflowListItem是一个类,定义如下:
public class WorkflowListItem
{
public string Name { get; set; }
public string ID { get; set; }
public WorkflowListItem() { }
public WorkflowListItem(string name, string id)
{
Name = name;
ID = id;
}
}
复制代码
从上面的代码可以看出,使用.net framework确实可以提高我们的开发效率,并且代码更加简洁。
到此我们的持久化工作已经完成了,但是距离一个可用的工作流设计器还有一定距离。因为还没有关于工作流属性的配置信息,因为工作流系统各家的实现方法都不一样。因此很难有一个统一的标准,后文将根据wfmc提供的工作流参考模型来具体实现剩下的工作。敬请关注。(文/
chegan
)
下一篇:
使用silverlight构建一个工作流设计器(十九)-规则与活动的交点的平滑移动
源码下载
赞助商广告:
附件:您所在的用户组无法下载或查看附件
下面是更多相关的免费资源
•
Silverlight超酷翻页实例
•
Silverlight 图片局部放大效果
•
Silverlight 4 本地文件系统访问支持
•
如何在DeepEarth中进行图形绘制(点、线、多边形以及自定义图片图层)
•
最新Microsoft Expression Studio 3破解
•
Bing Maps进阶系列五:通过DeepEarth的MiniMap控件为Bing Maps扩展迷你小地图
•
Silverlight 开发中的疑难杂症-如何为Silverlight添加双击事件
•
Silverlight 开发中的疑难杂症-控件设计篇-如何实现一个EditorBox
•
三分钟制作精美电子地图(Silverlight 2 + Deep Zoom 含代码)
•
在Silverlight中开发User Control(用户控件)
•
Silverlight版的流程设计器
•
稳扎稳打 Silverlight 3.0 系列文章索引
•
使用silverlight构建一个工作流设计器(四)(附最新源代码及在线演示)
•
Silverlight 开发中的疑难杂症-如何实现一个NumericBox(下)
•
My Silverlight系列(6)—— c#版本的slilverlight.net官网导航栏
•
Silverlight 之 – Blend 之 Style for Button (三)
•
Silverlight 之 – Blend 之 LinearGradientBrush (二)
•
Silverlight 之 – Blend 一切源于Brush(一)
•
Silverlight 的弹出窗体--展示
•
Silverlight 图片局部放大效果(续)
TOP
返回列表
赞助商广告:
XML
SEO编程
Asp.Net
C & C++
帖子标题
作者
我的资料
JS压缩
Asp.Net
C#
Silverlight
WCF
WPF
WF