@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
111 lines • 10.2 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger"));
const fs = __importStar(require("fs-extra"));
const QueryHelper_1 = __importDefault(require("../../queryHelper/QueryHelper"));
const CustomFieldFetcher_1 = __importDefault(require("../../metadata/CustomFieldFetcher"));
const SFPOrg_1 = __importDefault(require("../../org/SFPOrg"));
const path_1 = __importDefault(require("path"));
const OrgDetailsFetcher_1 = __importDefault(require("../../org/OrgDetailsFetcher"));
const TestOptions_1 = require("../../apextest/TestOptions");
const MetadataDeploymentCustomizer_1 = require("./MetadataDeploymentCustomizer");
const QUERY_BODY = 'SELECT QualifiedApiName, EntityDefinition.QualifiedApiName FROM FieldDefinition WHERE IsFieldHistoryTracked = true AND EntityDefinitionId IN ';
class FHTEnabler extends MetadataDeploymentCustomizer_1.MetdataDeploymentCustomizer {
async isEnabled(sfpPackage, conn, _logger) {
//ignore if its a scratch org
const orgDetails = await new OrgDetailsFetcher_1.default(conn.getUsername()).getOrgDetails();
if (orgDetails.isScratchOrg)
return false;
if (sfpPackage['isFHTFieldFound'] &&
(sfpPackage.packageDescriptor.enableFHT == undefined || sfpPackage.packageDescriptor.enableFHT == true)) {
return true;
}
}
async getDeploymentOptions(target_org, waitTime, apiVersion) {
return {
ignoreWarnings: true,
waitTime: waitTime,
apiVersion: apiVersion,
testLevel: TestOptions_1.TestLevel.RunSpecifiedTests,
specifiedTests: 'skip',
rollBackOnError: true
};
}
async gatherComponentsToBeDeployed(sfpPackage, componentSet, conn, logger) {
//First retrieve all objects/fields of interest from the package
let objList = [];
let fieldList = [];
Object.keys(sfpPackage['fhtFields']).forEach((key) => {
objList.push(`'${key}'`);
sfpPackage['fhtFields'][key].forEach((field) => fieldList.push(key + '.' + field));
});
//Now query all the fields for this object where FHT is already enabled
sfp_logger_1.default.log(`Gathering fields which are already enabled with trackHistory on target org....`, sfp_logger_1.LoggerLevel.INFO, logger);
sfp_logger_1.default.log('FHT QUERY: ' + `${QUERY_BODY + '(' + objList + ')'}`, sfp_logger_1.LoggerLevel.DEBUG);
let fhtFieldsInOrg = await QueryHelper_1.default.query(QUERY_BODY + '(' + objList + ')', conn, true);
//Clear of the fields that alread has FHT applied and keep a reduced filter
fhtFieldsInOrg.map((record) => {
let field = record.EntityDefinition.QualifiedApiName + '.' + record.QualifiedApiName;
const index = fieldList.indexOf(field);
if (index > -1) {
fieldList.splice(index, 1);
}
});
if (fieldList.length > 0) {
//Now retrieve the fields from the org
let customFieldFetcher = new CustomFieldFetcher_1.default(logger);
let sfpOrg = await SFPOrg_1.default.create({ connection: conn });
let fetchedCustomFields = await customFieldFetcher.getCustomFields(sfpOrg, fieldList);
//Modify the component set
//Parsing is risky due to various encoding, so do an inplace replacement
let sourceComponents = fetchedCustomFields.components.getSourceComponents().toArray();
for (const sourceComponent of sourceComponents) {
// for each object
for (const childComponent of sourceComponent.getChildren()) {
// for each child metadata
if (childComponent.type.name !== 'CustomField') {
// skip if not a custom field
continue;
}
let metadataOfComponent = fs.readFileSync(childComponent.xml).toString();
metadataOfComponent = metadataOfComponent.replace('<trackHistory>false</trackHistory>', '<trackHistory>true</trackHistory>');
fs.writeFileSync(path_1.default.join(childComponent.xml), metadataOfComponent);
}
}
return { location: fetchedCustomFields.location, componentSet: fetchedCustomFields.components };
}
else
sfp_logger_1.default.log(`No fields are required to be updated, skipping update of Field History Tracking`, sfp_logger_1.LoggerLevel.INFO, logger);
}
getName() {
return 'Field History Tracking Enabler';
}
}
exports.default = FHTEnabler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRkhURW5hYmxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3BhY2thZ2UvZGVwbG95bWVudEN1c3RvbWl6ZXJzL0ZIVEVuYWJsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1FQUFzRTtBQUV0RSw2Q0FBK0I7QUFDL0IsZ0ZBQXdEO0FBR3hELDJGQUFtRTtBQUNuRSw4REFBc0M7QUFDdEMsZ0RBQXdCO0FBQ3hCLG9GQUE0RDtBQUU1RCw0REFBdUQ7QUFDdkQsaUZBQTZFO0FBSTdFLE1BQU0sVUFBVSxHQUNaLGdKQUFnSixDQUFDO0FBRXJKLE1BQXFCLFVBQVcsU0FBUSwwREFBMkI7SUFFeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFzQixFQUFFLElBQXdCLEVBQUUsT0FBZTtRQUNwRiw2QkFBNkI7UUFDN0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLDJCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ25GLElBQUksVUFBVSxDQUFDLFlBQVk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUxQyxJQUNJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM3QixDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEVBQ3pHLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUlNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsVUFBa0I7UUFFdkYsT0FBTztZQUNILGNBQWMsRUFBQyxJQUFJO1lBQ25CLFFBQVEsRUFBQyxRQUFRO1lBQ2pCLFVBQVUsRUFBQyxVQUFVO1lBQ3JCLFNBQVMsRUFBRyx1QkFBUyxDQUFDLGlCQUFp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