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. 学会使用Constant常量或者Enum枚举

    好多时候我们在数据库表中存放的类型是一个代号CHAR(1) 0,1,2,3等分别代表些什么. 那么你是怎么知道0,1,2,3代表什么的呢? 有的是建表,连接查询,但很少人用. 有的是在jsp页面c:i ...

  2. 链式编程中的next()和end()

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  3. Android中SQLite下 Cursor的使用。

    引自博客大神一篇文   地址:  http://blog.sina.com.cn/s/blog_15e2abdd90102wcdu.html rawQuery()方法用于执行select语句.  /* ...

  4. JDBCl链接中Statement

    作用:创建的Statement对象执行SQL语句 (1)对象有Connection对象调用createStatement()方法创建 (2)有Statement对象调用executeUpdate()方 ...

  5. ubuntu下安装svn服务器

    sudo apt-get install apache2 sudo apt-get install subversion sudo apt-get install libapache2-svn 其次, ...

  6. hibernate内部测试题(附赠答案)

    一.选择题(共25题,每题2.5分,选择一项或多项,漏选错选不得分) 1.在Hibernate中,以下关于主键生成器说法错误的是( ). A.increment可以用于类型为long.short或by ...

  7. Javascript中call函数和apply函数的使用

    Javascript 中call函数和apply的使用: Javascript中的call函数和apply函数是对执行上下文进行切换,是将一个函数从当前执行的上下文切换到另一个对象中执行,例如: so ...

  8. 《JavaScript模式》第6章 代码复用模式

    @by Ruth92(转载请注明出处) 第6章:代码复用模式 GoF 在其著作中提出的有关创建对象的建议原则: -- 优先使用对象组合,而不是类继承. 传统模式:使用类继承: 现代模式:"类 ...

  9. C++ 中的对象布局

    C++中的涉及到虚表时,类对象的布局分为:虚表与数据成员,子类包含派生类布局,假设下面一个程序: #include <iostream> using namespace std; clas ...

  10. Flume 实战(2)--Flume-ng-sdk源码分析

    具体参考: 官方用户手册和开发指南 http://flume.apache.org/FlumeDeveloperGuide.html *) 定位和简单例子 1). Flume-ng-sdk是用于编写往 ...