向自定义工作流活动添加属性并获得属性的值

来源:互联网 发布:俄罗斯老婆知乎 编辑:程序博客网 时间:2024/06/08 19:37

先参考如下,再代码搞定  

http://msdn.microsoft.com/zh-cn/library/gg327842.aspx#AddingInput

使用 .NET 属性为包含自定义工作流活动定义的程序集添加批注来提供 Microsoft Dynamics CRM 在运行时用于将代码链接到工作流引擎的元数据。有关 .NET 属性的详细信息,请参阅使用属性扩展元数据。

在开始将元数据添加到自定义工作流活动定义中之前,确保您知道自定义工作流活动支持的 Microsoft Dynamics CRM 类型和属性。有关详细信息,请参阅 进程类、属性和 Microsoft Dynamics CRM 类型.



添加输入参数

而在您工作流的类中指定的输入的参数,您还可以指定参数的默认值。 以下示例显示输入参数的定义。

C#
[Input("DateTime input")][Default("2004-07-09T02:54:00Z")]public InArgument<DateTime> Date { get; set; }

使用 .NET 属性 Input 为此输入参数添加批注。InputAttribute 类派生自 ParameterAttribute 类,后者使用参数 (ParameterAttribute.Name) 指定输入属性的名称。此名称显示在 Web 应用程序的流程窗体助理中。这样,您就可以将属性作为输入参数映射到流程。

添加输出参数

输出参数作为输入参数相同的方式添加。 以下示例显示的输出参数的定义。

C#
[Output("Money output only")][Default("23.3")]public OutArgument<Money> MoneyOutput { get; set; }

使用 .NET 属性 Output 为此输出参数添加批注。OutputAttribute 类派生自 ParameterAttribute 类,后者使用参数 (ParameterAttribute.Name) 指定输出属性的名称。此名称显示在 Web 应用程序的流程窗体助理中。这样,您就可以将某个属性映射为输出参数了。

为同一参数添加输入和输出属性

可以为同一参数使用输入和输出属性。在下面的代码示例中,IntParameter 是输入参数,也是输出参数。

C#
[Input("Int input")][Output("Int output")][Default("2322")]public InOutArgument<int> IntParameter { get; set; }

其他属性

一些类型(例如 EntityReference 和 OptionSetValue)需要除 InputOutput 和 Default 属性之外的其他属性。附加特性是: ReferenceTargetAttributeTarget。 以下示例显示了定义的参数的EntityReference类型。

C#
[Input("EntityReference input")][Output("EntityReference output")][ReferenceTarget("account")][Default("3B036E3E-94F9-DE11-B508-00155DBA2902", "account")]public InOutArgument<EntityReference> AccountReference { get; set; }

有关支持的类型和属性的列表,请参阅进程类、属性和 Microsoft Dynamics CRM 类型。

添加 Execute 方法

自定义工作流活动必须具有 Execute 方法,如以下示例所示。

C#
protected override void Execute(CodeActivityContext context){   if (AccountReference.Get(context).Id != new Guid("3B036E3E-94F9-DE11-B508-00155DBA2902"))   {      throw new InvalidPluginExecutionException("Unexpected default value");   }}

另请参阅

概念

创建自定义工作流活动 
在自定义工作流活动中使用 IOrganization Web 服务 
进程类、属性和 Microsoft Dynamics CRM 类型 

其他资源

Microsoft Dynamics CRM 2011年和 Microsoft Dynamics CRM Online 的自定义工作流活动 (工作流程序集) 
Microsoft Dynamics CRM 2011年和 Microsoft Dynamics CRM Online 的自定义工作流活动 (工作流程序集) 
示例:创建自定义工作流活动 
以下代码手写
public sealed class MyCodeActive : CodeActivity    {        // 定义一个字符串类型的活动输入参数        public InArgument<string> Text { get; set; }        //获得帐号信息        [Input("Account Name")]        public InArgument<string> AccountName { get; set; }        //获得发送内容        [Input("ContentList")]        public InArgument<string> ContentList { get; set; }        //测试增加一个带有默认值的属性        [Input("DateTime input")]        [Default("2013-09-24T00:00:00Z")]        public InArgument<DateTime> Date { get; set; }        // 如果活动返回值,则从 CodeActivity<TResult>        // 派生并从 Execute 方法返回该值。        WXwebservice.Service wx = new WXwebservice.Service();        protected override void Execute(CodeActivityContext executionContext)        {            // 获取 Text 输入参数的运行时值            string text = executionContext.GetValue(this.Text);            //            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();            IOrganizationServiceFactory factory = executionContext.GetExtension<IOrganizationServiceFactory>();            IOrganizationService service = factory.CreateOrganizationService(null);            Guid tmp = Guid.Empty;            Entity account = new Entity("account");            account.Attributes.Add("name", AccountName.Get(executionContext));                       tmp = service.Create(account);            //通过webservice发送微信            string getName = executionContext.GetValue(AccountName);            string getContent = executionContext.GetValue(ContentList);            wx.GetNameList(getName, "", "",getContent );        }    }


原创粉丝点击