Can I print a list of the Hot Keys created for a User?
Thanks for the help.
Can I print a list of the Hot Keys created for a User?
Thanks for the help.
Is this info stored in a table that I can access?
Hotkeys, as I understand them, are just a personalization layer. I believe there is also a difference between hotkeys for a certain form and hotkeys are are global. But, the data is encoded and stored in the Ice.XXXChunk table with the TypeCode of âGlobalOpionsâ or âPersonalizationâ. I do not know of a way to decode the âChunkâ field:
select *
from Epicor10DEV.Ice.XXXChunk where TypeCode = âGlobalOptionsâ
From the BAQ definition of that field:
XXXChunk : Generic Large Data Chunk Table - used to store large data chunks in the database. Parent Table: XXXDef. Example: XML data that is used for Customization, Personalization, etc. The large data stream is âchunkedâ up into chunks of data which are 30K (Progress limit) or less. Then each âchunkâ is stored as a individual record.
Thanks, I found the table and the line for my Personalization (Hot Key), but I canât get any information from that field just like you said. I will make sure they are tracking their Hot Keys until I can find a way to access that information.
@josecgomez provided a method last year for reverse engineering that data from the XXXChunk table:
Problem is that the Chunk is BZiped and Hex EncodedâŚ
poking around this will turn the âChunkâ data back into a string⌠Youâll need
NetSword.Common.ICSharpCode.SharpZipLib (nuget)private string decompressString(string data) { try { int num; MemoryStream stream = new MemoryStream(Convert.FromBase64String(data)); BZip2InputStream stream2 = new BZip2InputStream(stream); byte[] buffer = new byte[0x3e8]; MemoryStream stream3 = new MemoryStream(); while ((num = stream2.Read(buffer, 0, 0x3e8)) > 0) { stream3.Write(buffer, 0, num); } stream2.Close(); stream.Close(); byte[] bytes = stream3.ToArray(); stream3.Close(); return Encoding.UTF8.GetString(bytes); } catch { return data; } }
So if you want to do this you can BO GenXData
run GetRows where typecode=âCustomizationâ
This will get you all the customizations in the system, then loop through all the XXXChunkRows and run the XXXChuck through that decompression aglorithm. Then use RegEx or another method to see if âCharacterXX, ShortCharXX, NumberXX, appear in the stringâIt will turn this
string myChunk= decompressString(â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â);
Into this
<xs:schema id=âCustomizationDSâ targetNamespace=âhttp://tempuri.org/XMLSchema.xsdâ xmlns:mstns=âhttp://tempuri.org/XMLSchema.xsdâ xmlns=âhttp://tempuri.org/XMLSchema.xsdâ xmlns:xs=âhttp://www.w3.org/2001/XMLSchemaâ xmlns:msdata=âurn:schemas-microsoft-com:xml-msdataâ xmlns:msprop=âurn:schemas-microsoft-com:xml-mspropâ attributeFormDefault=âqualifiedâ elementFormDefault=âqualifiedâ>
<xs:element name=âCustomizationDSâ msdata:IsDataSet=âtrueâ msdata:Locale=ââ msprop:BuildVersion=â9.05.702Aâ>
xs:complexType
<xs:choice minOccurs=â0â maxOccurs=âunboundedâ>
<xs:element name=âControlsâ>
xs:complexType
xs:sequence
<xs:element name=âFormsIDâ type=âxs:stringâ />
<xs:element name=âControlNameâ type=âxs:stringâ />
<xs:element name=âKeyâ type=âxs:stringâ />
<xs:element name=âParentControlKeyâ type=âxs:stringâ />
<xs:element name=âControlTypeâ type=âxs:stringâ />
<xs:element name=âCompanyâ type=âxs:stringâ />
<xs:element name=âPlantâ type=âxs:stringâ />
<xs:element name=âDcdUserIdâ type=âxs:stringâ />
<xs:element name=âGroupIDâ type=âxs:stringâ />
<xs:element name=âControlsIDâ type=âxs:stringâ />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name=âPropertiesâ>
xs:complexType
xs:sequence
<xs:element name=âFormsIDâ type=âxs:stringâ />
<xs:element name=âControlNameâ type=âxs:stringâ />
<xs:element name=âKeyâ type=âxs:stringâ />
<xs:element name=âPropertyNameâ type=âxs:stringâ />
<xs:element name=âPropertyValueâ type=âxs:stringâ />
<xs:element name=âCompanyâ type=âxs:stringâ />
<xs:element name=âPlantâ type=âxs:stringâ />
<xs:element name=âDcdUserIDâ type=âxs:stringâ />
<xs:element name=âGroupIDâ type=âxs:stringâ />
<xs:element name=âPropertiesIDâ type=âxs:stringâ />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
BAQReportForm
epicor.mfg.bo.transferorderentry.dll
EpiString.ExecutionPathepicor.mfg.bo.transferorderentry.dll
AssemblyReference
BAQReportForm
epicor.mfg.if.itransferorderentry.dll
EpiString.ExecutionPathepicor.mfg.if.itransferorderentry.dll
AssemblyReference
BAQReportForm
epicor.mfg.ad.transferorderentry.dll
EpiString.ExecutionPath*epicor.mfg.ad.transferorderentry.dll
AssemblyReference
filterListPanel1
grdFilterList
3c83f81e-470d-4ade-9646-152b68de99f2-1
ChildIndex
0
BAQReportForm
Customization
2dcd1674-5e34-4d98-b493-c75747027376
Script
// **************************************************
// Custom code for BAQReportForm
// Created: 4/9/2015 1:45:56 PM
// **************************************************
using System;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Windows.Forms;
using Epicor.Mfg.Core;
using Epicor.Mfg.UI;
using Epicor.Mfg.UI.Adapters;
using Epicor.Mfg.UI.Customization;
using Epicor.Mfg.UI.ExtendedProps;
using Epicor.Mfg.UI.FormFunctions;
using Epicor.Mfg.UI.FrameWork;
using Epicor.Mfg.UI.Searches;public class Script
{
// ** Wizard Insert Location - Do Not Remove âBegin/End Wizard Added Module Level Variablesâ Comments! **
// Begin Wizard Added Module Level Variables **// End Wizard Added Module Level Variables **
// Add Custom Module Level Variables Here **
public void InitializeCustomCode()
{
// ** Wizard Insert Location - Do not delete âBegin/End Wizard Added Variable Initializationâ lines **
// Begin Wizard Added Variable Initialization// End Wizard Added Variable Initialization // Begin Wizard Added Custom Method Calls // End Wizard Added Custom Method Calls
}
public void DestroyCustomCode()
{
// ** Wizard Insert Location - Do not delete âBegin/End Wizard Added Object Disposalâ lines **
// Begin Wizard Added Object Disposal// End Wizard Added Object Disposal // Begin Custom Code Disposal // End Custom Code Disposal
}
private void BAQReportForm_Load(object sender, EventArgs args)
{
string orderList = BAQReportForm.LaunchFormOptions.ValueIn.ToString();//data view for the order list EpiDataView orderListDV = (EpiDataView)(this.oTrans.EpiDataViews["FilterList1"]); //have to parse the orderList string to get the values if(!orderList.Contains("~")) { //add a row orderListDV.dataView.Table.Rows.Add(); //set the default row value for the dataview orderListDV.Row = 0; //set the value order list value in the table if there's only one orderListDV.dataView.Table.Rows[0]["TFOrdNum"] = orderList; } //if there are multiple order numbers in the order list else if(orderList.Contains("~")) { //put the order numbers into a string array string[] orderNums = orderList.Split('~'); //loop through the string array and set each value on the grid for(int i = 0; i < orderNums.Length; i++) { //add a row orderListDV.dataView.Table.Rows.Add(); //set the default row value for the dataview orderListDV.Row = i; //set the order number value orderListDV.dataView.Table.Rows[i]["TFOrdNum"] = orderNums[i]; } }
}
}
BAQReportForm
Customization
2dcd1674-5e34-4d98-b493-c75747027376
Language
CSharp