[AX2012 R3]关于Named user license report
Named user license报表是用来统计各种授权类型用户数的,这里来看看报表数据具体是如何来的。这是一个SSRS的报表,最主要的数据源是来自于类SysUserLicenseCountReport定义的RDP,在SysUserLicenseCountReport的方法processReport中使用SysUserLicenseMiner::fillUserLicenseCountTmpTbl()填充一个临时表,最核心的部分就是这个方法:
public static void fillUserLicenseCountTmpTbl(SysUserLicenseCountTmp _userLicCountTblTmp, date _reportStateDate)
{
SysUserLicenseCount sulcTbl;
SysUserLicenseList sullTbl;
SecurityUserRole surTbl;
SecurityRole rTbl;
SysRoleLicenseType userRoleLicense;
delete_from _userLicCountTblTmp; ttsbegin; while select validTimeState(_reportStateDate, _reportStateDate) * from sulcTbl
outer join sullTbl
outer join User, SecurityRole from surTbl
join SecurityRole, UserLicenseType from userRoleLicense
join RecId, Name from rTbl
order by sulcTbl.UserLicenseType desc
where (sulcTbl.RecId == sullTbl.SysUserLicenseCount
&& sullTbl.UserName == surTbl.User
&& userRoleLicense.SecurityRole ==surTbl.SecurityRole
&& rTbl.RecId == surTbl.SecurityRole)
{
_userLicCountTblTmp.UserLicenseType = sulcTbl.UserLicenseType;
_userLicCountTblTmp.LicensedCount = sulcTbl.LicensedCount;
_userLicCountTblTmp.ActualCount = sulcTbl.ActualCount;
_userLicCountTblTmp.ValidFor = sulcTbl.ValidFrom;
_userLicCountTblTmp.NetworkDomain =sullTbl.NetworkDomain;
_userLicCountTblTmp.NetworkAlias =sullTbl.NetworkAlias;
_userLicCountTblTmp.Username =sullTbl.UserName;
_userLicCountTblTmp.SecurityRole = rTbl.Name;
_userLicCountTblTmp.SecurityRoleLicenseType = userRoleLicense.UserLicenseType;
_userLicCountTblTmp.insert();
} ttscommit;
}
这里用到好几个表,SysUserLicenseCount保存的是四种用户授权类型(枚举UserLicenseType:Enterprise,Functional,Task,Self serve)相应的用户数;SysUserLicenseList保存的是每个用户的授权记录,其SysUserLicenseCount记录的是表SysUserLicenseCount的recId;SecurityUserRole表不在AOT中,查看数据库得知保存的是每个用户对应的Role,如果一个用户被指定了多个Role,每个Role在这表中对应一条记录,列SecurityRole保存的是具体Role的ID;SecurityRole既不在AOT,连SQL数据库中也没有这个表,好在上面的代码中可以推测是AOT中所有Security roles的列表,这里用到的只是Role的名称;SysRoleLicenseType也不在AOT,但是在SQL数据库中,重要的是SecurityRole和UserlicenseType两个字段,前者记录的是每种Role的ID,后者则是这个Role相应的用户授权类型,每个Role只有一种用户授权类型。
因此上面的代码完成的就是构建一个临时表来记录每个用户的名称、网络别名、对应的每个角色、角色对应的用户授权类型、用户授权类型的授权用户数、用户授权类型的当前使用数。需要注意的是角色“System administrator”和“System user”在表SysRoleLicenseType是没有记录的,如果一个用户只有这两种角色,这个用户不会出现在报表中,但是System administrator仍然会占用一个Enterprise授权,仅仅是System user是不会影响到授权数的。
运行报表总是得到空白的结果,仔细查看发现上面的代码中有一行是有问题的(R3 CU8的系统),“&& sullTbl.UserName == surTbl.User”,查看数据库表SecurityUserRole,User一列实际上保存的是用户的网络别名,更改为“&& sullTbl.NetworkAlias == surTbl.User”后运行报表得到结果,类似:

还需要注意必须切换到DAT公司下才会有数据,用到的表SysUserLicenseCount等等是不保存公司信息的,按照我的理解应该不管在哪个公司下都应该得到相同的结果,可实际上只有切换到DAT公司报表才有数据。
接下来的问题相关表中的数据又是哪里来的呢?在部署系统的时候系统会自动为我们创建一个名为“Named user license count reports processing”的批处理任务,由它更新数据到这些表中,默认一周运行一次。这个批处理任务具体执行的是SysUserLicenseMiner类,run方法调用SysUserLicenseMiner::GenerateUserLicenseCountReportInfo(),我们直接调用这个方法也是可以更新授权数数据的。如果你在批处理列表中找不到这个job,可以调用SysUserLicenseMiner::createBatchJob()为你创建一个。而具体是如何更新的呢?答案自然也是在 SysUserLicenseMiner中,这里就不翻代码了,就别的地方看到的总结一下。AOT中打开一个Menu item,有两个属性是和授权相关的,ViewUserLicense和MaintainUserLicense,前者是查看需要的授权,后者是维护数据需要的授权,它们的值都是前面提到的枚举UserLicenseType。SysUserLicenseMiner的工作就是遍历所有Menu item,找出相应的用户授权,接着遍历用户用户角色,找出每个用户角色对应的用户授权类型,最后遍历每个用户,找出用户的最高用户授权类型(Enterprise最高)。所以问题的核心在于菜单项的用户授权类型,如果我们新建一个自己的菜单项会怎样?默认ViewUserLicense和MaintainUserLicense都是NONE,是不影响授权数的,当然你可以闲着没事修改这两个属性成其他数值。我们可以duplicate系统自带的菜单项,然后修改这两个属性为NONE,后面就不细说了。
最后要说的是这个报表的格式,无论我是否选中“show list of users per access license type ”结果都是一样,Report的design也只有上面图中的一个,有知道原因的朋友请告诉我为什么...
[AX2012 R3]关于Named user license report的更多相关文章
- AX2012 R3升级CU8的一些错误
AX2012 R3安装升级包CU8后进入系统,系统会提示打开软件升级清单“Software update checklist”,清单列出了升级要做的一系列动作. 在进行到编译应用时“Compile a ...
- AX2012 R3 Data upgrade checklist sync database step, failed to create a session;
最近在做AX2012 R3 CU9 到CU11的upgrade时 (用的Admin帐号), 在Date upgrade 的 synchronize database 这步 跑了一半,报出错误 说“fa ...
- [AX2012 R3]在SSRS报表中使用QR二维码
AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...
- [AX2012 R3]关于Alerts
AX2012提供两种类型的Alert,Change-based alert和Due-date-based alert,前者用于在对新建记录.删除记录.记录的某个指定字段被改变的时候发出提醒,后者则是用 ...
- Squish License
https://www.froglogic.com/squish/gui-testing/prices-and-licensing/index.php Prices and Licensing Who ...
- Maven Build Life Cycle--reference
What is Build Lifecycle? A Build Lifecycle is a well defined sequence of phases which define the ord ...
- GDAL——命令使用专题——gdalinfo命令
GDAL——命令使用专题——gdalinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用 ...
- GDAL——命令使用专题——ogrinfo命令
GDAL——命令使用专题——ogrinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象 ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(2)
Amazon EC2是Elastic Compute Cloud的简称,翻译成中文就是弹性计算云.它是Amazon云里面最基础的内容,也是发展到今天最成熟的部分,通过EC2, 你可以在Amazon的云 ...
随机推荐
- 如果我用C#来输出99表
题目:参见这个链接,简单点说就是在控制台输出一个99乘方表. 无聊想了个C#版本的解答: private static void Print(int n) { var s = Enumerable.R ...
- 捉BUG记(To Catch a Bug)
大约有一年整没有写一篇博客了,由于各种原(jia)因(ban)导致闲暇时间要么拿着IPad看岛国奇怪的片(dong)子(hua).要么拿着kindle看各种各样的资(xiao)料(shuo).本来想写 ...
- QSS总结以及最近做的Qt项目
什么是QSS QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少, ...
- 关于oralce字符集问题(复制别人的,纯属自己学习)
本文主要讨论以下几个部分: 1.如何查看查询oracle字符集. 2.修改设置字符集以及常见的oracle utf8字符集 3.oracle exp 字符集问题 正文: 一.字符集参数 影响Oracl ...
- 个性二维码开源专题<基础篇>
二维码原理介绍: 二维码为什么是黑白相间的?黑色表示二进制的“1”,白色表示二进制的“0” “我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中.”黄海平说,“制作二维码输 ...
- Web程序的桌面提醒
做web开发常会面对的一个问题是,浏览器最小化的时候如何才能向用户发送通知.解决办法大概有三种:让用户有事没事儿搂两眼页面:开发一个桌面客户端:Html5的Notification API. 目前没看 ...
- iis php5.3.8 默认文档无效 404 - 找不到文件或目录
环境:WIN2008 R2 IIS7.5 / .NET4.X 新开1站点,使用php(5.3.8),默认首页文档已设置为index.php,网站所在目录的网站运行时用户权限正确,应用程序池是asp.n ...
- Atitit.列表页面and条件查询的实现最佳实践(2)------翻页 分页 控件的实现java .net php
)------翻页 分页 控件的实现java .net php 1. 关于翻页有关的几大控件::搜索框控件,显示表格控件,翻页器,数据源控件.. 1 2. 翻页的显示格式:: 1 2.1. 通常ui- ...
- paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结
paip.web数据绑定 下拉框的api设计 选择框 uapi python .net java swing jsf总结 ====总结: 数据绑定下拉框,Uapi 1.最好的是默认绑定..Map(k ...
- paip java.net.SocketException No buffer space available的解决办法及总结
java.net.SocketException No buffer space available的解决办法及总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...