【问题标题】:C# CRM SDK Custom columnsC# CRM SDK 自定义列
【发布时间】:2012-06-15 11:03:40
【问题描述】:

如何构建 CRM SDK QueryExpression,其中两列的值合并为一个新列?在 MySQL 中,我的查询如下所示:

SELECT *, (`latest_maintenance`+`maintenance_interval`) as `next_maintenance` FROM `servers` ORDER BY `next_maintenance` DESC

然而,在 C# 中,我只能做到以下几点:

var retrieveRequest = new RetrieveMultipleRequest();

retrieveRequest.Query = new QueryExpression
                                    {
                                        EntityName = "server",
                                        ColumnSet = new ColumnSet(new[] {"latest_maintenance", "maintenance_interval"})
                                    };

var crmReponse = (RetrieveMultipleResponse) service.Execute(retrieveRequest);

如何将“latest_maintenance”和“maintenance_interval”加入“next_maintenace”以便能够使用OrderExpression

编辑:如何为 Microsoft Dynamics CRM 进行基于字符串的简单查询?似乎是一种比默认方式更容易理解的方式。

【问题讨论】:

    标签: c# dynamics-crm customcolumn


    【解决方案1】:

    如果您将 SDK 用于服务器端代码,那么您的选择是 QueryExpressionFetchXml。两者都不会按照您的要求进行,本机。

    请记住,使用 QueryExpression 您返回的是类型化对象,而不仅仅是字符串,因此如果您要连接两个值,它们需要一个用于存储的容器,即一个属性。

    你不能只“排序”第 1 列然后第 2 列吗?即

    var myQueryExpression = new QueryExpression
                                    {
                                        EntityName = "server",
                                        ColumnSet = new ColumnSet(new[]{
                                            "latest_maintenance", 
                                            "maintenance_interval"})
                                    };
    myQueryExpression.AddOrder("latest_maintenance", OrderType.Ascending);
    myQueryExpression.AddOrder("maintenance_interval", OrderType.Ascending);
    

    【讨论】:

    • 不,这不会正确排序项目,虽然维护不久前,维护间隔太短,以至于它们需要比一些已经维护更长时间的项目更早维护很久以前。
    • 好的,我现在明白了 - 你原来的问题说你正在“加入”这两个领域(隐含的连接)。您似乎暗示您正在向日期添加日期间隔,并且您希望按新计算的日期进行排序。在这种情况下,您最容易支持的解决方案是在“服务器”实体上创建一个名为“下一次维护”的新属性,并在运行时通过插件计算其值,只要 latest_maintenance 或 maintenance_interval 发生变化。
    • 好的,我该怎么做?我需要自动计算下一次维护,我知道如何添加该字段;)
    • 取决于maintenance_interval 采用什么形式。例如,如果它是表示天数的整数,则可以使用简单的更新后工作流将maintenance_interval 天添加到latest_maintenance 日期以派生next_maintenance。在任何其他情况下,您将需要编写一个插件,在创建和更新上述字段时注册,该字段执行日期计算并将新值应用于您的 next_maintenance 属性。
    • 看看这些对 OOB 工作流规则的扩展:(manipulationlibrary.codeplex.com/…) 它包括用于向日期添加值的自定义工作流程序集。这将允许您根据另一个字段中的值增加日期时间值。
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多