Hello all,
I am trying to save detail filters after crossing between sections. For example
I have set the details filters => the records have been filteres. After that I entered into the other section and returned back. There aren't any filters.
What I have done:
For example, if we will do such actions on section,everything will be ok and filters will be saved. So I have write setFilters and saveFilters methods. I built upon these methods from section. In SysProfileData I have saved the KEY = AccountPageV2Schema11DetailFilters ( getFiltersKey method)
getFiltersKey: function() {
var cardName = this.values.CardPageName;
var schemaName = this.name;
return cardName + schemaName + "Filters";
}
But unfortunately, it doesn't work. How can I solve this problem ? Maybe I build incorrect template([PageName][SchemaDetail]Filters)? Thanks a lot!
Full code:
define("BaseGridDetailV2", ["BaseGridDetailV2Resources", "ConfigurationEnums", "RightUtilities",
"ProcessModuleUtilities", "GridUtilitiesV2", "WizardUtilities", "QuickFilterModuleV2", "ProcessEntryPointUtilities"
], function(resources, enums, RightUtilities) {
return {
messages: {},
mixins: {},
attributes: {
// "ProfileFilters": {
// dataValueType: Terrasoft.DataValueType.CUSTOM_OBJECT
// }
},
methods: {
// filterCurrentSection: function(args) {
// if (args.schemaName !== "" && args.schemaName !== this.entitySchema.name) {
// return false;
// }
// var column = {
// value: this.entitySchema.primaryDisplayColumn.name,
// displayValue: this.entitySchema.primaryDisplayColumn.caption,
// dataValueType: this.entitySchema.primaryDisplayColumn.dataValueType
// };
// var filters = [{
// value: args.value,
// column: column
// }];
// var quickFilterModuleId = this.getQuickFilterModuleId();
// this.sandbox.publish("SetCustomFilters", filters, [quickFilterModuleId]);
// return true;
// },
subscribeSandboxEvents: function() {
this.callParent(arguments);
var editPages = this.getEditPages();
editPages.each(function(editPage) {
var typeColumnValue = editPage.get("Tag");
var cardModuleId = this.getEditPageSandboxId(editPage);
this.sandbox.subscribe("getCardInfo", function() {
var detailInfo = this.getDetailInfo();
var cardInfo = {
valuePairs: detailInfo.defaultValues || []
};
var typeColumnName = this.get("TypeColumnName");
if (typeColumnName && typeColumnValue) {
cardInfo.typeColumnName = typeColumnName;
cardInfo.typeUId = typeColumnValue;
}
return cardInfo;
}, this, [cardModuleId]);
}, this);
this.sandbox.subscribe("CardSaved", this.onCardSaved, this, [this.sandbox.id]);
//
// this.initGetFiltersMessage();
// var quickFilterModuleId = this.getQuickFilterModuleId();
// this.sandbox.subscribe("CustomFilterExtendedMode", this.showCustomFilterExtendedMode, this,
// [quickFilterModuleId, folderManagerModuleId]);
//
this.subscribeGetModuleSchema();
this.subscribeFiltersChanged();
this.subscribeGetShortFilterFieldsVisible();
this.sandbox.subscribe("GetRecordInfo", this.getRecordInfo, this,
[this.getRecordRightsSetupModuleId()]);
this.sandbox.subscribe("GetExtendedFilterConfig", this.getExtendedFilterConfig, this,
[this.getQuickFilterModuleId()]);
},init: function(callback, scope) {
this.callParent([function() {
this.mixins.WizardUtilities.canUseWizard(function(result) {
this.set("IsDetailWizardAvailable", result);
callback.call(scope);
}, this);
}, this]);
this.registerMessages();
this.initDetailFilterCollection(); // return this.set("DetailFilters", this.Ext.create("Terrasoft.FilterGroup"));
this.initFilterVisibility();
this.isFilterAdded();
var sandboxId = this.getQuickFilterModuleId();
this.sandbox.subscribe("InitFilterFromStorage", function() {
this.sandbox.publish("LoadedFiltersFromStorage", null, [sandboxId]);
}, this, [sandboxId]);
},
initFilterVisibility: function() {
this.set("IsDetailFilterVisible", true);
this.set("IsFilterAdded", true);
},
setFilter: function(key, value, filtersValue) {
var filters = this.get("DetailFilters");
if (key) {
if (filters.find(key)) {
filters.remove(filters.get(key));
}
filters.add(key, value);
//
this.saveFilter(key, filtersValue, value);
//
} else if (value) {
value.each(function(filter) {
this.setFilter(filter.key, filter);
}, this);
}
},
saveFilter: function(filterKey, filterValue, filter) {
if (!filterValue) {
return;
}
var sessionFilters = this.getSessionFilters();
var profileFilters = this.getProfileFilters();
var serializableFilter = this.getSerializableFilter(filter);
switch (filterKey) {
case "CustomFilters":
Terrasoft.each(filterValue, function(item) {
var f = item.filter = item.value || "";
var isSerializedFilter = (typeof f === "string" && f.indexOf("[") >= 0 && f.indexOf("]") >= 0 &&
f.indexOf("{") >= 0 && f.indexOf("}") >= 0);
if (!isSerializedFilter) {
item.filter = Terrasoft.encode(serializableFilter);
}
});
if (this.isNotEmpty(filterValue)) {
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
} else {
delete sessionFilters.CustomFilters;
delete profileFilters.CustomFilters;
}
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
// sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
// Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
// this.set("ProfileFilters", profileFilters);
break;
case "FolderFilters":
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "FixedFilters":
filterValue.filter = Terrasoft.encode(serializableFilter);
profileFilters[filterKey] = {Fixed: filterValue};
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "TagFilters":
serializableFilter.tags = filterValue;
profileFilters[filterKey] = [serializableFilter];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
default:
sessionFilters[filterKey] = profileFilters[filterKey] = [
{
filter: filter.serialize()
}
];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
}
},
getSessionFilters: function() {
var storage = Terrasoft.configuration.Storage.Filters = Terrasoft.configuration.Storage.Filters || {};
var sessionFilters = storage[this.name] = storage[this.name] || {};
return sessionFilters;
},
getProfileFilters: function() {
return this.get("ProfileFilters") || {};
},
getSerializableFilter: function(filter) {
filter.serializationInfo = {serializeFilterManagerInfo: true};
var serializableFilter = {};
filter.getSerializableObject(serializableFilter, filter.serializationInfo);
return serializableFilter;
},
getFiltersKey: function() {
var cardName = this.values.CardPageName;
var schemaName = this.name;
//return cardName + schemaName + "Filters";
return schemaName + "Filters";
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
});
Like
HI,
There is no built-in functionality for saving detail filters. Visit BaseGridDetailV2 schema and explore its functionality. As a workaround you can save your filters to cache and use load them from there when open the detail again
Peter Vdovukhin writes:
HI,
There is no built-in functionality for saving detail filters. Visit BaseGridDetailV2 schema and explore its functionality. As a workaround you can save your filters to cache and use load them from there when open the detail again
Thanks, I have already done it => these methods are in my replaced BaseGridDetailV2. About cache... so is saving data in SysProfileData senselessly? To tell the truth, I Understand the main idea,but i don't know the alternative way to solve this problem. So as I Understand SysProfileData is senselessly and i should to find other way?
Somehow didn't see full code in your question. Your case is not about saving filter and setting right [key] for SysProfileData. It is about automatic loading your filters from the profile. In BaseSectionV2 you have loadProfileFilters() function that loads filters by key from storage, but you don't have a similar function in BaseGridDetail. If you want such functionality you should write it.
Peter Vdovukhin writes:
Somehow didn't see full code in your question. Your case is not about saving filter and setting right [key] for SysProfileData. It is about automatic loading your filters from the profile. In BaseSectionV2 you have loadProfileFilters() function that loads filters by key from storage, but you don't have a similar function in BaseGridDetail. If you want such functionality you should write it.
Excuse me,I have been written logic from Section on my BaseGridDetailV2 module; Here is a code
define("BaseGridDetailV2", ["BaseGridDetailV2Resources", "ConfigurationEnums", "RightUtilities","TagConstantsV2",
"ProcessModuleUtilities", "GridUtilitiesV2", "WizardUtilities", "QuickFilterModuleV2", "ProcessEntryPointUtilities"
], function(resources, enums, RightUtilities, TagConstantsV2) {
return {
messages: {},
mixins: {},
attributes: {
"ProfileFilters": {
dataValueType: Terrasoft.DataValueType.CUSTOM_OBJECT
},
"IsDetailFiltersLoaded": {
dataValueType: Terrasoft.DataValueType.BOOLEAN,
value: false
},
"DetailFilters": {
dataValueType: Terrasoft.DataValueType.COLLECTION
}
},
methods: {
subscribeSandboxEvents: function() {
this.callParent(arguments);
var editPages = this.getEditPages();
editPages.each(function(editPage) {
var typeColumnValue = editPage.get("Tag");
var cardModuleId = this.getEditPageSandboxId(editPage);
this.sandbox.subscribe("getCardInfo", function() {
var detailInfo = this.getDetailInfo();
var cardInfo = {
valuePairs: detailInfo.defaultValues || []
};
var typeColumnName = this.get("TypeColumnName");
if (typeColumnName && typeColumnValue) {
cardInfo.typeColumnName = typeColumnName;
cardInfo.typeUId = typeColumnValue;
}
return cardInfo;
}, this, [cardModuleId]);
}, this);
this.sandbox.subscribe("CardSaved", this.onCardSaved, this, [this.sandbox.id]);
this.subscribeGetModuleSchema();
this.subscribeFiltersChanged();
this.subscribeGetShortFilterFieldsVisible();
this.sandbox.subscribe("GetRecordInfo", this.getRecordInfo, this,
[this.getRecordRightsSetupModuleId()]);
this.sandbox.subscribe("GetExtendedFilterConfig", this.getExtendedFilterConfig, this,
[this.getQuickFilterModuleId()]);
},
init: function(callback, scope) {
this.callParent([function() {
this.mixins.WizardUtilities.canUseWizard(function(result) {
this.set("IsDetailWizardAvailable", result);
callback.call(scope);
}, this);
}, this]);
this.registerMessages();
this.initDetailFilterCollection();
//
//this.initDetailFiltersCollection();
this.loadProfileFilters();
//
this.initFilterVisibility();
this.isFilterAdded();
var sandboxId = this.getQuickFilterModuleId();
this.sandbox.subscribe("InitFilterFromStorage", function() {
this.sandbox.publish("LoadedFiltersFromStorage", null, [sandboxId]);
}, this, [sandboxId]);
},
loadProfileFilters: function(callback, scope) {
var isDetailFiltersLoaded = this.get("IsDetailFiltersLoaded");
if (isDetailFiltersLoaded) {
Ext.callback(callback, scope);
return;
}
var profileKey = Ext.String.format("profile!{0}", this.getFiltersKey());
Terrasoft.require([profileKey], function(profile) {
this.onLoadProfileFilters(callback, scope, profile);
}, this);
},
onLoadProfileFilters: function(callback, scope, profile) {
this.loadFiltersContainersVisibility(profile);
this.initFilterAttributes(profile);
this.set("IsDetailFiltersLoaded", true);
Ext.callback(callback, scope);
},
loadFiltersContainersVisibility: function(profile) {
if (profile) {
if (Ext.isDefined(profile.isFoldersContainerExpanded)) {
this.set("IsFoldersVisible", profile.isFoldersContainerExpanded);
}
if (Ext.isDefined(profile.isExtendedFiltersContainerExpanded)) {
this.set("IsExtendedFiltersVisible", profile.isExtendedFiltersContainerExpanded);
}
}
},
initFilterAttributes: function(profile) {
var sessionFilters = this.getSessionFilters();
this.set("SessionFilters", sessionFilters);
var profileFilters = Terrasoft.deepClone(profile);
var fixedSessionFilters = this._getFixedSessionFilters();
Terrasoft.each(profileFilters, this.applyFilters, this);
Terrasoft.each(fixedSessionFilters, this.applyFilters, this);
this.set("ProfileFilters", profileFilters);
},
_getFixedSessionFilters: function() {
var sessionFilters = this.getSessionFilters();
var primaryDisplayColumn = this.entitySchema.primaryDisplayColumn;
var customFilters = sessionFilters.CustomFilters;
var customFiltersPrimaryDisplayColumn = customFilters && customFilters.primaryDisplayColumn;
if (customFiltersPrimaryDisplayColumn && primaryDisplayColumn) {
var sessionFiltersFixed = {};
sessionFiltersFixed.CustomFilters = {};
sessionFiltersFixed.CustomFilters[primaryDisplayColumn.name] = customFilters;
sessionFilters = sessionFiltersFixed;
}
return sessionFilters;
},
applyFilters: function(filterValue, key) {
if (key.match(/filters/i) && !this.isNotEmpty(filterValue)) {
return;
}
var detailFiltersValue = this.get("DetailFiltersValue");
if (!Ext.isString(filterValue)) {
detailFiltersValue.removeByKey(key);
this._chooseFilterProccesing(filterValue, key);
}
if (key !== "FixedFilters") {
detailFiltersValue.add(key, filterValue);
}
},
initDetailFiltersCollection : function(){
this.set("ProfileFilters", {});
this.set("DetailFilters", this.Ext.create("Terrasoft.FilterGroup"));
this.set("DetailFiltersValue", this.Ext.create("Terrasoft.Collection"));
},
_chooseFilterProccesing: function(filterValue, key) {
var detailFilters = this.get("DetailFilters");
Terrasoft.each(filterValue, function(item, propName) {
if (item.key === TagConstantsV2.TagFilterKey || key === TagConstantsV2.TagFilterKey) {
this.applyTagFilter(key, item);
}
if (propName === "Fixed") {
this._applyFixedFilter(key, item);
}
if (item.filter) {
var filter = Terrasoft.deserialize(item.filter);
if (!detailFilters.contains(key)) {
detailFilters.add(key, filter);
}
} else if (item.primaryDisplayColumn) {
this.applyPrimaryColumnFilter(key, item);
} else if (item.folderInfo || item.folderType) {
this.applyFolderFilter(key, item);
}
}, this);
},
//
initFilterFromStorage: function() {
this.loadProfileFilters(function() {
this.sandbox.publish("LoadedFiltersFromStorage", null, this.getFilterModulesIds());
}, this);
},
initFilterVisibility: function() {
this.set("IsDetailFilterVisible", true);
this.set("IsFilterAdded", true);
},
setFilter: function(key, value, filtersValue) {
var filters = this.get("DetailFilters");
if (key) {
if (filters.find(key)) {
filters.remove(filters.get(key));
}
filters.add(key, value);
//
this.saveFilter(key, filtersValue, value);
//
} else if (value) {
value.each(function(filter) {
this.setFilter(filter.key, filter);
}, this);
}
},
saveFilter: function(filterKey, filterValue, filter) {
if (!filterValue) {
return;
}
var sessionFilters = this.getSessionFilters();
var profileFilters = this.getProfileFilters();
var serializableFilter = this.getSerializableFilter(filter);
switch (filterKey) {
case "CustomFilters":
Terrasoft.each(filterValue, function(item) {
var f = item.filter = item.value || "";
var isSerializedFilter = (typeof f === "string" && f.indexOf("[") >= 0 && f.indexOf("]") >= 0 &&
f.indexOf("{") >= 0 && f.indexOf("}") >= 0);
if (!isSerializedFilter) {
item.filter = Terrasoft.encode(serializableFilter);
}
});
if (this.isNotEmpty(filterValue)) {
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
} else {
delete sessionFilters.CustomFilters;
delete profileFilters.CustomFilters;
}
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "FolderFilters":
sessionFilters[filterKey] = profileFilters[filterKey] = filterValue;
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "FixedFilters":
filterValue.filter = Terrasoft.encode(serializableFilter);
profileFilters[filterKey] = {Fixed: filterValue};
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
case "TagFilters":
serializableFilter.tags = filterValue;
profileFilters[filterKey] = [serializableFilter];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
this.set("ProfileFilters", profileFilters);
break;
default:
sessionFilters[filterKey] = profileFilters[filterKey] = [
{
filter: filter.serialize()
}
];
Terrasoft.saveUserProfile(this.getFiltersKey(), profileFilters, false);
}
},
getSessionFilters: function() {
var storage = Terrasoft.configuration.Storage.Filters = Terrasoft.configuration.Storage.Filters || {};
var sessionFilters = storage[this.name] = storage[this.name] || {};
return sessionFilters;
},
getProfileFilters: function() {
return this.get("ProfileFilters") || {};
},
getSerializableFilter: function(filter) {
filter.serializationInfo = {serializeFilterManagerInfo: true};
var serializableFilter = {};
filter.getSerializableObject(serializableFilter, filter.serializationInfo);
return serializableFilter;
},
getFiltersKey: function() {
var cardName = this.values.CardPageName;
var schemaName = this.name;
return cardName + schemaName + "Filters";
}
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
};
});
But Terrasoft.configuration.Storage.Filters has got on my detail object - it is empty and there are not any properties with filters. How can I fill it in Storage?
Hi, Nikita.
Check loadProfileFilters function. Compare calling it from a section to calling from a detail. Especially check what profile is used and how it is stored in a database