AX 2012 中当审批流流转到某个节点时,如果在该节点的审批人的域账号被停用,审批流将会停止,会报如图的错误:

要解决这个问题,得修改标准功能,需要修改SysWorkflow和SysWorkflowWorkItem两个类

public server static void fault(
Microsoft.Dynamics.AX.Framework.Workflow.Runtime.WorkflowContext _workflowContext,
WorkflowUser _user,
WorkflowFaultMessage _faultMessage)
{
UserConnection connection;
SysWorkflowFaultTable faultTable; setPrefix(classStr(SysWorkflow) + '-' + staticMethodStr(SysWorkflow, fault)); new InteropPermission(InteropKind::ClrInterop).assert(); if (CLRInterop::isNull(_workflowContext))
{
throw error(strFmt("@SYS104836", staticMethodStr(SysWorkflow, fault), varStr(_workflowContext)));
}
// CR <Hotfixed> VAR on 2016-07-26 at 15:04:07 Changed by Kim -Begin
if (SysWorkflowTable::find(CLRInterop::getAnyTypeForObject(_workflowContext.get_WorkflowCorrelationId())).RecId != )
// CR <Hotfixed> VAR on 2016-07-26 at 15:04:07 Changed by Kim -End
{
if (appl.ttsLevel() == )
{
SysWorkflow::internalFault(_workflowContext, _user, _faultMessage);
}
else
{
// We are in a nested transaction so we want to do the fault even if the outer transaction
// is rolled back so we do it on a sperate connection.
connection = new UserConnection();
faultTable.setConnection(connection);
if (!SysWorkflowFaultTable::exist(_workflowContext.get_RootCorrelationId()))
{
connection.ttsbegin();
faultTable.RootCorrelationId = _workflowContext.get_RootCorrelationId();
faultTable.FaultMessage = _faultMessage;
faultTable.User = _user;
faultTable.insert();
connection.ttscommit();
}
}
} CodeAccessPermission::revertAssert();
}
// EDD number Hotfix
// EDD description Hot fix
// Layer var
// Model VAR Model
//
// Developer Date Comments
// -------------- ----------------- ------------------------------
// Kim.Ding 三月-22-2016 13:46:01 Created
public static boolean TEC_checkADUser(UserId _userId)
{
xAxaptaUserManager mgr;
xAxaptaUserDetails det;
UserInfo userInfo;
boolean ok = true;
; mgr = new xAxaptaUserManager();
select userInfo where userInfo.Id == _userId;
det = mgr.getDomainUser(userInfo.NetworkDomain,userInfo.id);
if (det == null)
{
ok = false;
}
return ok;
}
/// <summary>
/// Microsoft internal use only.
/// </summary>
/// <param name="_workItemContext">
/// An instance of the <c>CLRObject</c> class.
/// </param>
/// <param name="_isClaimed">
/// A <c>WorkflowWorkItemClaimed</c> value.
/// </param>
/// <returns>
/// A <c>recId</c> value.
/// </returns>
private server static RecId create(
Microsoft.Dynamics.AX.Framework.Workflow.Runtime.WorkItemActivityContext _workItemContext,
WorkflowWorkItemClaimed _isClaimed)
{
..... userContext = _workItemContext.get_User();
user = userContext.get_UserId();
// CR <Hotfix> VAR on 2016-03-22 at 13:49:48 Changed by Kim -Begin
if (!SysWorkflowWorkItem::TEC_checkADUser(user))
{
return ;
}
// CR <Hotfix> VAR on 2016-03-22 at 13:49:48 Changed by Kim -End
autoDelegators = userContext.get_Delegators();
sysWorkflowDocument = SysWorkflowDocument::newDocument(
SysWorkflowConvert::toXppWorkflowContext(workflowContext),
versionTable.workflowTable().TemplateName,
user); .... }

AX2012 审批流流转到已停用的域账号导致审批流停止的更多相关文章

  1. USB硬件远程共享解决iphone已停用

    悲剧的在iphone拆过电池之后,再开机显示iphone已停用,请在23000000分钟后再试一次 算算这得45年了,可以留给孙子用了... 网上除了刷机和有同步过的电脑貌似没有别的办法了 因是旧系统 ...

  2. iPhone 已停用

    如果你的iPhone上出现了如下的显示,你可以参考苹果官网上的  iOS设备已停用 如果你看到了这篇文章,你比我幸运多了. 参考这一个条目,你也许就不会丢失里面的数据了. 可怜的我,出现这个问题时还没 ...

  3. 为什么手机连接wifi会显示已停用?

    1.通常导致手机连接WiFi显示“已停用”故障的原因是由于无线路由器“安全模式”设置不当造成的,对此我们可以通过以下方法来解决: 2.根据无线路由器背面的信息(包括路由器IP地址,登陆用户名和密码), ...

  4. 【03】Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办?

    [03] Chrome提示印象笔记剪藏插件"已停用不支持的扩展程序"怎么办? 刚好也遇上了这个问题,百度了一下,以下是解决方法,亲测可行: 1.首先把需要安装的第三方插件,后缀.c ...

  5. ipad已停用 连接itunes怎么办

    问题描述: ipad 开机密码多次输入出错后,提示 ipad已停用 连接itunes 解决方法: 参考: https://jingyan.baidu.com/article/fb48e8bee9ef4 ...

  6. 对“demo!demo.Index+HookProc::Invoke”垃圾收集的类型已委托回调。这可能会导致应用程序崩溃、损坏和数据丢失。当传递委托给非托管代码,托管应用程序必须让这些委托保持活着

    对"demo!demo.Index+HookProc::Invoke"垃圾收集的类型已委托回调.这可能会导致应用程序崩溃.损坏和数据丢失.当传递委托给非托管代码,托管应用程序必须承 ...

  7. Chrome谷歌浏览器已停用不支持的扩展程序解决方法

    在不能上外网的情况下解决该问题: http://www.liu16.com/post/Chrome_2447.html

  8. Hosts 长期更新【已停】

    修改hosts篇 [2018.1.3] 由于google的对应的hosts更新过于频繁,再加上上次(18+1)大之后,国家政策原因,网上hosts更新基本上都停了,github的项目也陆续挂掉了. 还 ...

  9. AIO5程序中审批跳转条件:超过某一个值必须总经理审批

    以实际需求为例看下系统中如何设置: 客户需求:采购订单中对总金额进行限制,超过20000的话必须要经过总经理审批含税金额<20000:采购部门某个员工发起→直接主管批→财务主管知会含税金额≥20 ...

随机推荐

  1. linux下用命令导出mysql表数据

    由于数据库服务器是内网环境,只能通过linux跳板机连接,所以navicat工具暂时用不上. 1.用Xshell工具连接跳板机 2.再通过跳板机连接数据库服务器 >ssh -p port ip ...

  2. HTML编码规则、CSS属性声明顺序--简介

    From AmazeUI:http://amazeui.org/getting-started/html-css-guide HTML 属性顺序 HTML 属性应当按照以下给出的顺序依次排列,确保代码 ...

  3. vim使用过程

    首先推荐几篇文章先: 用Vim编程——配置与技巧 有时候需要设置映射键,此时可以在.vimrc中配置一些项就可以轻松映射了. 以下是几个映射模式: map : 正常模式,可视化模式和运算符模式可用 n ...

  4. xmimd的第十天笔记

  5. Java初学者入门应该掌握的30个概念

    1.OOP中唯一关系的是对象的接口是什么,就像计算机的销售商她不管电源内部结构 是怎样的,他只关系能否给你提供电就行了,也就是只要知道can or not而不是how and why.所有的程序是由一 ...

  6. tableView

    Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...

  7. i++; 与 ++i;的内部区别。

    对于一个用前置自加和后置自加的效果相同的地方,我们应该用哪个呢? 例: for(point i = 0; i != N; ?): 上面for语句中的“?”处,你会在那里写i++还是++i呢? 前置++ ...

  8. (转)分布式深度学习系统构建 简介 Distributed Deep Learning

    HOME ABOUT CONTACT SUBSCRIBE VIA RSS   DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...

  9. asp.net httpmodule 访问页面控件 备忘

    用到的时候发现还得找代码,存一个例子方便自己和他人修改: using System; using System.Data; using System.Configuration; using Syst ...

  10. finally语句总是不会被执行?

    答案是否(1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行.这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到.( ...