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 && 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 && profile.DataGrid && 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,

Within the marketing module the Events section allows the Audience list to be managed.

I would like to update the Response in Events lookup field to contain more selection options, but I cannot find this in the Lookups section.

 

Can anyone give me guidance on where I can update this lookup please.

Like 0

Like

2 comments

Dear Mark,

You can add this lookup manually by using "new lookup" button. The object is called "Response in events"

Many thanks, this worked

I was not aware that you needed to do this to add an Lookup list to the Lookup management screen.

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
Question

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 am customizing the Cases and I would like to have only assignees that are part of the assignment group. How is it feasible ?

Like 0

Like

1 comments

Dear Lehmann,

There is no out of the box functionality that would allow to filter assignee values lookup. However, it can be achieved with the development tools. Here is the example:

1. Create a new object and use it as a source for a new lookup. The object should contain information about the lookup values that should be visible for user groups.  

https://academy.bpmonline.com/documents/technic-sdk/7-12/creating-entity-schema?document=

https://academy.bpmonline.com/documents/administration/7-13/creating-and-registering-lookups

2. Build a filter on the lookup. 

Here is the community post 

https://community.bpmonline.com/questions/lookup-field-filter

The filter should represent the query. Here is the example:

select *

from lookup l

join LinkTable lt on lt.lId = l.Id

join SysAdminUnitInRole sau on sau.SysAdminRoleId = lt.RoleId

where sau.SysAdminUniId = CurrentUserId

If the filter doesn't work you can try to catch the request with sql server profiler and debug the functionality. 

More details on how to create complex queries for filters can be found here:

https://academy.bpmonline.com/documents/technic-sdk/7-13/entityschemaquery

Best regards,

Dean

Show all comments

Hi,

Like object,schemas, can dashboards be a part of package. so that if the package extracted and installed to other link, will the dashboard changes appear?

As per the below link , people said this is possible. but I tried. only schema changes are copied, dashboard changes are not appearing.

https://community.bpmonline.com/questions/packaging-dashboard

If there is a way to get dashboard changes to package, please suggest.

Regards,

Sriraksha

Like 0

Like

1 comments

Hello!

The data for dashboards is stored in the SysDashboards for dashboards on analytics and SysWidgetDashboard for dashboards in the section pages. You can transfer this data using data bindings or on the DB level (merge for existing on the target instance and insert for non-existing). Data for filters, folders and column setup is stored in the SysProfileData. You can transfer it similarly to the dashboard's data. 

Please check if you've transferred data with correct binding.

Best regards,

Anastasia

Show all comments

Hi members.

We have a requirement with our Pharma client to capture the signatures of Customer once a medicine/ sample is delivered. 

Saw this integration framework from bpm'online - 'https://marketplace.bpmonline.com/app/e-signature-integration-framework

But this will not suffice our requirement as we do not have an app already developed for that . 

Could you help us figure out the solution for this . 

Does bpm'online has any such marketplace app?

Like 0

Like

1 comments

Dear Shailey, 

You can try another marketplace app: 

https://marketplace.bpmonline.com/app/adobesign-connector-bpmonline

It looks like it performs similar tasks to the one you've mentioned.

Best regards,

Dennis  

Show all comments
Question

I am trying to replace the bpm'online section icons with branded ones. 

I see that with most you navigate to View > Open Section Wizard and replace the image. However, some sections do not have the View dropdown. How do I change the icon for these? 

Also, I am replacing them with a PNG of the new icon, but it is not working or showing up as a big white block. Do I need to upload it in a certain format? 

Thanks. 

Like 0

Like

3 comments

Dear Collette,

Could you please name the sections that doesn't not have View option? Are you talking about Dashboards section? 

As for the images, we recommend using a white icon on a transparent background. Image format - PNG or SVG, size - 38x38 px.

Looking forward to your reply.

Dean

Dean Parrett,

 

Thanks, PNG wasn't working for me but SVG is. 

Yes, I am talking about the dashboard section as well as agent desktop & feed. I can find their section wizard by going through Workplace Setup, but get this error when trying to access it: 

Hi,

I need update dashboard section's icon, too.

Show all comments

I have created a custom [Connected entity profile] on the accounts section that is a duplicate of the primary contact connected entity, except the text displays: Billing Contact:

 

I have followed the following academy article to do so: https://academy.bpmonline.com/documents/technic-sdk/7-13/connected-entity-profile-control

 

But am unable to set the default image ?? (I.e. I want the billing contact to have the same icon as the primary contact when an entity is not yet selected for the field ...):

 

 

Like 0

Like

1 comments

Please feel free to set any default image in the configuration section. In order to do it open the billing profile schema and upload the needed image in the BlankSlateIcon property. Save the schema and clean the cashe.

Show all comments

I have a detail referencing the Contacts section, that is an editable list detail:

Am I able to make the Contact lookup appear as a link on this view? That is, as link to the linked Contact record.

 

The list view preview shows the Contact as a link:

But not when I view the detail on the linked section??

Like 0

Like

2 comments

Dear Lauren,

You can try to transform the lookup field into hyperlink by referring to this article https://community.bpmonline.com/articles/how-make-url-string-field-clickable-hyperlink

Best regards,

Dean

Hi Dean,

The link needs to be the connected lookup record ... How would I reference this as a link?

Show all comments