0

我需要从 Dynamics CRM 4 工作流中获取记录的 GUID。这是在工作流执行期间创建的记录。我想编写一个 aw/f 程序集,它接受查找并返回一个包含 GUID 的字符串(这对我的目的来说已经足够了)。但是,程序集中的 Lookup 必须指定实体的类型。由于许多实体的需求已经存在,并且对于许多其他实体将由客户创建,恕不另行通知,这对我不起作用。

有什么方法可以轻松做到这一点,或者有什么方法可以为将接受任何实体类型的工作流程序集创建查找参数?

4

2 回答 2

2

您最好的选择是创建一个帖子创建插件,将 GUID 设置为自定义字段 (new_myguid),然后您的工作流程将能够在执行后立即读取该字段。

于 2010-03-31T14:58:49.910 回答
1

您是对的,您无法从工作流设计器本地访问实体 ID,并且自定义活动将被限制为每个输入属性的单个实体。

您可以实施 Focus 的建议,但您也需要每个实体上的自定义属性和插件。

我想我可能会做一个自定义活动并有多个输入属性,这些属性都输出到一个输出属性。

像这样的东西:

[CrmInput("Contact")]
[CrmReferenceTarget("contact")]
public Lookup Contact
{
    get { return (Lookup)GetValue(ContactProperty); }
    set { SetValue(ContactProperty, value); }
}
public static readonly DependencyProperty ContactProperty =
    DependencyProperty.Register("Contact", typeof(Lookup), typeof(YourActivityClass));

[CrmInput("Account")]
[CrmReferenceTarget("account")]
public Lookup Account
{
    get { return (Lookup)GetValue(AccountProperty); }
    set { SetValue(AccountProperty, value); }
}
public static readonly DependencyProperty AccountProperty =
    DependencyProperty.Register("Account", typeof(Lookup), typeof(YourActivityClass));

[CrmOutput("Entity ID")]
public string EntityID
{
    get { return (string)GetValue(EntityIDProperty); }
    set { SetValue(EntityIDProperty, value); }
}
public static readonly DependencyProperty EntityIDProperty =
    DependencyProperty.Register("EntityID", typeof(string), typeof(YourActivityClass));

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
    Lookup[] lookups = new[] { Contact, Account };
    foreach (Lookup lookup in lookups)
    {
        if (lookup != null && lookup.Value != Guid.Empty)
        {
            EntityID = lookup.Value.ToString();
            break;
        }
    }

    return ActivityExecutionStatus.Closed;
}
于 2010-03-31T16:17:39.640 回答