I have installed Creatio bank sales locally. In that, I am trying to register in a creatio portal. I have opened the portal registration form and have filled all the details. But, I am getting an error after clicking the Register button. Here, I am attaching the error message screenshot below. Please have a look and provide your valuable suggestions.
I have used the below URL to open the portal page:
I didn't get any licenses for the SysPortalConnection user in my instance. I am attaching the screenshot below here. Please have a look and provide your suggestions.
It is not possible to bind 'Default section view' since there is such option. If you need to bind the columns settings of the section, you can use SysProfileData object. Here is a simple guide in different community post:
In mobile we can configure the Column Set to disable the collapsible using below property:
collapsible: false
isCollapsed: false
We tried to apply the same for Attachment/File Detail but the above property is not working. Please suggest how we can disable the collapsible in mobile preview page.
2. UsrContact /UsrAccount fields are just attributes of inputBox page. They are not presented in the database.
Please feel free to see the full example below:
define("ActivitySectionV2", ["ConfigurationConstants", "ActivitySectionV2Resources"],
function(ConfigurationConstants, resources){return{// Section schema name.
entitySchemaName:"Activity",
// Section view model methods.
methods:{// Defines if the menu option is enabled.
isCustomActionEnabled: function(){// Attempt to receive the selected record indentifier array
var selectedRows =this.get("SelectedRows");// If the array contains some elements (at least one of the records is selected from the list),// it returns true, otherwise — false.return selectedRows ?(selectedRows.length>0):false;},
openInputBox: function(){this.set("UsrContactCollection", new Terrasoft.Collection());this.set("UsrAccountCollection", new Terrasoft.Collection());this.set("UsrContact", null);this.set("UsrAccount", null);
var controls ={"UsrContact":{
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired:true,
caption: resources.localizableStrings.UsrContactCaption,
value:{
bindTo:"UsrContact"},
customConfig:{
tag:"Contact",
list:{
bindTo:"UsrContactCollection"},
prepareList:{
bindTo:"getCollectionValues"},
loadNextPage:{
bindTo:"loadCollectionNextPage"}}},
"UsrAccount":{
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired:true,
caption: resources.localizableStrings.UsrAccountCaption,
value:{
bindTo:"UsrAccount"},
customConfig:{
tag:"Account",
list:{
bindTo:"UsrAccountCollection"},
prepareList:{
bindTo:"getCollectionValues"},
loadNextPage:{
bindTo:"loadCollectionNextPage"}}}};
Terrasoft.utils.inputBox(resources.localizableStrings.UsrInputBoxCaption,
this.openInputBoxHandler,
[Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL],
this,
controls
);
Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item){
item.control.bind(this);}, this);},
getCollectionValues: function(filter, list, tag){if(Ext.isEmpty(list)){return;}
list.clear();
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: tag,
isPageable:true,
rowCount:20});this.buildCollectionQuery(esq, list, filter, tag);},
loadCollectionNextPage: function(listParams, tag){if(!this.get("CanLoadMore"+ tag)){return;}
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: tag,
isPageable:true,
rowCount:20,
rowsOffset: listParams.listView.collectionItemsCount});this.buildCollectionQuery(esq, listParams.list, listParams.filterValue, tag);},
buildCollectionQuery: function(esq, list, filter, tag){
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "value");
var orderColumn = esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "displayValue");
orderColumn.orderDirection= Terrasoft.OrderDirection.ASC;
esq.filters.addItem(esq.createPrimaryDisplayColumnFilterWithParameter(
Terrasoft.ComparisonType.START_WITH, filter, Terrasoft.DataValueType.TEXT));
esq.getEntityCollection(function(response){if(response && response.success){
var preObject ={};
response.collection.each(function(item){
preObject[item.get("value")]= item.values;}, this);
list.loadAll(preObject);this.set("CanLoadMore"+ tag, response.collection.getCount()===20);}}, this);},
openInputBoxHandler: function(returnCode, controlData){if(Terrasoft.MessageBoxButtons.OK.returnCode=== returnCode){
console.log("it works");const activeRowId = controlData.UsrContact.value.value;// Receiving of the selected record identifier array.
var selectedRows =this.get("SelectedRows");// The procession starts if at least one record is selected from the list and the owner is selected // in the lookup.if((selectedRows.length>0)){// Creation of the batch query class instance.
var batchQuery =this.Ext.create("Terrasoft.BatchQuery");// Update of each selected record.
selectedRows.forEach(function(selectedRowId){// Creation of the UpdateQuery class instance with the Activity root schema.
var update =this.Ext.create("Terrasoft.UpdateQuery", {
rootSchemaName:"Activity"});// Applying filter to determine the record for update.
update.enablePrimaryColumnFilter(selectedRowId);// The [Owner] column is populated with the value that equals to// the lookup selected contact id.
update.setParameterValue("Owner", activeRowId, this.Terrasoft.DataValueType.GUID);// Adding a record update query to the batch query.
batchQuery.add(update);}, this);// Batch query to the server.
batchQuery.execute(function(){// Record list update.this.reloadGridData();}, this);}// TODO: your code here}},
// Overriding the base virtual method, returning the section action collection.
getSectionActions: function(){// Calling of the parent method implementation, // returning the initialized section action collection.
var actionMenuItems =this.callParent(arguments);// Adding separator line.
actionMenuItems.addItem(this.getButtonMenuItem({
Type:"Terrasoft.MenuSeparator",
Caption:""}));// Adding a menu option to the section action list.
actionMenuItems.addItem(this.getButtonMenuItem({// Binding the menu option title to the localized schema string."Caption":{ bindTo:"Resources.Strings.SetOwnerCaption"},
// Binding of the action handler method."Click":{ bindTo:"openInputBox"},
// Binding the menu option enable property to the value that returns the isCustomActionEnabled method."Enabled":{ bindTo:"isCustomActionEnabled"},
// Multiselection mode enabling."IsEnabledForSelectedAll":true}));// Returning of the added section action collection.return actionMenuItems;}}};});
As I understood, you want to open a pre-configured page to select a value instead of the lookup page. Please correct me if I am wrong.
I suppose you can just create a new lookup with needed fields. That allows you to use the out-of-the box functionality without additional development. Please see the article on Academy:
Dear Alina, The use case is to get multiple values to be assigned for the records instead of just one. Ex., For the selected records would like to setup the owner and also the due date. So if we are able to open up a page which has a date and owner lookup field. Then using that page, the date and owner can be read and updated into each of the records. Hope it is clear now?
2. UsrContact /UsrAccount fields are just attributes of inputBox page. They are not presented in the database.
Please feel free to see the full example below:
define("ActivitySectionV2", ["ConfigurationConstants", "ActivitySectionV2Resources"],
function(ConfigurationConstants, resources){return{// Section schema name.
entitySchemaName:"Activity",
// Section view model methods.
methods:{// Defines if the menu option is enabled.
isCustomActionEnabled: function(){// Attempt to receive the selected record indentifier array
var selectedRows =this.get("SelectedRows");// If the array contains some elements (at least one of the records is selected from the list),// it returns true, otherwise — false.return selectedRows ?(selectedRows.length>0):false;},
openInputBox: function(){this.set("UsrContactCollection", new Terrasoft.Collection());this.set("UsrAccountCollection", new Terrasoft.Collection());this.set("UsrContact", null);this.set("UsrAccount", null);
var controls ={"UsrContact":{
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired:true,
caption: resources.localizableStrings.UsrContactCaption,
value:{
bindTo:"UsrContact"},
customConfig:{
tag:"Contact",
list:{
bindTo:"UsrContactCollection"},
prepareList:{
bindTo:"getCollectionValues"},
loadNextPage:{
bindTo:"loadCollectionNextPage"}}},
"UsrAccount":{
dataValueType: Terrasoft.DataValueType.ENUM,
isRequired:true,
caption: resources.localizableStrings.UsrAccountCaption,
value:{
bindTo:"UsrAccount"},
customConfig:{
tag:"Account",
list:{
bindTo:"UsrAccountCollection"},
prepareList:{
bindTo:"getCollectionValues"},
loadNextPage:{
bindTo:"loadCollectionNextPage"}}}};
Terrasoft.utils.inputBox(resources.localizableStrings.UsrInputBoxCaption,
this.openInputBoxHandler,
[Terrasoft.MessageBoxButtons.OK, Terrasoft.MessageBoxButtons.CANCEL],
this,
controls
);
Terrasoft.each(Terrasoft.MessageBox.controlArray, function(item){
item.control.bind(this);}, this);},
getCollectionValues: function(filter, list, tag){if(Ext.isEmpty(list)){return;}
list.clear();
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: tag,
isPageable:true,
rowCount:20});this.buildCollectionQuery(esq, list, filter, tag);},
loadCollectionNextPage: function(listParams, tag){if(!this.get("CanLoadMore"+ tag)){return;}
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: tag,
isPageable:true,
rowCount:20,
rowsOffset: listParams.listView.collectionItemsCount});this.buildCollectionQuery(esq, listParams.list, listParams.filterValue, tag);},
buildCollectionQuery: function(esq, list, filter, tag){
esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_COLUMN, "value");
var orderColumn = esq.addMacrosColumn(Terrasoft.QueryMacrosType.PRIMARY_DISPLAY_COLUMN, "displayValue");
orderColumn.orderDirection= Terrasoft.OrderDirection.ASC;
esq.filters.addItem(esq.createPrimaryDisplayColumnFilterWithParameter(
Terrasoft.ComparisonType.START_WITH, filter, Terrasoft.DataValueType.TEXT));
esq.getEntityCollection(function(response){if(response && response.success){
var preObject ={};
response.collection.each(function(item){
preObject[item.get("value")]= item.values;}, this);
list.loadAll(preObject);this.set("CanLoadMore"+ tag, response.collection.getCount()===20);}}, this);},
openInputBoxHandler: function(returnCode, controlData){if(Terrasoft.MessageBoxButtons.OK.returnCode=== returnCode){
console.log("it works");const activeRowId = controlData.UsrContact.value.value;// Receiving of the selected record identifier array.
var selectedRows =this.get("SelectedRows");// The procession starts if at least one record is selected from the list and the owner is selected // in the lookup.if((selectedRows.length>0)){// Creation of the batch query class instance.
var batchQuery =this.Ext.create("Terrasoft.BatchQuery");// Update of each selected record.
selectedRows.forEach(function(selectedRowId){// Creation of the UpdateQuery class instance with the Activity root schema.
var update =this.Ext.create("Terrasoft.UpdateQuery", {
rootSchemaName:"Activity"});// Applying filter to determine the record for update.
update.enablePrimaryColumnFilter(selectedRowId);// The [Owner] column is populated with the value that equals to// the lookup selected contact id.
update.setParameterValue("Owner", activeRowId, this.Terrasoft.DataValueType.GUID);// Adding a record update query to the batch query.
batchQuery.add(update);}, this);// Batch query to the server.
batchQuery.execute(function(){// Record list update.this.reloadGridData();}, this);}// TODO: your code here}},
// Overriding the base virtual method, returning the section action collection.
getSectionActions: function(){// Calling of the parent method implementation, // returning the initialized section action collection.
var actionMenuItems =this.callParent(arguments);// Adding separator line.
actionMenuItems.addItem(this.getButtonMenuItem({
Type:"Terrasoft.MenuSeparator",
Caption:""}));// Adding a menu option to the section action list.
actionMenuItems.addItem(this.getButtonMenuItem({// Binding the menu option title to the localized schema string."Caption":{ bindTo:"Resources.Strings.SetOwnerCaption"},
// Binding of the action handler method."Click":{ bindTo:"openInputBox"},
// Binding the menu option enable property to the value that returns the isCustomActionEnabled method."Enabled":{ bindTo:"isCustomActionEnabled"},
// Multiselection mode enabling."IsEnabledForSelectedAll":true}));// Returning of the added section action collection.return actionMenuItems;}}};});
Thank you for the solution. I have a doubt, In select rows, it returns only Id, Is there a way where i can take Name?
isCustomActionEnabled: function() {
// Attempt to receive the selected record indentifier array
var selectedRows = this.get("SelectedRows");
// If the array contains some elements (at least one of the records is selected from the list),
// it returns true, otherwise — false.
return selectedRows ? (selectedRows.length > 0) : false;
},
Please help on this, i tried using ESQ , even though i got record using, i was not able to use it in next code in Section. If it was in Page i would have used Attribute . but, here I am stuck .
There is no such functionality that allows to calculate the user's efficiency. You can use the activities for any days. For example, if a customer center user works with cases, he can set the activity with the completed status where start date and due date is the actual time spent to process this case. I case a user spends 1 hour for a ticket - he sets the 1 hour activity.
Another workaround is to use SysUserSession table to see how much time a user was logged in and use this data in the efficiency estimation. You will be able to see how many days the user was logged in and compare it with the overall business days amount in your targets.
Other than that, the there is no default tool to calculate this data.
I am trying to cancel some business processes that are currently running in my system. However, when I click cancel, the process reverts back to running when I refresh the page. Why does this happen?
The issue may occur because processes are getting canceled asynchronously. Usually, the cancellation happens momentarily, but sometimes the cancellation may wait for other background tasks to finish, which leads to the delay between pressing "cancel process" and actual process cancelation. If the process doesn't get canceled after a major amount of time please contact the support team at support@creatio.com
In web application, we can set the default page after login by giving the default value in home page field in system users. I want to the same in mobile application, how we can set the default page after login in mobile application?
Unfortunately, there is no possibility to configure home page in mobile application using native tools or changing existing configuration.
The only possible way to implement this functionality for now is to create your own mobile application using our source files.
The responsible R&D team is already informed about this request so they will consider a possibility of creating functionality which would allow our users to configure home pages in their mobile apps.
To see the column you need in advanced filtration of accounts section you need to have connection between accounts section and you custom section (please double-check if you have this accountId field in your custom object). Secondly if you still doesn't see your custom object - you need to generate source code for all items and compile all items and try building a filter after that. And finally please try using not object name from configurations, but object title (https://prnt.sc/rdqzql) when building your filter.
If it won't help please email us at support@creatio.com and provide us with external access to the application (and also provide us with the link to this applicaiton) with access to data and configurations (and also with the name of your UsrObject) so we could take a look at all settings.