【问题标题】:How can I get all the activities for an account?如何获取一个帐户的所有活动?
【发布时间】:2014-07-09 04:40:37
【问题描述】:

我编写了一个程序,可以从 Dynamics CRM 2013 在线获取数据。但是我遇到了一个问题,即获取帐户活动的查询仅返回一个子集而不是所有活动。查询表达式是这样的

private QueryExpression CreateActivityQuery(Guid id)
{
    QueryExpression query = new QueryExpression()
    {
        Distinct = true,
        EntityName = Cd2Sf.ActivityPointer.EntityLogicalName,
        ColumnSet = new ColumnSet(true)
    };
    query.Criteria = new FilterExpression();
    query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, id);
    return query;
}

其中 id 是帐户 ID。我首先尝试使用派对 id 等于帐户 id 的活动方,然后尝试使用 aboutobjectid,最后尝试使用扩展相关实体的 Rollup 方法,但都产生相同的结果。

#region Create RollupRequest
// Create RollupRequest
RollupRequest rollupRequest = new RollupRequest();
rollupRequest.Query = qexp;
rollupRequest.Target = new EntityReference("account", acct.Id);
rollupRequest.RollupType = RollupType.Extended;
#endregion Create RollupRequest

#region Execute RollupRequest
// Execute RollupRequest
RollupResponse rollupResponse = (RollupResponse)service.Execute(rollupRequest);
#endregion Execute RollupRequest

#region Show RollupResponse results
ShowActivities(rollupResponse.EntityCollection, percent);
#endregion Show RollupResponse results

我是否还需要使用联系人来获取与帐户关联的所有活动,即使用活动方并将收件人/发件人/cc/bcc/etc 与帐户的联系人匹配?我曾尝试使用联系人 ID 作为相关对象 ID,但这仍然不能解释所有活动。

在查看帐户和该页面上的活动时,动态 crm online 的网页似乎比上述查询单独获得的要多。

我如何获得其他活动,那些似乎与帐户没有直接关系的活动?

【问题讨论】:

    标签: c# dynamics-crm-online


    【解决方案1】:

    我的原始答案没有回答这个问题 - 我在这里缩写了它。

    Sarah Champ 关于在 fetchxml 中使用外连接的帖子非常好: http://blogs.msdn.com/b/crminthefield/archive/2013/07/01/dynamic-activity-reporting-using-fetchxml.aspx

    您必须使用 FetchExpression 而不是 QueryExpression,但您现在可以使用与 RetrieveMultipleRequest 相同的方式。


    FetchExpression 示例:

    string fetch = "<fetch xml string>"
    var query = new FetchExpression(fetch);
    var request = new RetrieveMultipleRequest();
    request.Query = query;
    var entities = ((RetrieveMultipleResponse)service.Execute(request)).EntityCollection.Entities;
    foreach (var entity in entities)
    {
        Console.WriteLine(entity.GetAttributeValue<string>("subject"));
    }
    

    【讨论】:

    • 好的,我想我明白了。我错过了这个机会。让我尝试使用帐户的两个外部联接来联系和机会。
    • 首先我必须说我对动力学完全陌生。虽然我现在可以看到将 fetchxml 与高级查找结合使用更容易,尤其是该页面上的生成按钮。所以我正在尝试使用高级查找,看看是否可以获取活动。
    • 更新:我现在可以看到我的测试帐户中的 9 个活动中有 6 个来自哪里。有些来自子帐户,它似乎汇总到父帐户。我还剩下三个“机会关闭”活动。我尝试跟踪机会接近机会并最终跟踪帐户,但这似乎并没有返回该测试帐户的“机会关闭”活动。任何人都可以判断查询表达式“JoinOperator.Natural”是否与 fetchxml 上的外部相同。
    • JoinOperator.LeftOuter 与 fetchxml 中的相同。我以前没有使用过自然连接,但我相信它们在没有指定字段的情况下链接两个表,任何匹配的字段都会返回,所以如果你有一堆具有相同时间戳的记录......好吧 - 我确定一定有什么他们很适合。
    • 如果您只在代码中使用 fetchxml,您可以执行多个查询并将两者的结果添加到单个 List 或 EntityCollection。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多