Return 来自 Dynamics365 代码的自定义 DTO class activity

Return a custom-defined DTO class from a Dynamics365 code activity

我正在尝试创建一个可以从 Dynamics 世界之外调用的 Dynamics365 扩展,以获取一些数据。

我被告知要调查的第一种方法是在 Dynamics 中创建一个 "action" - 这需要在 C# 代码中创建一个 CodeActivity,然后将其添加到 Dynamics 提供的 OData 提要中 - 听起来相当引人注目!

所以我尝试设置一个 CodeActivity class 来处理我的任务——从调用者那里获取一个 ProjectId (Guid) 和 Language 作为参数,并且然后在 Dynamics 内部,我将需要获取一些实体,从中提取一些信息,并将所有内容捆绑到我定义的 DTO class 中(它与 Dynamics 世界中的任何实体都不匹配 -所以这就是为什么我需要一个单独的 DTO class 来保存我需要提供的数据)和来自代码 activity.

的 return

我的 class 看起来像这样:

public class GetProject : System.Activities.CodeActivity
{
    [RequiredArgument]
    [Input("ProjectId")]
    public InArgument<Guid> ProjectId { get; set; }

    [Input("Language")]
    public InArgument<string> Language { get; set; }

    [Output("ProjectResponse")]
    public OutArgument<WebPortalDto> Response { get; set; }

    /// <summary>When implemented in a derived class, performs the execution of the activity.</summary>
    /// <param name="context">The execution context under which the activity executes.</param>
    protected override void Execute(CodeActivityContext context)
    {
        // TODO - implement logic
    }
}

我能够编译程序集 - 但在使用插件注册工具注册后,我首先收到一个错误,指出不支持 InParameter #1 的数据类型(我认为这是 ProjectId 参数,使用 GUID 类型)- 好吧,我将其更改为字符串,没什么大不了的。

但我现在遇到了更大的问题:OutParameter #1 的数据类型也不受支持......查看我们项目中的所有其他代码 activity classes,我看到他们几乎都 return 编辑了 EntityReference - 对内置 Dynamics 实体的引用。

但就我而言,我真的不能这样做。我必须 return 这个 DTO class (它主要包含一堆 INT 和 STRING 属性)。我如何从 Dynamics365 插件/代码 activity 做到这一点?

首先请记住,从 Dynamics 外部调用操作仍然需要 Dynamics 身份验证,它们不会被公开使用。

您可以考虑创建一个 Web 服务(由您在某处托管)或 Azure 函数来访问 Dynamics 数据和 return 您想要的输出。

如果您仍想继续执行操作和自定义工作流程activity,您只能使用可以使用的类型,因为您已经发现不能使用自定义对象,这是最佳选择在你的情况下将是 return 一个包含你的 DTO 的 JSON 的字符串。

Ps:Guid 不是有效类型,要在 Dynamics 中引用特定记录,您需要使用 EntityReference(即带有 Guid 和实体逻辑名称的 class)