现在的位置: 首页 > 综合 > 正文

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

2016年10月25日 ⁄ 综合 ⁄ 共 3106字 ⁄ 字号 评论关闭

先参考如下,再代码搞定  

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

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

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



添加输入参数

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

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

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

添加输出参数

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

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


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

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

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

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

其他属性

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

[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 方法,如以下示例所示。

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

另请参阅

以下代码手写
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 );
        }
    }

抱歉!评论已关闭.