Is it possible to specify a lookup as the possible answers for an user dialog ? How ?

Like 0

Like

2 comments

Dear Ricardo,

There is no such option for user dialog but you may use auto-generated or pre-configured page instead for such task - they can be configured as you described. 

Best regards,

Angela

Angela Reyes,

Thanks !

Show all comments

Hi Community,

I created an editable detail thanks to the source code provided on the Academy.



The problem is that the datas are not saved.



Please find here the code from the Academy:

// Defining schema and setting its dependencies from other modules.
define("UsrCourierServiceDetail", ["ConfigurationGrid", "ConfigurationGridGenerator",
    "ConfigurationGridUtilities"], function() {
    return {
        // Detail object schema name.
        entitySchemaName: "UsrCourierService",
        // Schema attribute list.
        attributes: {
            // Determines whether the editing is enabled.
            "IsEditable": {
                // Data type — logic.
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                // Attribute type — virtual column of the view model.
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                // Set value.
                value: true
            }
        },
        // Used mixins.
        mixins: {
            ConfigurationGridUtilities: "Terrasoft.ConfigurationGridUtilities"
        },
        // Array with view model modifications.
        diff: /**SCHEMA_DIFF*/[
            {
                // Operation type — merging.
                "operation": "merge",
                // Name of the schema element, with which the action is performed.
                "name": "DataGrid",
                // Object, whose properties will be joined with the schema element properties.
                "values": {
                    // Class name
                    "className": "Terrasoft.ConfigurationGrid",
                    // View generator must generate only part of view.
                    "generator": "ConfigurationGridGenerator.generatePartial",
                    // Binding the edit elements configuration obtaining event
                    // of the active page to handler method.
                    "generateControlsConfig": {"bindTo": "generateActiveRowControlsConfig"},
                    // Binding the active record changing event to handler method.
                    "changeRow": {"bindTo": "changeRow"},
                    // Binding the record selection cancellation event to handler method.
                    "unSelectRow": {"bindTo": "unSelectRow"},
                    // Binding of the list click event to handler method.
                    "onGridClick": {"bindTo": "onGridClick"},
                    // Actions performed with active record.
                    "activeRowActions": [
                        // [Save] action setup.
                        {
                            // Class name of the control element, with which the action is connected.
                            "className": "Terrasoft.Button",
                            // Display style — transparent button.
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            // Tag.
                            "tag": "save",
                            // Marker value.
                            "markerValue": "save",
                            // Binding button image.
                            "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                        },
                        // [Cancel] action setup.
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "cancel",
                            "markerValue": "cancel",
                            "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                        },
                        // [Delete] action setup.
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "remove",
                            "markerValue": "remove",
                            "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                        }
                    ],
                    // Binding to method that initializes subscription to events
                    // of clicking buttons in the active row.
                    "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
                    // Binding the active record action completion event to handler method.
                    "activeRowAction": {"bindTo": "onActiveRowAction"},
                    // Identifies whether multiple records can be selected.
                    "multiSelect": {"bindTo": "MultiSelect"}
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

It seems that the "Saved function" are missing now ?



Thanks a lot for your help.

 

Dorian

Like 0

Like

1 comments

Dear Dorian,

It’s hard to say what exactly is wrong without checking the source code. However, if the detail is displayed on the page without any records it can mean that it’s an error in the “filter” property of detail settings on page schema.

Please find the correct example of the filter below:

                "filter": {

                    // Detail object schema column.

                    "detailColumn": [lookup field of detail object referring to the page object],

                    // Section object schema column.

                    "masterColumn": "Id"

                }

For more detailed assistance, please contact technical support.

Best regards,

Norton

Show all comments

Hi,

On my dashboard reporting I want to create filters that show the data just for the current and on another data series last financial year, so I can clearly see comparisons. I am not seeing how I can achieve this in the filtering options:

 

Is this possible and if not is this a feature that can be added to allow this, as this is an important metric requirement.

thanks

 

Mark

Like 0

Like

2 comments

Sorry to bump, but being able to create reports aligned to a companies financial year i.e. April to April is important. Can we do this currently and if not can I raise as a feature request?

Dear Mark, 

Please use Chart dashboard for such purpose. There you can add several series of data to compare by needed column.

For example I want to display how total value of orders changed per weeks comparing this year and last year. I will add a new dashboard of chart type. There I will apply the following settings:

https://recordit.co/jjGHjVe1KS

The main idea is to use series in Chart type dashboard to achieve the business task.

Regards,

Anastasia

Show all comments



Is there a more verbose version of the import log available?  I'm on about the 5th iteration of trying to import a list from excel into contacts and I keep getting the same error message.  Don't know where the error is occurring or why.  I'm about at the end of my rope. 

Entirely useless error message below:

Conversion failed when converting from a character string to a unique identifier.

Like 0

Like

7 comments

Are you using the log at https://<instance>.bpmonline.com/0/Nui/ViewModule.aspx#LookupSectionModule/FileImportLookupSection/ExcelImportLog?  That one usually at least gives me the cell where the problematic data is.

If that's what you're using already, which columns are you importing into?  It sounds like one of them is an Id/GUID type column; is the input to that one in 00000000-0000-0000-0000-000000000000 format?  Does it have extra spaces, or is it perhaps missing the dashes (or depending on the converter's whims, does it have them when it's not expecting any)?

Darian Lewis,

Yes. That's the log I'm using.  I've done imports several times and it has never given me the cell where the data has gone wrong.  Perhaps you have some other configuration.  If so, please let me know what it is.  The lack of information is why I asked for a more verbose log.  I typed verbatim the message from the log in my original question.

 

I'm using the Account ID column.  This is so it doesn't overwrite the Account records we're adding the Contacts to.  I've tried trimming extra spaces via excel.  There are over 300 records in the original spreadsheet.  I'm pretty sure I could have entered them all manually in the time it's taken me to troubleshoot this.

 

 

Afraid I couldn't guess further without seeing a sample of the data.  Have you tried importing just one row to see if it's a single record causing the problem or all of them, and to test different ways of formatting the GUID in the column?

Darian Lewis,

Yes, I've done a few rows at a time and it worked.  Which is why I'd like to know exactly which of the records is causing the issue.  If I had that information from the import log, it would be helpful.  Hence the original question. I don't want to have to import all of these records a row at a time.  I shouldn't have to either.

What other ways of formatting the GUID would you suggest?  Would there be a preferred format for that field?

If individual records are working, then whatever format the functional ones are using should be fine.  Are there any blank/null entries in that column?  If so, I'd test one of those; it might be expecting all 0s instead.  If not, best I can suggest at that point is a binary search to narrow it down (i.e. import half the file; if there's an error, halve it again, if not, halve the other half and try that, repeat until you find the problematic row).

Might be someone else has a better idea.

Sorry, thought you worked at bpm'online.  I'll try taking this up with them.

Thanks

Dear Lisa, 

This error occurs when you are trying insert values of different type into string field. It is also possible that during the initial import there was a minor mistake in mapping of fields (which lead to the mentioned case) and when you've imported smaller portions the mapping was correct so the error didn't occur. 

You can try double checking the mapping of columns and importing the whole file once again. 

Best regards,

Dennis 

Show all comments

Hi,

 

I am about to upload an excel sheet for contacts section, but I already defined business rules for columns. How that would be implemented in the new records?

 

Thanks

Like 0

Like

1 comments

Hi,

Business rules are applied on pages when they are being loaded. This means that they will work for all records regardless of the way they were created. 

Best regards,

Angela

Show all comments

Hi community,

Can i generate a Excel report in a business process with de app in the marketplace?

I have a process wich function is sends a email with a attachment file, this is functional but the excel file cames empty.

Can anyone help?

King Regards!

Like 1

Like

9 comments

Dear Juan Cruz, 



We recommend you to contact bpmonlinelabs@bpmonline.com on this particular request as they are developers of this marketplace application.



Thank you. 

Hi Juan, How are you?

It may not be the best way but we made it work as follows:

  1.  Create a new source code
    1. Copy & paste IntExcelReportService
    2. Rename the class with our custom name
    3.  Add own code in the method we need to override in this case GetExportFilteredData

    var insert = new Insert(UserConnection).Into("AccountFile")

                .Set("Name", Column.Parameter(reportName))

                .Set("Data", Column.Parameter(buffer))

                .Set("Typeid", Column.Parameter("529bc2f8-0ee0-df11-971b-001d60e938c6"))

                .Set("Accountid", Column.Parameter("accountid");

            insert.Execute();

2.  Using RestSharp we made a process with a scrit task that atuhenticate in bpm and calls this new service in its 2 methods:

GetExportFiltersKey

GetExportFilteredData 

Regards

Hi Uriel,

 

We manage to develop the script task that stores the excel report in our custom object attachments detail, following the steps you describe above.

 

Since one of the params required to generate the report is the "EsqString" and this param changes everytime we update the excel report structure.

 

 

 

We would like to know how can we get the most updated EsqString from a specific report in order to use it in our script task?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

 

Hi,

 

Here is an example of two EsqStrings from two test calls of the GetExportFiltersKey service for the same contact using the same report:

 

EsqString: "{\"rootSchemaName\":\"Contact\",\"operationType\":0,\"includeProcessExecutionData\":true,\"filters\":{\"items\":{\"a3cef0ef-1871-4dfe-ac72-f6f322b1be57\":{\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":false,\"leftExpression\":{\"expressionType\":0,\"columnPath\":\"Id\"},\"rightExpression\":{\"expressionType\":2,\"parameter\":{\"dataValueType\":1,\"value\":\"c4ed336c-3e9b-40fe-8b82-5632476472b4\"}}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6},\"columns\":{\"items\":{\"Full name\":{\"caption\":\"Full name\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Name\"}},\"Age\":{\"caption\":\"Age\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Age\"}},\"Email\":{\"caption\":\"Email\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Email\"}}}},\"isDistinct\":false,\"rowCount\":-1,\"rowsOffset\":-1,\"isPageable\":false,\"allColumns\":false,\"useLocalization\":true,\"useRecordDeactivation\":false,\"serverESQCacheParameters\":{\"cacheLevel\":0,\"cacheGroup\":\"\",\"cacheItemName\":\"\"},\"queryOptimize\":false,\"useMetrics\":false,\"adminUnitRoleSources\":0,\"querySource\":0,\"ignoreDisplayValues\":false,\"isHierarchical\":false}"

 

 

EsqString: "{\"rootSchemaName\":\"Contact\",\"operationType\":0,\"includeProcessExecutionData\":true,\"filters\":{\"items\":{\"aed2f24c-bb67-4a1d-9504-33e9bb3010e5\":{\"filterType\":1,\"comparisonType\":3,\"isEnabled\":true,\"trimDateTimeParameterToDate\":false,\"leftExpression\":{\"expressionType\":0,\"columnPath\":\"Id\"},\"rightExpression\":{\"expressionType\":2,\"parameter\":{\"dataValueType\":1,\"value\":\"c4ed336c-3e9b-40fe-8b82-5632476472b4\"}}}},\"logicalOperation\":0,\"isEnabled\":true,\"filterType\":6},\"columns\":{\"items\":{\"Full name\":{\"caption\":\"Full name\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Name\"}},\"Age\":{\"caption\":\"Age\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Age\"}},\"Email\":{\"caption\":\"Email\",\"orderDirection\":0,\"orderPosition\":-1,\"isVisible\":true,\"expression\":{\"expressionType\":0,\"columnPath\":\"Email\"}}}},\"isDistinct\":false,\"rowCount\":-1,\"rowsOffset\":-1,\"isPageable\":false,\"allColumns\":false,\"useLocalization\":true,\"useRecordDeactivation\":false,\"serverESQCacheParameters\":{\"cacheLevel\":0,\"cacheGroup\":\"\",\"cacheItemName\":\"\"},\"queryOptimize\":false,\"useMetrics\":false,\"adminUnitRoleSources\":0,\"querySource\":0,\"ignoreDisplayValues\":false,\"isHierarchical\":false}"

 

The only thing that is modified here is an Id of the "items" parameter in the "filters" part. I guess that you can generate a random GUID here using Guid.NewGuid(). Other key parameters here are:

 

1) \"rootSchemaName\":\"Contact\" - report on which section record should be generated

2) "value\":\"c4ed336c-3e9b-40fe-8b82-5632476472b4\" - Id of the record itself

3) \"columns\" - list of columns of the report, can remain static for each report, but should be updated in case the columns set in the report setup is modified.

 

 

Please test the following approach of adding the random GUID to the filter items and let us know in case you face some issues with it.

 

Best regards,

Oscar

Hi Oscar Dylan,

 

Thank you for the response.

 

Our problem is related with the \"columns\" list.

 

The Script Task receive the reportId from the process parameter. This parameter is changed depending on which report we want to store in the attachments.

 

The main goal is to update the \"columns\" list based on the reportId received, because each report has its own structure. Finaly, we generate and store the correct report.

 

This whole process cannot have user interaction, we need to find a way to get the columns list from a specific report inside the process.

 

If you have any questions feel free to ask.

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

 

Pedro Pinheiro,

 

Hi,

 

Then you need to check the IntExcelreportMixin. The columns list and the EsqString is formed inside getIntExcelReport function that receives esq as an argument:

			var requestData = {
				EsqString: esq.serialize(),
				ReportId: reportId,
				RecordCollection: recordCollection
			};

and esq itself is formed in two methods: addCustomProfileColumns and prepareProfileColumns:

prepareProfileColumns: function(profileSettings) {
			var profileColumns = [];
			var profile = profileSettings &amp;&amp; profileSettings.DataGrid;
			if (!profile) {
				return profileColumns;
			}
			var gridsColumnsConfig = profile.isTiled ? profile.tiledConfig : profile.listedConfig;
			if (gridsColumnsConfig) {
				var columnsConfig = this.Ext.decode(gridsColumnsConfig);
				this.Terrasoft.each(columnsConfig.items, function(item) {
					profileColumns.push({
						aggregationType: item.aggregationType,
						caption: item.caption,
						dataValueType: item.dataValueType,
						path: item.path || item.bindTo,
						subFilters: this.Terrasoft.deserialize(item.serializedFilter),
						type: item.type || this.Terrasoft.GridCellType.TEXT
					});
				}, this);
			}
			return profileColumns;
		},
		addCustomProfileColumns: function(esq, profile) {
			var allColumns = Boolean(profile &amp;&amp; profile.DataGrid &amp;&amp; profile.DataGrid.allColumns);
			esq.allColumns = allColumns;
			if (allColumns) {
				return;
			}
			var profileColumns = this.prepareProfileColumns(profile);
			this.Terrasoft.each(profileColumns, function(column) {
				var columnName = column.caption;
				if (!esq.columns.contains(columnName)) {
					if (column.aggregationType) {
						this.addProfileAggregationColumn(esq, column, columnName);
					} else {
						esq.addColumn(column.path, columnName);
					}
					var newColumn = esq.columns.get(columnName);
					newColumn.caption = column.caption;
				}
			}, this);
		},

And once esq is formed and serialized it becomes a correct Esq.String that we need:

So you need to copy the logic of the mixin using C#.

 

Best regards,

Oscar

Oscar Dylan,

 

I'm trying to implement the logic of the mixin on my script task as you said. But I'm having trouble understanding the profile argument. Can you please explain me how do I get/generate the profile data that is being used by addCustomProfileColumns method as argument  on my script task?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Oscar Dylan,

 

I think I found the solution to my problem. The object IntExcelReport contains a specific column that has the ESQ String as you can see in the image bellow.

 

 

I've check the values and it matches the query inside the requestData. Now I can get this value with a simple db query and use it to generate my ExcelReport.

 

 

Best Regards,

Pedro Pinheiro

Did anyone actually manage to get this to work?

 

Thanks,

Show all comments

Hi,

How to read Entity lookup column in script task?

Please help. i need the value(display name) of lookup column in script task.

Thank you

Like 0

Like

1 comments

Hello, 

If you want to read column from the previously read or created record with Read data or Add data element you can follow the instructions in the community article below: 

https://community.bpmonline.com/node/26563

If you want to read it from a certain record you can add it to the process as a parameter and use Get to get it in script task (https://prnt.sc/ooum87), or, for example you can use EntitySchemaQuery:

https://academy.bpmonline.com/documents/technic-sdk/7-13/working-database-entity-class

Best regards,

Dennis  

Show all comments

I want to know what are the territory Management functionalities  in BPMOnline

Like 0

Like

2 comments

Hi!

It depends on your business task. If you are asking how different departments can be handled then it is usually done via organisational and functional roles. If this is not what you are looking for - please specify your task 

Best regards,

Angela

Hi Shammi,

 

You can use the Territory Management functionality available in a tool called Mapsly (available in Creatio Marketplace). You can draw territories by hand or use geo-library to select geographies such as zip codes, counties, states, etc. Mapsly can automatically assign records to your territories and save the assigned territories to Creatio in real time.

 

 

 

Show all comments

Hi,

 

I am building a BPM'Online application that is using SSO integration for authentication. I also need to integrate this application with another external system. The external system will use the BPM'online public API to communicate with the application. My question is around the user credentials that need to be used to authenticate the external system during the integration. Does the user need to be an SSO user or can it be a new forms login that can be created in BPM'Online specifically for the integration? In other words, will the /ServiceModel/AuthService.svc/Login API that is used for web service authentication accept only SSO users when SSO integration is enabled or can it also process an OOTB forms login?

Appreciate all the help. Thanks in advance...

Like 0

Like

1 comments

AuthService will not accept SSO users. At the same time, the service will accept regular users even after enabling SSO. Please create a regular user for the integration. If the integration worked when SSO was disabled then it will continue working after enabling SSO. 

Show all comments

Hello,

Can someone explain what the functional purpose of the Activity Author is? The system defaults their reminder to the 'Due Date' of the activity, what purpose does that serve?

Like 0

Like

1 comments

Dear Jordan,

The activity author or reporter is the user who initiates the activity. Just in case do not confuse it with the activity owner - this is the user who is responsible for performing it. As for the due date, this field indicates the time when the activity has to be finished. By default the field time is 30 minutes later than that indicated in Start field, since he value in the Due field should be greater than the value in the Start. Basically, those 30 minutes do not influence anything, you can select any time you need but it should be later that the activity start time. 

Best regards,

Dean

Show all comments