获取XML与SQL CRM2011

时间:2013-06-10 10:14:50

标签: dynamics-crm-2011 fetchxml

我有一个奇怪的问题,并希望有人可以解释它为什么会发生。如果我使用以下方法使用FetchXML查询动态:

<fetch mapping="logical" count="10" distinct="true" version="1.0">
<entity name="activitypointer">
    <attribute name="activityid" />
    <attribute name="activitytypecode" />
    <attribute name="createdon" />
    <attribute name="ownerid" />
    <attribute name="statecode" />
    <attribute name="statuscode" />
    <attribute name="subject" />
    <attribute name="actualend" />
    <order attribute="actualend" descending="true" />
    <filter type="or">
        <condition attribute="regardingobjectid" operator="eq" value="66431c2f-fab6-dd11-94f2-0014221f6f5c" />
    </filter>
</entity>

然后我得到以下结果:

Blurred 1

但是,如果我在SQL中执行相同的查询:

SELECT TOP 100 activityid, activitytypecodename, createdon, owneridname, statecodename, statuscodename, subject, actualend FROM [CRM2011_MSCRM].[dbo].[FilteredActivityPointer] WHERE regardingobjectid = '66431C2F-FAB6-DD11-94F2-0014221F6F5C' ORDER BY actualend DESC

然后我得到以下结果:

Blurred 2

您可以看到结果几乎相同,但是如果您查看状态代码列,那么您可以看到结果的不同之处在于,一个表明它已经发送而另一个已经完成。

因此,当两种不同的方法似乎为状态代码带来不同的结果时,如何根据项目的状态进行过滤?

(我目前正在尝试使用FetchXML在SSRS中进行报告我之前尝试在SQL中执行此操作但有问题,因此使用FetchXML来解决此问题)

- 修改

当我使用约会实体时,我确实得到了正确的结果:

<fetch mapping="logical" count="50" version="1.0">
<entity name="appointment">
    <attribute name="activityid" />
    <attribute name="activitytypecode" />
    <attribute name="actualend" />
    <attribute name="createdon" />
    <attribute name="ownerid" />
    <attribute name="statecode" />
    <attribute name="statuscode" />
    <attribute name="subject" />
    <filter>
        <condition attribute="regardingobjectid" operator="eq" value="66431c2f-fab6-dd11-94f2-0014221f6f5c" />
    </filter>
</entity>

返回此内容:

Appointment only query

这个问题的唯一问题是我需要知道整个不同活动列表的状态 - 因此我认为你需要使用活动指针(因为它是基类加上你不能将结果连接在一起) SSRS。)

1 个答案:

答案 0 :(得分:2)

嗯,这可能不是一个如何解决这个问题的答案,但我想我可以解释为什么会发生这种情况。 对于activitypointer的状态代码,fetchXML获取整数值并将其映射到activitypointer查找表,而SQL将其映射到实际的子实体表。

例如,记下您的第一条记录,恰好是一封电子邮件。 FetchXML表示状态为“已取消”。检查activitypointer元数据(http://msdn.microsoft.com/en-us/library/gg328148.aspx),我们看到“已取消”是值“3”。现在,转到电子邮件实体元数据(http://msdn.microsoft.com/en-us/library/hh155312.aspx),我们看到值“3”实际上是“已发送”,这就是SQL所说的。

这适用于表中的所有实体。例如,没有fetchXML状态的孤独任务实际上是根据sql完成的。这是值“5”(http://msdn.microsoft.com/en-us/library/gg594424.aspx),它不会映射到活动指针的任何内容;它们的值限制在1-4的范围内。结果,fetchXML什么也没显示。

尝试获取statuscodeValue而不是name。我希望fetchXML和SQL的整数值都是相同的。为什么他们以不同的方式映射名称我无法回答。