Here is a handler that will trigger calling the model load with the sorting using the "Name" column from the "Account" entity in the ascending order with row offset 15 and 1 record fetch:
Here is a handler that will trigger calling the model load with the sorting using the "Name" column from the "Account" entity in the ascending order with row offset 15 and 1 record fetch:
We have installed Creatio version 8.1.2 version with MSSQL DB in virtual machine, but once logged into 3 or 4 users at a time the instance is not working. Could you please help on this.
After restart the Redis and Application Pool it is working as expected.
In fact, IIS on different OS supports different numbers of concurrent connections, resulting in the fact that when the limit is reached, new requests won't be processed, the UI that sends these requests will not respond, and the Creatio Instance will be very slow/not working.
This is the only possible explanation of why this issue occurs.
I am working on Freedom UI interfaces for a client's self service portal. However our portal users are unable to open the User profile page to make changes to their information. When they click on the button in the top right where their user icon is, the portal user receives an endless loading screen.
The problem does not occur for internal users so I don't believe it's an error on the page. I can't find a permission related to it. Seems strange that portal users wouldn't be able to edit their profile
Try the following steps: 1. Log in to your site (not portal) under Supervisor 2. Go to System Settings and select Enable2FA 3. Check the checkbox 'allow reading for portal users' 4. Have the portal user clear the cache and cookies in the browser and try to enter User profile again
Try the following steps: 1. Log in to your site (not portal) under Supervisor 2. Go to System Settings and select Enable2FA 3. Check the checkbox 'allow reading for portal users' 4. Have the portal user clear the cache and cookies in the browser and try to enter User profile again
I'd like to filter out the contact that has been issued an unsubscribe request in the previous marketing bulk email. Howerver, I've no idea how to use the existing objects to filter in the folder setup page. Please kindly help.
Hi, Thanks for your help, anyway to know which click part in the email content the audience click in the result? Say, if there are two click parts in the edm, One is interested in "A" product, the other is "B" product, how to use filter to know who is the contact interested in "A" product" ?
Unfortunately, there is no way to filter and group contacts by clicking on a specific link. However, we have registered a request for the responsible R&D team to implement this feature in future versions of our app.
Is it possible to intercept using some request handler the event when a user clicks on the green "Complete" button on a Next Steps tile? This is the button in the "next-step-tile-actions" div on the page which only appears when you hover over the next step tile:
It would be vey helpful to be able to run some custom code when this button is clicked - in our case, we need it to save the main page record before actioning this next step, as completing the next step might automatically transition the Lead to the next stage, losing any data entered by the user.
Also tried "brute forcing" it by overriding every handler I could find in the Creatio code, but literally nothing fires when clicking that button! Not even something like the page's crt.HandleViewModelPauseRequest (since it's a modal popup, I guess the full page doesn't actually pause like it would when navigating to a another page through clicking a lookup for example). Hopefully I've missed something, triggering some action on clicking that button would be useful.
Unfortunately, at the moment, there is no way to intercept the event of clicking on the Next-steps tile buttons. This button can call different requests depending on the type of tile, and these requests are called without the view model context, which will not allow us to intercept them from the card and use them to save card data.
We have registered your idea, and the R&D team has already planned the task for this improvement - they will create a special output event for the Next-steps component. This functionality will be available in future releases.
< is the html code for < symbol, it's a "feature" of the code editor here in the Community:)
As for ModifierType
We have access to items that will be displayed in the grid and their position will be the same as in the response.collection.collection.items. You can pass response to the performStylesChange method and process it there as well and perform the check for the needed ModifierType and change styles only for those records.
Something like:
define("CaseSection", [], function(){return{
entitySchemaName:"Case",
messages:{},
attributes:{},
diff:/**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods:{
onGridDataLoaded: function(response){this.callParent(arguments);this.performStylesChange(response);},
performStylesChange: function(response){
var processedItemsIndexes =this.checkResponseCollection(response);
var recordTitles = document.getElementsByClassName("grid-primary-column");for(var i =0; i < recordTitles.length; i++){for(var j =0; j < processedItemsIndexes.length; j++){if(processedItemsIndexes[j]== i){
var element = recordTitles[i];
element.style.fontWeight='bold';}}}},
checkResponseCollection: function(response){
var responseItems = response.collection.getItems();
var processItemsIndexes =[];for(var i =0; i < responseItems.length; i++){if(responseItems[i].values.Status.displayValue=="New"){
processItemsIndexes.push(i);}}return processItemsIndexes;}}};});
Here I marked tickets in the New status in bold text:
Could you please clarify which step exactly you have problems with?
Was it possible for you to make the text bold without conditions?
If so then how exactly do you add the specific field value?
Thank you for your interest. I have overridden 2 methods:
initQueryColumns: function(esq){this.callParent(arguments);
esq.addColumn("ModifiedBy.Type.Id", "ModifierType");},
prepareResponseCollection: function(collection){this.callParent(arguments);// Аor each record returned in the query for the list // check the Amount field value and then apply style
collection.each(function(item){if(item.get("ModifierType")=="00783ef6-f36b-1410-a883-16d83cab0980"){
item.customStyle= Ext.apply(item.customStyle||{}, {"background-color":"#FFFFCC",
"font-weight":"bold"});}}, this);}
I understand that I need to change this part of the code:
define("CaseSection", [], function(){return{
entitySchemaName:"Case",
messages:{},
attributes:{},
diff:/**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods:{
onGridDataLoaded: function(response){this.callParent(arguments);this.performStylesChange();},
performStylesChange: function(){
var recordTitles = document.getElementsByClassName("grid-primary-column");for(var i =0; i < recordTitles.length; i++){
var element = recordTitles[i];
element.style.fontWeight='bold';}}}};});
The logic here is simple: once grid data is loaded we go through all elements on the page and change the style for the text to bold to all title columns (which is a case number). This is not the best solution, but it works properly when the list is loaded or sorting\filtering is changed in the list.
Hello. Here is an example. It uses jQuery, but you may easily adapt it to Oleg's example. Main idea is that items[i] is viewModel coresponding to recordTitles[i] DOM element from Oleg's example.
applyCustomCss: function(){
var gridData =this.getGridData();
var items = gridData.getItems();
var uiItems = $("div[column-name='ColorByProductType']");for(var i =0; i < items.length; i++){
var height = $(uiItems[0]).css("height");
var bgColor;
var category = items[i].get("Product.SxGoodsCategory").value;if(category === SxProductConstants.GoodsCategory.Wine){
var wineColor = items[i].get("Product.SxColor").value;if(wineColor === SxProductConstants.WineColor.Red){
bgColor ="#cc0a0a";}elseif(wineColor === SxProductConstants.WineColor.White){
bgColor ="gold";}elseif(wineColor === SxProductConstants.WineColor.Pink){
bgColor ="pink";}}elseif(category === SxProductConstants.GoodsCategory.Champagne){
bgColor ="bisque";}elseif(category === SxProductConstants.GoodsCategory.StrongAlcoholDrink){
bgColor ="saddlebrown";}elseif(category === SxProductConstants.GoodsCategory.Water){
bgColor ="blue";}
$(uiItems[i]).css({"background-color": bgColor,
"border-radius":"50%",
"vertical-align:":"middle",
"margin-top":"7px",
"margin-right":"2px",
"width": height});}},
And instead of oveeriding initQueryColumns method it is better to override getGridDataColumns
getGridDataColumns: function (){
var baseGridDataColumns =this.callParent(arguments);
var gridDataColumns ={"ModifiedBy.Type.Id":{path:"ModifiedBy.Type.Id"}};return Ext.apply(baseGridDataColumns, gridDataColumns);},
< is the html code for < symbol, it's a "feature" of the code editor here in the Community:)
As for ModifierType
We have access to items that will be displayed in the grid and their position will be the same as in the response.collection.collection.items. You can pass response to the performStylesChange method and process it there as well and perform the check for the needed ModifierType and change styles only for those records.
Something like:
define("CaseSection", [], function(){return{
entitySchemaName:"Case",
messages:{},
attributes:{},
diff:/**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods:{
onGridDataLoaded: function(response){this.callParent(arguments);this.performStylesChange(response);},
performStylesChange: function(response){
var processedItemsIndexes =this.checkResponseCollection(response);
var recordTitles = document.getElementsByClassName("grid-primary-column");for(var i =0; i < recordTitles.length; i++){for(var j =0; j < processedItemsIndexes.length; j++){if(processedItemsIndexes[j]== i){
var element = recordTitles[i];
element.style.fontWeight='bold';}}}},
checkResponseCollection: function(response){
var responseItems = response.collection.getItems();
var processItemsIndexes =[];for(var i =0; i < responseItems.length; i++){if(responseItems[i].values.Status.displayValue=="New"){
processItemsIndexes.push(i);}}return processItemsIndexes;}}};});
Here I marked tickets in the New status in bold text:
Thank you very much. With your help to solve this problem. It also gave me some insight into working with section entries via JavaScript. Also, if you don't mind, tell me how to compare the "Contact Type" lookup value in the : "ModifiedBy" field. Something like "ModifiedBy.Type.Id". Thank you again.
What I did here is add the Owner.Type column in the Cases section esq (Case has an Assignee (which is the Owner column that references the Contact entity) and I need to check the contact type specified in this column). As a result
we have access to this OwnerType in the context of the onGridDataLoaded and performStylesChange execution. We can also use it for style recalculation. In your case it should be similar but using another column.
Just a quick PSA - either 8.1.2 or 8.1.3 breaks the ability we had before of being able to set Page Parameter values in the crt.HandleViewModelInitRequest request handler, since in the newer versions it appears the value is reset back to the default (similar to how fields based over table columns are) at some time after the init handler runs. This is quite frustrating, as it's reducing the number of options we have for setting values in the code where required (which it still often is with the current options for no code development).
A workaround that Ryan Farley has previous mentioned using for setting field values by using a javascript timeout can be used for this too, e.g.
I also had such an isuue but I resolved it by calling parameter initialization after let result = await next?.handle(request); And then in the end return result;
Mine was already being initialised after awaiting the result of handling the request, so it might be that sometimes this takes long enough to be ok but not always (so would introduce a race condition).
Just an FYI, I've been reporting this since 8.0.10 (see #SR-01234445). I was told this would be resolved in "the nearest releases (8.1.1-8.1.2)", however, it's still an issue in 8.1.3 without a commitment from Creatio on a specific timeframe for a resolution. This is a pretty huge pain point so it's disappointing that it's still a problem. I do love Freedom UI (and I'll take it any day over classic!) but there's been many instances of my code breaking along the way with new versions and it sometimes seems less urgent for fixes for issues that go beyond the "no code" customizations.
I checked that case before replying to Harvey and asked the responsible team to raise the priority for this task. I apologize for the delay and hope to see the fix soon. Meanwhile, they shared one more workaround, which is better to use with parameters:
add the handler on parameter changing and rewrite it when the default value has appeared:
Yes, this approach does work if all you need when the form is initialized is to work with a single value on the page. However, that is often not the case and each property initialization can happen at slightly different times, so referencing other attributes in this same handler might not work, depending on the timing of the various attributes being loaded/initialized. Adding a separate handler for each attribute you need to work with can get messy quick.
What I think would be nice/match the existing patterns would be to have some new request handler that does the setting of default values on the page, something like "crt.HandleAttributeInitRequest", which would perform the OOTB platform's setting of these values in the next?.handle(request) and then after awaiting the result of that a developer could set their own defaults for fields they need to, which wouldn't be overwritten (since the defaults had already been set).
It would also be nice to be able to "silently" set these default values (like you could in Classic UI) so that setting values in that request handler wouldn't cause the "are you sure" dialog to appear if a user closes the page without actually modifying the data themselves. Actually it would be nice to be able to do that generally from within request handler code.
Hi, is there any update on the matter? Still when you're trying to read the attributes on crt.HandleViewModelInitRequest the attributes aren't initialized and are all undefined
I am currently working on a page in Freedom UI which contains a detail. The detail's object resides in Classic UI. I need to apply field validation on this detail while performing inline editing within the Freedom UI.
Here's a brief overview of what I'm trying to achieve:
The main page is in Freedom UI.
The detail object is in Classic UI.
I need to implement field validation on the detail during inline editing.
I've attempted a few approaches, but none seem to provide the desired results. Has anyone faced a similar challenge or can provide guidance on how to achieve this functionality?
Any help or pointers would be greatly appreciated.
Hello Kumar, Looks like this task is impossible for now because Freedom UI doesn't allow getting the value of one control (attribute) in the code of custom validator for another control.
We have this task registered on our R&D team and will get this possibility in future releases, please follow the updates.
I have a web form created in wordpress using elementor plugin. I would like to upload a file to the via this wordpress form but I can't find documentation for this. Any help would be much appreciated.
It's not very straight forward, but it is possible. Basically, you'd need to encode the file as a Base64 string, then transfer it as a string value to the webhook. Once received decode the Base64 string back to a file byte array to save as an attachment somewhere.