Now disabling one language at a time manually might not be your cup of tea, so I would like to share a small job that disables all languages except the ones you want to keep enabled. Just create a new job and paste in the code below. Use at own risk of course, take backups and backups of the backups etc (you know the drill).
// Remove licence codes for unwanted languages static void AdLanguageRemover(Args _args) { SysConfig sysConfig; SysRemoveLicense remLic; Query query; QueryBuildDataSource qbd; QueryBuildRange qbr; QueryRun queryRun; FormRun confirmForm; Set languagesToKeep = new Set(Types::String); Set licenseCodeSet = new Set(Types::Integer); SetEnumerator it; int confCount = 0; boolean licenseChanged = false; Args args = new Args(formStr(SysLicenseCompareForm)); boolean proceed = false; SysLicenseCodeDescription codeDescription; str currentLanguageId; int pos, sysConfigId; // List of languages to keep. Add, remove, change to fit your preference languagesToKeep.add('nb-no'); languagesToKeep.add('en-us'); languagesToKeep.add('sv'); languagesToKeep.add('nl'); languagesToKeep.add('fr'); languagesToKeep.add('da'); languagesToKeep.add('de'); query = new Query(); qbd = query.addDataSource(tableNum(sysConfig)); qbr = qbd.addRange(fieldNum(SysConfig,ConfigType)); qbr.value(enum2Value(ConfigType::AccessCodes)); qbr = qbd.addRange(fieldNum(SysConfig,Id)); qbr.value(SysLicenseCodeReadFile::rangeLanguage()); queryRun = new QueryRun(query); delete_from remLic; while (queryRun.next()) { if (queryRun.changed(tableNum(sysConfig))) { sysConfig = queryRun.get(tableNum(sysConfig)); } codeDescription = SysLicenseCodeReadFile::codeDescription(sysConfig.Id); pos = strFind(codeDescription,'(',strLen(codeDescription),-strLen(codeDescription)); currentLanguageId = subStr(codeDescription,pos+1,strLen(codeDescription)-pos-1); if (!languagesToKeep.in(currentLanguageId)) { warning(strFmt('Removing language %1',SysLicenseCodeReadFile::codeDescription(sysConfig.Id))); licenseCodeSet.add(sysConfig.Id); remLic.clear(); remLic.LicenseCode = sysConfig.Id; remLic.Description = SysLicenseCodeReadFile::codeDescription(sysConfig.Id); remLic.insert(); } else { info(strFmt('Keeping language %1',SysLicenseCodeReadFile::codeDescription(sysConfig.Id))); } } if (licenseCodeSet.elements()) { // if not valid code, then we should display the warning confCount = SysLicenseCodeReadFile::findConfigKeysFromLicenseCodeSet(licenseCodeSet); confirmForm = classfactory.formRunClass(args); confirmForm.init(); confirmForm.run(); confirmForm.wait(); if (confirmForm.closedOk()) { it = licenseCodeSet.getEnumerator(); while (it.moveNext()) { sysConfigId = it.current(); update_recordSet sysConfig setting value = '' where sysConfig.id == sysConfigId; } SysLicenseCodeReadFile::codesModified(); } } }
Allow for a synchronization to run through after the licenses are modified. Remember that this may impact the database schema, but if you really do not want the (ie.) Norwegian language to be enabled, it should be safe to disable. Thanks for reading!
No comments:
Post a Comment