Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 需要为错过工作流活动的联系人创建报告_Sql_Dynamics Crm_Dynamics Crm 2011 - Fatal编程技术网

Sql 需要为错过工作流活动的联系人创建报告

Sql 需要为错过工作流活动的联系人创建报告,sql,dynamics-crm,dynamics-crm-2011,Sql,Dynamics Crm,Dynamics Crm 2011,我们遇到了一个问题,我们的工作流没有创建活动 我现在需要报告哪些帐户尚未调用其工作流 我尝试了高级查找,然后转到sql 我的问题是,是否有人可以提供一个简单的初始查询来提取哪个“实体”没有与之关联的特定活动 如果问题不够清楚,请告诉我,或者需要更多信息。下面是一个使用SQL的解决方案,我在这里逐步完成了我的思考过程,下面是一个从C API编辑开始的解决方案:刚刚意识到这是一个报告,因此可以忽略该部分。我在大多数地方都发表了评论,所以我希望我的方法相当简单 SQL 一, -获取所有非活动和非相交实

我们遇到了一个问题,我们的工作流没有创建活动

我现在需要报告哪些帐户尚未调用其工作流

我尝试了高级查找,然后转到sql

我的问题是,是否有人可以提供一个简单的初始查询来提取哪个“实体”没有与之关联的特定活动


如果问题不够清楚,请告诉我,或者需要更多信息。

下面是一个使用SQL的解决方案,我在这里逐步完成了我的思考过程,下面是一个从C API编辑开始的解决方案:刚刚意识到这是一个报告,因此可以忽略该部分。我在大多数地方都发表了评论,所以我希望我的方法相当简单

SQL 一,

-获取所有非活动和非相交实体的实体N:N表 -输入您自己的where条件以进一步筛选此列表, -这可能仍然过于膨胀 选择 A.name EntityName 来自MetadataSchema.Entity A 哪里 A.I活动性=0 A.IsIntersect=0 二,

-将非活动实体与活动实体交叉连接 -获取所有可能的实体/活动对的列表 选择不同的 A.name EntityName ,B.名称活动名称 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 三,

-左键联接上面针对活动表的部分笛卡尔联接, -记录哪些实体实际有活动记录。 -这将提供实体/活动配对的完整列表 -存在与不存在 选择 A.name EntityName ,B.名称活动名称 -如果存在匹配的活动,则使用唯一键, -ActivityTypeCode int将为正。 -因此,如果一个实体/活动有一个正和 -配对,您知道有一个有效的配对;否则 -没有一对 ,SumCoalescc.ActivityTypeCode时CASTCASE,0>0 那么1 其他0 结束为位EntityOwnsActivity 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 左连接dbo.C打开 -ObjectTypeCode是实体的唯一标识符; -RegardingObjectTypeCode是实体类型的代码 -与特定活动相关的 A.ObjectTypeCode=C.RegardingObjectTypeCode -ActivityTypeCode是特定活动的代码 B.ObjectTypeCode=C.ActivityTypeCode 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 分组 名字 ,B.姓名 四,

-使用上面的主表将所有内容放在一起, -筛选出您感兴趣的实体/活动 -在本例中,所有未与关联的实体 -有电子邮件吗 选择 实体名字 从…起 选择 A.name EntityName ,B.名称活动名称 ,SumCoalescc.ActivityTypeCode时CASTCASE,0>0 那么1 其他0 结束为位EntityOwnsActivity 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 左连接dbo.C打开 A.ObjectTypeCode=C.RegardingObjectTypeCode B.ObjectTypeCode=C.ActivityTypeCode 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 分组 名字 ,B.姓名 实体活动 其中ActivityName='电子邮件' 和EntityOwnsActivity=0 订购人 实体名字 C.NETAPI 使用OrganizationServiceProxy\u serviceProxy= 新组织服务代理 新Uri…/XRMServices/2011/Organization.svc,null,null,null { _serviceProxy.EnableProxyTypes; RetrieveAllentiesRequest=新建RetrieveAllentiesRequest { EntityFilters=EntityFilters.Entity, RetrieveAsIfPublished=true }; //检索元数据。 EntityMetadata[]实体= RetrieveAllentiesResponse_serviceProxy.Executerequest.EntityMetadata; var ents=来自实体中的e1。其中x=>x.IsActivity!=true .其中x=>x.IsIntersect!=真 来自实体中的e2。其中x=>x.IsActivity==true 选择新的 { entityName=e1.SchemaName , activityName=e2.SchemaName }; //此时,由于左连接的Linq提供程序的有限性 //和sums相比,最好的方法可能是对每个实体/活动执行fetch查询 //combo,做一些加法,找出哪些combo匹配 //在活动指针表中 //API=效率非常低;可能在下一个CRM版本中有所改进?希望如此! }
下面是一个使用SQL的解决方案,我在这里逐步完成我的思考过程,下面是一个从C API开始的解决方案 编辑:刚刚意识到这是一个报告,所以这部分可以忽略。我在大多数地方都发表了评论,所以我希望我的方法相当简单

SQL 一,

-获取所有非活动和非相交实体的实体N:N表 -输入您自己的where条件以进一步筛选此列表, -这可能仍然过于膨胀 选择 A.name EntityName 来自MetadataSchema.Entity A 哪里 A.I活动性=0 A.IsIntersect=0 二,

-将非活动实体与活动实体交叉连接 -获取所有可能的实体/活动对的列表 选择不同的 A.name EntityName ,B.名称活动名称 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 三,

-左键联接上面针对活动表的部分笛卡尔联接, -记录哪些实体实际有活动记录。 -这将提供实体/活动配对的完整列表 -存在与不存在 选择 A.name EntityName ,B.名称活动名称 -如果存在匹配的活动,则使用唯一键, -ActivityTypeCode int将为正。 -因此,如果一个实体/活动有一个正和 -配对,您知道有一个有效的配对;否则 -没有一对 ,SumCoalescc.ActivityTypeCode时CASTCASE,0>0 那么1 其他0 结束为位EntityOwnsActivity 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 左连接dbo.C打开 -ObjectTypeCode是实体的唯一标识符; -RegardingObjectTypeCode是实体类型的代码 -与特定活动相关的 A.ObjectTypeCode=C.RegardingObjectTypeCode -ActivityTypeCode是特定活动的代码 B.ObjectTypeCode=C.ActivityTypeCode 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 分组 名字 ,B.姓名 四,

-使用上面的主表将所有内容放在一起, -筛选出您感兴趣的实体/活动 -在本例中,所有未与关联的实体 -有电子邮件吗 选择 实体名字 从…起 选择 A.name EntityName ,B.名称活动名称 ,SumCoalescc.ActivityTypeCode时CASTCASE,0>0 那么1 其他0 结束为位EntityOwnsActivity 来自MetadataSchema.Entity A 交叉连接MetadataSchema.Entity B 左连接dbo.C打开 A.ObjectTypeCode=C.RegardingObjectTypeCode B.ObjectTypeCode=C.ActivityTypeCode 哪里 A.I活动性=0 A.IsIntersect=0 和B.i活性=1 分组 名字 ,B.姓名 实体活动 其中ActivityName='电子邮件' 和EntityOwnsActivity=0 订购人 实体名字 C.NETAPI 使用OrganizationServiceProxy\u serviceProxy= 新组织服务代理 新Uri…/XRMServices/2011/Organization.svc,null,null,null { _serviceProxy.EnableProxyTypes; RetrieveAllentiesRequest=新建RetrieveAllentiesRequest { EntityFilters=EntityFilters.Entity, RetrieveAsIfPublished=true }; //检索元数据。 EntityMetadata[]实体= RetrieveAllentiesResponse_serviceProxy.Executerequest.EntityMetadata; var ents=来自实体中的e1。其中x=>x.IsActivity!=true .其中x=>x.IsIntersect!=真 来自实体中的e2。其中x=>x.IsActivity==true 选择新的 { entityName=e1.SchemaName , activityName=e2.SchemaName }; //此时,由于左连接的Linq提供程序的有限性 //和sums相比,最好的方法可能是对每个实体/活动执行fetch查询 //combo,做一些加法,找出哪些combo匹配 //在活动指针表中 //API=效率非常低;可能在下一个CRM版本中有所改进?希望如此! }
让我们看看:活动一次最多与一个实体相关联,因此我假设您谈论的是一种活动类型,如电子邮件、信函等。您想看看哪些实体没有任何关联的电子邮件或其他内容吗?@PeterMajeed,您明白了。唯一的区别是,我们使用的是工作流创建的自定义活动类型。让我们看看:活动一次最多与一个实体关联,因此我假设您谈论的是一种活动类型,如电子邮件、信函等。您想看看哪些实体没有与之关联的电子邮件吗,还是别的什么?@PeterMajeed你明白了。唯一的区别是,我们使用的是由工作流创建的自定义活动类型。这非常完美。谢谢你的努力
rt也是+这太完美了。谢谢你的努力+1.