需求说明:

当一个 Entity 存在 Business Process Process 时,有时我们需要改变其状态,在之前写的博客有讲了可以通过 JavaScript 来实现,本篇就来讲一下如何通过 C# Plugin 来实现对 BPF 的 abandon( abandon 后的 BPF 会变成灰色,BPF 里的  Stages 变成不可编辑,不能点击上一步和下一步,也不能 Set Active;如果想要使 Steps 也不可编辑,可通过 JavaScript 控制)。

解决方案:

通过 Solution 查看 Entities 组件时可以发现:在为一个 Entity 添加一个 Business Process Flow 的时候,实际上也是创建了一个新的 Entity(后面简称 BPF Entity),Entity 与 BPF Entity 之间的关系是 1:N。BPF Entity 中存在 Lookup 其 Primary Entity 的 Field,可以通过这个字段来查询当前 Entity 下的 BPF,之后改变其 State 和 Stauts 的值就可以将 BPF abandon 了。

Note:State -> statecode,Status -> statuscode,这两个字段都是 BPF Entity 的 Default Field,每个 Entity 都有的,表示状态,通过改变这两个字段的值来改变 Entity 的状态。

示例代码:

private void AbandonBPF(IOrganizationService service, Guid new_entity_id)
{
using (OrganizationServiceContext orgService = new OrganizationServiceContext(service))
{
var bpf_entity = (from _bpf_entity in orgService.CreateQuery<Entities.new_bpfentity>()
where _bpf_entity.bpf_new_entityid.Id == new_entity_id
select _bpf_entity).FirstOrDefault(); if (bpf_entity != null && bpf_entity.GetAttributeValue<OptionSetValue>("statecode").Value == )
{
//statecode = 1 and statuscode = 3 for abandon workflow
SetStateRequest setStateRequest = new SetStateRequest()
{
EntityMoniker = new EntityReference
{
Id = bpf_entity.BusinessProcessFlowInstanceId.Value,
LogicalName = Entities.new_bpfenity.EntityLogicalName,
},
State = new OptionSetValue(),
Status = new OptionSetValue()
};
service.Execute(setStateRequest);
}
}
}

Note:这里 new_entity 是 Entity name,new_bpfentity 是其对应 BPF Entity 的 name。

函数调用:

Entities.new_entity entity =  ((Entity)context.InputParameters["Target"]).ToEntity<Entities.new_entity>();
AbandonBPF(service, entity.id);

Dynamics CRM - 通过 C# Plugin 来 abandon Business Process Flow的更多相关文章

  1. Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程

    有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...

  2. Dynamics CRM - 在 C# Plugin 里以 System Administrator 权限来更新 Entity

    场景说明: 1.在使用 CRM 系统时,经常会有需要在某个 Entity 下对其他 Entity 的 Record 进行更新,或者在 post 中对自身进行更新,这里就需要用到 SDK 上的 upda ...

  3. Dynamics CRM 2016 使用Plug-in Trace Log调试插件

    1.写插件 首先,让我们写一个简单的插件来测试新插件跟踪日志功能.请注意,在下面的示例代码中,我们增加ITracingService的一个实例,以及记录有关插件的执行信息记录的一些键值: 2.注册插件 ...

  4. Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询

    DynamicEntity postImageEntity = (DynamicEntity)context.PostEntityImages["PostImage"]; if ( ...

  5. Dynamics CRM - Plug-in Class 和 Workflow Class 的用法与区别

    在 Dynamics CRM 开发中,我们可以使用 JavaScript 在前端对 Entity Form 进行数据操作,与此同时,我们也可以使用 C# 写后台插件,其中就包括了 Plug-in Cl ...

  6. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

  7. Dynamics CRM 如何修复 Access Is Denied - ObjectTypeCode: 2500 的错误

    最近被 Dynamics CRM 的权限配置问题恶心了一个星期,老是报“Access Is Denied”,几经波折,最后终于找到一个比较合适的解决方案,写个博客 mark 下来,方便以后查看. 首先 ...

  8. Dynamics CRM 2013 初体验(2):UI

    Dynamics CRM 2013 系统的UI与2011相比改动是巨大的:传统的导航栏被去掉了,取代它的是win8风格的小磁铁:Ribbon风格的工具栏也被去掉啦,它的风格将回滚至4.0时代:新系统添 ...

  9. Dynamics CRM 2013 初体验(3):新增加的功能

    新系统除了修补系统历史漏洞外当然还会添加些比较有意思的新功能,至于这些新功能是否好用那就得看它是否能经过咱们这些使用者的考验了.Dynamics CRM 2013系统将不再支持Dynamics CRM ...

随机推荐

  1. TRUNC()函数——oracle

    使用trunc()函数获取不同的日期: select trunc(sysdate) from dual; --今天的日期 select trunc(sysdate,'dd') from dual; - ...

  2. P 1028 人口普查

    转跳点:

  3. 【Android】家庭记账本手机版开发报告四

    一.说在前面 昨天 对界面显示和逻辑结构进行完善 今天 1.添加菜单(查询.清除所有等) 2.使用滑动删除 问题 1.在做查询时获取SearchView时引 入包错误经过长时间的尝试后才修正 2.滑动 ...

  4. UVA - 12545 Bits Equalizer (比特变换器)(贪心)

    题意:输入两个等长(长度不超过100)的串S和T,其中S包含字符0,1,?,但T只包含0和1,你的任务是用尽量少的步数把S变成T.有以下3种操作: 1.把S中的0变成1. 2.把S中的“?”变成0或1 ...

  5. C++ createprocess 打开word

    #define FileName _TEXT("E:\\DuplicateHandle伪句柄与实句柄的应用.docx") void CMFCApplication1Dlg::OnB ...

  6. VC控件-子类化控件技术

    子类化一个Windows控件与子类化一个C++类不同,子类化一个控件要求你把一个窗口的一些或所有的消息映射都替换成自己的函数来响应,这样你就有效的阻止了控件去做系统默认的行为,而按自己的想法去做.子类 ...

  7. Python风格规范分享

    今天给大家分享Python 风格规范,以下代码中 Yes 表示推荐,No 表示不推荐. 分号 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 每行不超过80个字符 以下情况除外: 长的 ...

  8. PAT Advanced 1013 Battle Over Cities (25) [图的遍历,统计连通分量的个数,DFS,BFS,并查集]

    题目 It is vitally important to have all the cities connected by highways in a war. If a city is occup ...

  9. find_element_by_xpath()的6种方法

    Xpath (XML Path Language),是W3C定义的用来在XML文档中选择节点的语言 一:从根目录/开始 有点像Linux的文件查看,/代表根目录,一级一级的查找,直接子节点,相当于cs ...

  10. chown virtualbox

    virtualbox安装 root@cbill-VirtualBox:/# chown --help用法:chown [选项]... [所有者][:[组]] 文件... 或:chown [选项]... ...