【问题标题】:How can we set second picklist value dynamically with string value is know in CRM Dynamics 4.0在 CRM Dynamics 4.0 中,我们如何使用字符串值动态设置第二个选项列表值
【发布时间】:2025-11-25 20:20:03
【问题描述】:

我在汽车详细信息实体中有两个选择列表。我正在使用自定义工作流活动的输入参数(即 CrmNumber)设置 Model (cir_model) Picklist 值,它按预期工作,第二个选择列表 Marque (cir_marque ) 将使用 Model 选择列表进行逻辑设置。

逻辑应该是如果 Model 设置为“Ac Ace”,那么 Marque 应该设置为“Ac”。使用 Split() 从字符串 'Ac Ace' 中获取值 'Ac'。

通常在 C# 中这很容易完成,但在 CRM 4.0 中如何实现(我如何将“Ac”设置为 Marque)

public static DependencyProperty modelProperty = DependencyProperty.Register("model",  
typeof(int), typeof(CreateCardetails));
[CrmInput("Model")]
public int model
{
    get
    {
        return (int)base.GetValue(modelProperty);
    }
    set
    {
        base.SetValue(modelProperty, value);
    }
}

public static DependencyProperty ContactProperty =   
DependencyProperty.Register("Contact", typeof(Lookup), typeof(CreateCardetails));

[CrmInput("Contact ID")]
[CrmReferenceTarget("contact")]
public Lookup Contact
{
    get
    {
        return (Lookup)base.GetValue(ContactProperty);
    }
    set
    {

        base.SetValue(ContactProperty, value);
    }
}

protected override ActivityExecutionStatus Execute(ActivityExecutionContext  
executionContext)
{
        //Create an car details record which will be linked to the contact record
        DynamicEntity cardetails = new DynamicEntity("cir_cardetails");

        cardetails["cir_carsdetailsid"] = Contact;

        //Setting the picklist value of Model

         Picklist modelPickList = new Picklist();
         modelPickList.Value = model.Value;
         cardetails.Properties.Add(new PicklistProperty("cir_model",modelPickList));

  /*
      Here the logic should be done for setting Marque (cir_model) value 
         Picklist marquePickList = new Picklist();
         marquePickList.Value = ???
         cardetails.Properties.Add(new PicklistProperty("cir_marque",marquePickList));
  */

       //Creating the car details record
        Guid carkey = crmService.Create(cardetails);
}

我们如何在逻辑上设置 Marque 值,我将代码留空,如下所示

/*
      Here the logic should be done for setting Marque (cir_marque) value 
         Picklist marquePickList = new Picklist();
         marquePickList.Value = ???
         cardetails.Properties.Add(new PicklistProperty("cir_marque",marquePickList));    
*/

请安排帮助我解决这个问题,欢迎所有建议。

【问题讨论】:

    标签: workflow dynamics-crm dynamics-crm-4 workflow-activity


    【解决方案1】:

    CRM 4.0 没有语言,在 CRM 4.0 中您使用 c# 编写代码。唯一改变的是您使用新类型的方式。

    在工作流中,您不使用控件,而是使用实体和相关属性。所以你“只”需要获取属性 cir_model,做一个子串并在 Marque 中找到可用的选项并设置正确的值。检查来自 SDK 的 this 示例。

    【讨论】:

    • 查看指定记录的 RetrieveRequest 请求,没问题。我想要的东西有两个具有不同值的选择列表。但是它们的值是合乎逻辑的。即 1 个选择列表有法拉利,但第二个选择列表可能是“法拉利 360”、“法拉利 220”等中的任何一个。我将“法拉利 220”设置为第二个选择列表,但我想将法拉利设置为第一个选择列表。我想要一个 CRM 代码来实现这一点。
    【解决方案2】:

    您可以使用 JavaScript 或 C#(插件、工作流)来完成此操作。在选择使用哪种方法时需要考虑一些注意事项。

    如果您希望用户能够实时看到结果(当他们选择时),那么您可以使用 JavaScript。

    如果您不希望用户看到结果,或者有来自外部来源(而不是用户表单)的数据,请考虑使用插件。

    我认为您不必使用 WF 来执行此操作,插件同样易于编写,并且会立即发生,而不是等待异步过程完成。

    【讨论】:

    • 如果我知道要在插件中使用的代码来实现这一点,那么我可以在自定义工作流活动中使用相同的代码。您对如何在插件中使用 C# 代码获取任何实体选择列表的所有下拉列表有什么建议吗?如果您有任何想法,请在此处发布。将不胜感激。
    • 您可以通过检索该属性的元数据来检索该属性的所有选项。将 AttributeMetadata 转换为 PicklistAttributeMetadata 对象,它将具有具有标签和值的选项列表。 msdn.microsoft.com/en-us/library/bb890660.aspx
    • 您希望在用户更改表单时结果显示在表单上吗?如果是这样,你不能用插件或工作流来做到这一点,你需要使用 javascript。
    • 不,不是那样的。我将在第一个选择列表中传递输入值,例如“Ferrari 360”(索引值),所以它应该设置“Ferrari”(但这里不知道索引,获取所有列表项,比较并设置为它)到第二个选择列表。
    最近更新 更多