In this example https://academy.creatio.com/documents/technic-sdk/7-15/handling-selection-several-records-examples there is a mention about method to open a lookup in the Case 2 example as 

this.openLookup(config, this.lookupCallback, this);

similary is there a method to open up a pre-configured page to get some inputs and the inputs are then used in the multiselect records?

 

Like 0

Like

10 comments
Best reply

Sriraksha KS,

 

1. The schema resources should be added to the dependencies. For example:

 

define("ActivitySectionV2", ["ConfigurationConstants", "ActivitySectionV2Resources"],

    function(ConfigurationConstants, resources) {...}

 

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:

 https://academy.creatio.com/documents/administration/7-15/creating-and-registering-lookups

Could you please clarify your business task? Why the lookup page is not appropriate for you?

However you can take a look at the LookupUtilitiesV2 schema and investigate how the open method works - https://prnt.sc/rhlzfr .

 

Alina Kazmirchuk,

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?

Thanks a lot Alina. This will work. Will try it out and let you know.

Ganesh Babu,

Thank you so much for explanation. I can recommend you to use the inputBox for that.

There is an example how to open the inputBox with Account and Contact lookup fields. Add code below into methods section and bind openInputBox method.

Please see the result here -> https://prnt.sc/rhntk5

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) {
 
        // TODO: your code here
 
    }
 
}

 

 

Alina Kazmirchuk,

 

Thank you for the code Alina. Even I have this requirement for our customer.

I tried with this code, it says issue with Resources.

Whats is the dependency to be mentioned in dependencies for 

resources.localizableStrings

UsrContact /UsrAccount is Entity Column name Or Its a Attribute?

 

It would help us if you provide us with the full code with instructions.

 

Thank you in advance

Sriraksha

Sriraksha KS,

 

1. The schema resources should be added to the dependencies. For example:

 

define("ActivitySectionV2", ["ConfigurationConstants", "ActivitySectionV2Resources"],

    function(ConfigurationConstants, resources) {...}

 

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;
                }
            }
        };
    });

 

Alina Kazmirchuk,

Thank you Alina, Will try this out. 

Regards,

Sriraksha

Alina Kazmirchuk,

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 .

Please help.

 

openInputBoxHandler: function(returnCode, controlData) {

                if (Terrasoft.MessageBoxButtons.OK.returnCode === returnCode) {

                    const activeRowId = controlData.UsrContact.value.value;

                      

                    var selectedRows = this.get("SelectedRows");

                    this.set("AccName", null);

                    if ((selectedRows.length > 0)) {

                      

                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");

                       

                        selectedRows.forEach(function(selectedRowId) {

                            

                           /* var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                                        rootSchemaName: "Account"

                                    });

                            esq.addColumn("Id");

                            esq.addColumn("Name" );

                            var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 

                            "Id", selectedRowId );   

                            esq.filters.add("esqFirstFilter", esqFirstFilter);

                            var e = esq.getEntityCollection();

                            esq.getEntityCollection(function (result) {

                            if (result.success) {

                                result.collection.each(function (item) {

                                this.set("AccName",item.get("Name"));

                                });

                                

                            }

                            this.showInformationDialog("Data query error");

                            }, this);*/



                            var insert = Ext.create("Terrasoft.InsertQuery", {

                            rootSchemaName: "Activity"

                            });

                        

                            insert.setParameterValue("Title", "Visit Account "  , Terrasoft.DataValueType.TEXT);

                            insert.setParameterValue("StartDate", new Date(),

                                Terrasoft.DataValueType.DATE);

                            insert.setParameterValue("DueDate", controlData.UsrDueDate.value,

                                Terrasoft.DataValueType.DATE);

                            insert.setParameterValue("ActivityCategory", "F51C4643-58E6-DF11-971B-001D60E938C6",

                                Terrasoft.DataValueType.GUID);

                            insert.setParameterValue("Status", "384D4B84-58E6-DF11-971B-001D60E938C6",

                                Terrasoft.DataValueType.GUID);

                            insert.setParameterValue("Owner", activeRowId,

                                Terrasoft.DataValueType.GUID);

                            insert.setParameterValue("Account", selectedRowId,

                                Terrasoft.DataValueType.GUID);

                                

                                batchQuery.add(insert);

                            

                        }, this);

                        

                        //batchQuery.execute();

                        batchQuery.execute(function() {

                            this.reloadGridData();

                        }, this);

                        

                        

                        

                    }

                }

                },

                

                

Alina Kazmirchuk,

 

Can the controls in the openInputBox be disabled? What is the property used for it.

I used "enabled : false"

 "UsrQuestion": {

                            dataValueType: Terrasoft.DataValueType.TEXT,

                            isRequired: true,

                            caption: resources.localizableStrings.UsrQuestionCaption,

                            value: {

                                bindTo: "UsrQuestion",

                                enabled: false

                            },

                        }

But dint work. Can you please help .

Alina Kazmirchuk,

How can we apply filter in 

 "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"
 
                }
 
            }
 
        },
  say I want to filter only customer type contacts.

Please help how to pass filter attribute here. 

 

Thanks,

Sriraksha

Show all comments

Hey Peeps!

 

When I set calendar for an employee setting day offs , how the system allows scheduling activities on that day. 

How to calculate efficiency of an employee when he has reduced working hours but yet he is working?

Like 0

Like

1 comments

Dear Shailey,

 

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.

 

Regards,

Dean

Show all comments

Dear mates,

I build an external application which put data into Creatio's Objects with oData.

From the Account section, i'd like to add a filter with this object but i can't find it in the list.

How can i display the object in the Account section advanced filters ?

 

Thanks,

Nicolas

Like 0

Like

2 comments

Hello Nicolas,

 

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.

 

Best regards,

Oscar

Hello Oscar,

i have compiled all the elements and it works !

i can find my object in the advanced filters

Thank you Oscar !

Show all comments

Hi,

I am facing this use case to make a certain printable visible only for certain organizational role.

Is this functionality exists out of the box or it needs further java script coding?

 

Thanks

Like 2

Like

8 comments

Hi Kavian,

 

theres something in the market palce we have used and works fine:

 

https://marketplace.creatio.com/app/opportunity-printables-filtering-ro…

 

rgds,

Luis

Luis Tinoco Azevedo,

Thanks, I will check it out

Hello,

 

You can simply activate records permissions for "Printable" object and specify read access rights for printables created by system administrators for each printable record separately. Once you activate records rights for printables you will get SysModuleReportRight table created in the database where you need to modify access rights for printables.

 

Best regards,

Oscar

Oscar Dylan,

 

Hi Oscar, is this valid for all objects? Can the same logic be applied to processes for example?

Cheers,

Luis

Luis Tinoco Azevedo,

Hello Luis,

 

As for business processes, we do not recommend changing access rights that are set by default in "Object permissions" section since processes are supposed to be accessed by all system users meaning that all system users can launch processes based on processes start signals. You can use "Operations permissions" section so to manage access level to business processes execution or management (operation permissions with "

CanManageProcessDesign", "CanRunBusinessProcesses" codes) or modify start signals of processes so to prevent processes execution for records that are not supposed to trigger processes.

 

Best regards,

Oscar

Oscar Dylan,

Hi Oscar,

When you say "modify access rights for printables" do you mean directly via sql or through another way?

 

Thanks,

Raz

Luis Tinoco Azevedo,

Hi, 

I see it is only for opportunities, is there something else for orders?

Oscar Dylan,

Hi, 

what do you mean when you say "modify access rights for printables", Can you give more details?

Thanks

Show all comments

Hello community

 

I need to build a multi line text using a process.

 

For example:

 

Line 1

Line 2

Line 3

 

How can I add a Line Break to the text ?

 

Like 0

Like

2 comments

Hello Oren,

 

I've used this formula value to add this text:

 

Line 1

 

Line 2

 

to "Notes" field of test lead:

 

"Line1"+ "\r \n"+"Line2"

 

And as a result I got this http://prntscr.com/rbbkgd

 

Best regards,

Oscar

Oscar Dylan,

It works !

 

Thanks Oscar

Show all comments

Hello, 

I'm having this error message when I try to show address in map. Especially for canadian addresses, 

Like 0

Like

3 comments

Hello Sanae,

 

Seems that there should be a screenshot in your question, but there is none. And I assume that you receive "Selected address cannot be found due to the web mapping service error" error message and it is related to the fact that https://nominatim.openstreetmap.org service that is used in maps cannot find address you've specified (for example because of ZIP/Postal code). Please remove Postal code from your address and check the issue once again. Also please check if your address can be found in https://nominatim.openstreetmap.org.

 

Best regards,

Oscar

Oscar Dylan,

Thank you. I will try that.

Oscar Dylan,

I have the same problem with the addresses in Brazil, and it works fine when I remove the Zip/Postal code. Is there any setup for that, so that I can keep address with the ZIP/Postal code and prevent the OpenStreeMap service from using it for the search?

Show all comments

Dear mates,

I build an external form which insert or update data into an 3 objects:

But when i want to generate the report, i ve got the following error:

Object reference not set to an instance of an object.

How can i solve this issue ?

Thanks,

Nicolas

 

 

I remove the externalisation field and it works.

Like 0

Like

1 comments

Most likely, there is some issue either on the object level or DB level with the externalisation field (since removing it helped). Most likely it was renamed or the compilation didn't go successfully when adding it. To fix the issue you can try doing the following steps: Generate source code for all -> Compile all -> Update DB structure. If these steps won't help please contact the support team at support@creatio.com. The issue would be easier to analyze after seeing the full log as the message in the UI doesn't reflect where exactly the error occurred. 

Show all comments

I need to show some items in red on the contact edit page - not the label, the data itself.

I created a module with LESS =

.control-width-15 .base-edit[isColorRed="true"] {

    color: red;

}

and it only works if the item is not read-only.

What would be the code for read-only items ?

Like 0

Like

1 comments

There are different selectors for an editable field and a readonly field. I recommend you to use dev tools in your browser in order to find the correct selector -  https://prnt.sc/r3n5qe.

There is an example for a readonly field below:

.control-width-15 .base-edit.base-edit-disabled .base-edit-input,.control-width-15 .base-edit.base-edit-disabled[iscategoryred="true"] {

    color: red;

}

 

Show all comments

hi i have a formula for lookup value but the result is'nt I expected,

here is my formula

but result return like a code of lookup value like this:

I want to ask how can i get text of lookup value in this case

Like 0

Like

3 comments

Hello Mai,

You need to also read lookup object itself so to get lookup record name and use this name instead since when you read lookup field value from some edit page record you will get an ID of this lookup record instead of lookup record name. So simply add one more "Read data" element (called "Read data 2" for example) in your process (right after your existing "Read data 1" element) and read data from the object which represents "PIC" lookup on the edit page of the object you read in your "Read data 1" element. Once done please modify your formula and remove "Read data 1" part from it and "Read data 2" directly from your new "Read data" element and choose "Name" field there. As a result you will get lookup record name instead of ID.

Best regards,

Oscar

hi oscar 

I have try but it seems not work, can you help me find out 

here is my formula:

[#Read data 1.First item of resulting collection.Lead#] + "  [PIC of Lead Has Changed To]  " + [#Read data 2.First item of resulting collection.PIC#]

but it's not work

 

Mai,

Please read what I've wrote in my previous response once again. You need to read data directly from lookup object. You are currently reading the value from lead edit page and get PIC lookup record ID, but to get PIC lookup record Name you need to also read PIC lookup object itself and get record name from there. You are not doing it in your process and in your formula so that's why you are getting record ID instead of Name in formula result. Please add another Read data element and read data directly from lookup object and use this data in your process.

Best regards,

Oscar

Show all comments

Hi Team, 

When I am on the product page and add folders for the filter I am getting the option to set up a filter, move, delete the folder (in filters).

Whereas when I go to the order page and select + option of the product in the order. Then once I click on saved filters (folders) the setup filter option is coming up but nothing can be actioned. 

 

whether this can be done only in the porduct page ? 

 

 

Like 0

Like

2 comments

Hello Gokul,

Product catalog in order page cannot be used to modify filters of the folder (but you are still able to move folder, delete, rename or copy it). As for filters - they can be only set in products section directly, but our R&D didn't have a task to implement the functionality of filter editing in product catalog so currently there is no way to activate this option.

I've left a suggestion to our R&D team to make it possible to modify filters in product catalog when adding product in order. Thank you for reporting this issue to us and helping us to make our application better!

Best regards,

Oscar

Oscar Dylan,

Thank you 

Show all comments