Implement a “Maximum number of daily periodical editions” integer system setting, set its value to 5 (five).
Any one guide me how i can implement it by business rules or business process ? any other method ???
Perform verification whenever a user adds or modifies a daily periodical edition. If the total number of active daily editions exceeds the system setting value (see item 5), saving a record should not be permitted. Instead, bpm’online should display a message informing that the production capacity is limited and no more than “N” daily editions can be active at a time, where “N” is the system setting value.
Implementation method: handlers in the JavaScript code of the edit page with applying the client ESQ and validation mechanism
Like
Hello Muhammad!
The way how to achieve this: create your own object where you will store information about editions of objects for each user. After that, you should create replacing client module where implement methods that will get info about editions of object from the database via esq and compare it with system setting "Maximum number of daily periodical editions".
Please note, that system setting will be the same for every user.
Best regards,
Alex
Alex_Tim,
Thanks Alex I have created Object where I can add or edit the records in Periodical Edition and also created system settings " Maximum number of daily periodical editions " default value is 5 . but replacing client module is not clear me can u elaborate it ?
Thanks
Muhammad Attique,
Hello,
You should create replacing client module exactly for the page that you want not to be accessible for editing regarding to the system setting. The idea is to compare system setting when page opens in "onEntityInitialized" method. Then you may made controls read-only or just prohibit saving of the record.
Queries to system setting:
https://community.bpmonline.com/questions/system-settings-query-issue
Hide controls:
https://community.bpmonline.com/questions/hide-section-button-edit-page
ESQ:
https://academy.bpmonline.com/documents/technic-sdk/7-13/use-entitysche…
Create two attributes to store results from the ESQ Queries to be called outside their scope. Below code explains this
attributes: { "MaxPeriodicalEditions": { "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "dataValueType": Terrasoft.DataValueType.INTEGER, "value": "0" }, "ReturnedRecords": { "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "dataValueType": Terrasoft.DataValueType.INTEGER, "value": "0" }, }, ......... methods: { //Calling the Validation Method on Active Field in Periodical Editions Section Records setValidationConfig: function() { this.callParent(arguments); this.addColumnValidator("UsrActive", this.ActiveEditionsValidator); }, /*Validation Program whenever a user adds or modifies a daily periodical edition and If the total number of active daily editions exceeds the system setting value, saving a record is not permitted.*/ ActiveEditionsValidator: function() { //Fetch The Maximum Number Of Daily Periodical Editions System Setting Terrasoft.SysSettings.querySysSettingsItem("UsrMaximumNumberOfDailyPeriodicalEditions", function(result) { this.set("MaxPeriodicalEditions",result); }, this); //Store the system setting in a local variable var mySetting= this.get("MaxPeriodicalEditions"); //Variable to store the Count of Active Records var esqresult = ""; //ESQ Selection of the parent Object var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "UsrPeriodicalEditions"}); //Addition of Active and Publication Frequency Columns to Query esq.addColumn("UsrActive", "ActiveRecords"); esq.addColumn("UsrLookup1.Name","PublicationFrequency"); //Filteration to only include the count of records where the record is active and Publication Frequency is Daily var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrActive", "true"); var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrLookup1.Name", "Daily"); //Addition of Filters to the query esq.filters.add("esqFirstFilter", esqFirstFilter); esq.filters.add("esqSecondFilter", esqSecondFilter); //Aggregation to get the Count of resulting Query esq.addAggregationSchemaColumn("UsrActive", Terrasoft.AggregationType.COUNT, "ActiveRecords1", Terrasoft.AggregationEvalType.All); // Get the entire esq result colelction esq.getEntityCollection(function (result) { if (!result.success) { // In case the query doesn't yield any results specially when there is no such record return; } //Store the Count of Filtered Records to a variabble esqresult =result.collection.getByIndex(0).get("ActiveRecords1"); //Set the value of Attribute to access it globally this.set("ReturnedRecords",esqresult); },this); //Variable to store the Validation Message var invalidMessage = ""; //Local Variable to store the Count of Filtered Records var comparison = this.get("ReturnedRecords"); //Comparison to check only if the count of active Daily Edition Records is greater than system setting if(comparison>=mySetting && this.get("UsrLookup1").displayValue==="Daily" && this.get("UsrActive")===true) { // Assign the Validation Error Message to our local variable invalidMessage = this.get("Resources.Strings.ActiveDailyEditionsValidationMessage"); } // If the validation is successful, empty strings are returned to the object and no action taken return { invalidMessage: invalidMessage }; } },
developer,
It Works Just Replace > with <= and & with &
Also
InvalidMessage = "<Your message>";