资源描述
1 说明
以下方法不要求宿主引用类,但是,如果xoml中使用了自定义的Activity,要将自定义的Activity所在的dll文件复制到宿主程序目录中
可以将其转换成另一种xoml文件,具体见[编译成DLL的工作流的XOML文件]
2 VS2005设计器生成的xoml文件
<SequentialWorkflowActivity
x:Class="wxwinter.wf.TestWorkflow.wxdTestWorkflow3"
x:Name="wxdTestWorkflow3"
xmlns:ns0="clr-namespace:wxwinter.wf.TestWorkflow"
xmlns:x="
xmlns="
<DelayActivity TimeoutDuration="00:00:00" x:Name="delayActivity1" />
<ns0:wxdTestOurValue Wxwinter="空" x:Name="wxdTestOurValue1" />
</SequentialWorkflowActivity>
注意
该文件不能用于直接创选实例,也不能用于动态编译
如果要使用,可参考下面的方法要求修改
x:Class
与
xmlns:ns0="clr-namespace
部分
3 从xoml文件创建工作流实例
只有加载由[从工作流类得到xoml字串]格式的xoml文件,即
没有x:Class部分
要有xmlns:ns0="clr-namespace部分有Assembly与Version与Culture与PublicKeyToken信息
<SequentialWorkflowActivity
x:Name="Workflow1"
xmlns:ns0="clr-namespace:WorkflowLibrary1;Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
xmlns:x="
xmlns="
<ns0:Activity1 x:Name="activity11" />
</SequentialWorkflowActivity>
Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
可以使用
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom("WorkflowLibrary1.dll");
System.Console.WriteLine(a.FullName);
得到
方法
/// <summary>
/// 从xoml文件创建工作流实例
/// </summary>
/// <param name="xomlfile">xomlfile文件</param>
/// <returns>实例guid或错误信息</returns>
public string CreateWorkflowFromXomlFile(string xomlfile)
{
try
{
System.Workflow.Runtime.WorkflowInstance instance;
XmlReader xr = XmlReader.Create(xomlfile);
instance = WFEngine.CreateWorkflow(xr);
return instance.InstanceId.ToString();
}
catch (System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException ex)
{
return "err:" + ex.Message;
}
}
4 从xoml字串创建工作流实例
只有加载由[从工作流类得到xoml字串]格式的xoml文件,即
没有x:Class部分
要有xmlns:ns0="clr-namespace部分有Assembly与Version与Culture与PublicKeyToken信息
<SequentialWorkflowActivity
x:Name="Workflow1"
xmlns:ns0="clr-namespace:WorkflowLibrary1;Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
xmlns:x="
xmlns="
<ns0:Activity1 x:Name="activity11" />
</SequentialWorkflowActivity>
Assembly=WorkflowLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
可以使用
System.Reflection.Assembly a = System.Reflection.Assembly.LoadFrom("WorkflowLibrary1.dll");
System.Console.WriteLine(a.FullName);
得到
方法
/// <summary>
/// 从xoml字串创建工作流实例
/// </summary>
/// <param name="xomlstring">xoml字符串</param>
/// <returns>实例guid或错误信息</returns>
public string CreateWorkflowFormXomlString(string xomlstring)
{
try
{
System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();
byte[] b = utf8.GetBytes(xomlstring);
System.IO.MemoryStream ms = new System.IO.MemoryStream(b);
XmlReader xr = XmlReader.Create(ms);
System.Workflow.Runtime.WorkflowInstance instance;
instance = WFEngine.CreateWorkflow(xr);
return instance.InstanceId.ToString();
}
catch (System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException ex)
{
return "err:" + ex.Message;
}
}
5
展开阅读全文