How do I filter out menu listings of modules we don’t own? The menu table shows everything, yet the menu we see in the Kinetic homepage only shows the modules we own. The Enabled, DoNotDisplayInMenu, Status, or CompanyVisibilty fields don’t help.
I don’t see any tables that show what we have licensed, or know how to tie into EAC…
Any suggestions?
I supposed I can manually exclude modules as I find them (like AEP for Estimation Management that we don’t own).
I’m also extremely interested in figuring out how to do this!
Where I’ve ended up from previous efforts: There are references in the database and REST to licenses and menus. There isn’t any data about software services.
Licenses are keyed to services. Services are keyed to kinetic applications. Kinetic applications are keyed to menus. Menus and kinetic applications are just abstraction layers all the way down to the services information void.
What we need is a way to connect the dots between licenses ↔ services ↔ kinetic applications. I bothered support about that, but they didn’t understand the question and killed the case. I remain stumped.
One thought that comes to mind is tracing how Menu Maintenance pulls this information back, as it builds out a full licensed-only menu structure rather quickly.
Menu.GetRows, allows you to pull valid menus… For example PackingSlip Print which exists on PRSR0001 (Packing Slip Print) and SSMN3050 (Mass Print Packing slips), with the latter being tied to the Demand Management licence. If you don’t have Demand management it will return just one row. Not sure if that answers your question or not.
The trouble is that licensing isn’t related to menus. If you don’t have the demand management license, menu ID SSMN3050 would still be navigable if its program or application was mapped to something else. The Mass Print Packing Slips service is locked out by licensing. The menu has to ask the service it’s mapped to, to find out if you’re allowed to go there or not.
Maybe the Mass Print Packing Slips menu item is configured incorrectly… Because the menu item clearly is from a different module. However the value in the program and the URL field is identical to that in for the standard packing slip print which is PRSR0001… If you do a sneaky (with on prem) and you add the customised layer to SSMN3050 the layer works loads successfully even though you are not licenced. Clearly not something a cloud person can do.
Anyway ended up taking the approach from the 2025.2 thread and created an override on the printpackingslip event and explicitly called the layer… Which I think is unmaintainable going forward.
I created a BAQ to show me who was opening the classic screens… Then, to help with the Kinetic dashboard conversions, I filtered out the Epicor menu links (so it’ll just show our dashboards). Used Excel to do the bulk of the exclude expression.
Here it is, if anyone can use it and save some time:
select
[SysActivity].[Company] as [SysActivity_Company],
[SysActivity].[Key1] as [SysActivity_Key1],
[SysActivity].[Description] as [SysActivity_Description],
[SysActivity].[Key2] as [SysActivity_Key2],
[SysActivity].[ActivityCount] as [SysActivity_ActivityCount],
[SysActivity].[CreatedOn] as [SysActivity_CreatedOn],
[SysActivityDetail].[UserID] as [SysActivityDetail_UserID],
[SysActivity].[Key9] as [SysActivity_Key9],
[UserComp].[Name] as [UserComp_Name],
[UserComp].[EmpID] as [UserComp_EmpID],
[EmpBasic].[JCDept] as [EmpBasic_JCDept],
[EmpBasic-Supv].[Name] as [EmpBasic-Supv_Name],
[EmpBasic].[ResourceGrpID] as [EmpBasic_ResourceGrpID],
[EmpBasic].[ResourceID] as [EmpBasic_ResourceID]
from Ice.SysActivity as [SysActivity]
inner join Ice.SysActivityDetail as [SysActivityDetail] on
SysActivity.ActivitySeq = SysActivityDetail.ActivitySeq
left outer join Erp.UserComp as [UserComp] on
SysActivityDetail.Company = UserComp.Company
and SysActivityDetail.UserID = UserComp.DcdUserID
left outer join Erp.EmpBasic as [EmpBasic] on
UserComp.Company = EmpBasic.Company
and UserComp.EmpID = EmpBasic.EmpID
left outer join Erp.EmpBasic as [EmpBasic-Supv] on
EmpBasic.Company = EmpBasic-Supv.Company
and EmpBasic.SupervisorID = EmpBasic-Supv.EmpID
where (SysActivity.ActivityType = 2
and not SysActivity.Key1 LIKE 'AMMN%'
OR SysActivity.Key1 LIKE 'APGO%'
OR SysActivity.Key1 LIKE 'ARGL%'
OR SysActivity.Key1 LIKE 'ARGO%'
OR SysActivity.Key1 LIKE 'ARMT%'
OR SysActivity.Key1 LIKE 'ARRP%'
OR SysActivity.Key1 LIKE 'BMGO%'
OR SysActivity.Key1 LIKE 'CRGO%'
OR SysActivity.Key1 LIKE 'CRMG%'
OR SysActivity.Key1 LIKE 'CRMN%'
OR SysActivity.Key1 LIKE 'CRMT%'
OR SysActivity.Key1 LIKE 'DEGO%'
OR SysActivity.Key1 LIKE 'EQMT%'
OR SysActivity.Key1 LIKE 'ESGO%'
OR SysActivity.Key1 LIKE 'GLGO%'
OR SysActivity.Key1 LIKE 'ESRP%'
OR SysActivity.Key1 LIKE 'HHMN%'
OR SysActivity.Key1 LIKE 'IMGO%'
OR SysActivity.Key1 LIKE 'IMMT%'
OR SysActivity.Key1 LIKE 'IMRP%'
OR SysActivity.Key1 LIKE 'JCGO%'
OR SysActivity.Key1 LIKE 'JCMN%'
OR SysActivity.Key1 LIKE 'JCRP%'
OR SysActivity.Key1 LIKE 'MRGO%'
OR SysActivity.Key1 LIKE 'MRMT%'
OR SysActivity.Key1 LIKE 'OMGO%'
OR SysActivity.Key1 LIKE 'OMMT%'
OR SysActivity.Key1 LIKE 'OMRP%'
OR SysActivity.Key1 LIKE 'PCMN%'
OR SysActivity.Key1 LIKE 'PMGO%'
OR SysActivity.Key1 LIKE 'PMMT%'
OR SysActivity.Key1 LIKE 'PR00%'
OR SysActivity.Key1 LIKE 'QAGO%'
OR SysActivity.Key1 LIKE 'QARP%'
OR SysActivity.Key1 LIKE 'RQGO%'
OR SysActivity.Key1 LIKE 'SEGO%'
OR SysActivity.Key1 LIKE 'SEMN%'
OR SysActivity.Key1 LIKE 'SRGO%'
OR SysActivity.Key1 LIKE 'SRRP%'
OR SysActivity.Key1 LIKE 'SUMN%'
OR SysActivity.Key1 LIKE 'SUMT%'
OR SysActivity.Key1 LIKE 'SVGO%'
OR SysActivity.Key1 LIKE 'SVTK%'
OR SysActivity.Key1 LIKE 'XAMN%'
OR SysActivity.Key1 LIKE 'XAPR%'
OR SysActivity.Key1 LIKE 'XAMe%'
OR SysActivity.Key1 LIKE 'XAGO%'
OR SysActivity.Key1 LIKE 'XABA%'
OR SysActivity.Key1 LIKE 'BPMN%'
OR SysActivity.Key1 LIKE 'HDMN%'
OR SysActivity.Key1 LIKE 'GLMT%'
OR SysActivity.Key1 LIKE 'HDGO%'
OR SysActivity.Key1 LIKE 'HDMN%'
OR SysActivity.Key1 LIKE 'JCMT%'
OR SysActivity.Key1 LIKE 'OTOC%'
OR SysActivity.Key1 LIKE 'PMPR%'
OR SysActivity.Key1 LIKE 'PRAR%'
OR SysActivity.Key1 LIKE 'PRSR%'
OR SysActivity.Key1 LIKE 'PROM%'
OR SysActivity.Key1 LIKE 'PSMN%'
OR SysActivity.Key1 LIKE 'SRPR%'
OR SysActivity.Key1 LIKE 'SUUT%'
OR SysActivity.Key1 LIKE 'UD100000'
and SysActivity.Key2 = 'Classic')
group by
[SysActivity].[Company],
[SysActivity].[Key1],
[SysActivity].[Description],
[SysActivity].[Key2],
[SysActivity].[ActivityCount],
[SysActivity].[CreatedOn],
[SysActivityDetail].[UserID],
[SysActivity].[Key9],
[UserComp].[Name],
[UserComp].[EmpID],
[EmpBasic].[JCDept],
[EmpBasic-Supv].[Name],
[EmpBasic].[ResourceGrpID],
[EmpBasic].[ResourceID]
order by SysActivity.Key1, SysActivity.CreatedOn, EmpBasic-Supv.Name, SysActivityDetail.UserID