dashboards
7.14_()
sales

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
data import
excel
7.14_()
sales



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
sales
7.14_()
excel
reports
help
ExcelReportBuilder

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
7.14_()
sales

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
7.14_()
sales

Hi,

I have a custom section called "KYC". I have added a new button called "Add doc to SharePoint " in the section record page. When this button is clicked, it triggers a business process that opens up a preconfigured page. This page has a file control which is used to select a file from the local file system. It also has a "Save" button, the click of which calls a SharePoint API in the background to upload this document in SharePoint. I am able to make this work in the desktop website.

 Now, I need to implement this on the mobile app. Will this functionality work out of the box on the mobile without any changes? Or do I have to do a lot of customization to make this work on mobile? Appreciate all the help. Thanks in advance...

Like 1

Like

2 comments

Unfortunately, implementation of such functionality for mobile application requires a lot of advanced development within the system. This is due to the necessity of creating entire mobile functionality from scratch.

If you want to proceed with the development please find the mobile development guide by the link below:

https://academy.bpmonline.com/documents/technic-sdkmob/7-12/bpmonline-development-guide

 

Thank you for the reply, Alina! Could you give me a sense of the quantum of work involved, say to upload files through mobile? Is the file upload out of the box(OOTB) on Mobile? Going back to the use case that I have mentioned above, I am thinking if there is a way on the server to listen to any OOTB file upload event that occurs on the mobile and perform the sharepoint integration on the server? Please confirm. Also, in general, is the bpm'online mobile platform flexible and extensible to accommodate any kind of complex development or are there any restriction with the development that you can do?

Thanks again for all the help...

Show all comments

I'm getting the error "Uncaught TypeError: Cannot read property 'sort' of undefined" in the Dev Console when trying to access the Contacts section after making some basic modifications of the Contacts section page (adding a couple of fields, including a new lookup) which is preventing anything from loading for the Contacts section. Before adding these fields it was working fine.

 

I saw the article https://community.bpmonline.com/articles/uncaught-typeerror-cannot-read-property-sort-undefined for this error, but the resolution for it states it's due to an incorrect application deployment, which seems odd given the minor modifications made all through the wizard. The article also states it's for bpm'onine mobile, which I'm not using. Does anyone have a resolution/know the cause of this?

Like 0

Like

4 comments

Dear Harvey,

Try to run the same script described in the article. Since it affects both web and mobile versions, it should resolve your problem. If you are using cloud version of the application, try to install SQL console and run the script. The SQL console can be downloaded here https://marketplace.bpmonline.com/app/sql-executor-bpmonline

Best regards,

Dean

Dean Parrett,

Hi Dean,

Thanks for the reply - after posting the question I tried running the script but there was already a record with that Id in the table, so it failed based on the Id needing to be unique. I then tried copying that record out to a backup table, deleting the record from the SysLookup table, then running the script in the article (which then ran fine) but the problem persisted in the application. After checking it was still failing, I restored the record from the backup to avoid any unwanted changes.

I'm currently looking into deleting all config changes in the package to see if I can get the Contacts section to work (thankfully few in the package currently) but obviously this wouldn't be a good solution if there were more changes that would be lost! Is there anything else I could try before losing this config?

Thanks,

Harvey

Dear Harvey,

Thank you for the reply. 

If the script could not help and you already have the record with the same ID, I'd suggest you to contact our support team via support@bpmonline.com so that we could look into the issue in your particular environment and find the solution. I believe we might not be able to resolve the issue within the community thread without support team investigation.

Best regards,

Dean

Thanks Dean,

Interestingly exporting the package, deleting it, and then re-importing the package appears to have resolved the issue, but will contact support with this if it happens again.

Best Regards,

Harvey

Show all comments