Hello,



I am currently trying to edit an account info page and am running into an issue. I want to create a field with options in a dropdown format, but so far, I have not seen any way of doing so. 



Is this something I did not see in the documentation, or will I need to use the booleans to ensure my users can select their needed options?



Any help is appreciated. I appreciate any help you can provide.

Like 0

Like

1 comments

Hello,

In the context of Classic UI, the Lookup view is configured on the page editing page. By selecting the "List" parameter, this lookup will be displayed as a drop-down list.

Regarding configuring this option for a detail with an editable register, currently, this can be implemented using development methods. More details are described in another post on the Community:



https://community.creatio.com/articles/displaying-columns-editable-reco…



Thank you for contacting us!

Show all comments

Hello Community,

I am a new bee with here and not much familiar with Creatio Studio as well. I have created a demo environment of creatio studio from downloadable. I created a new application where I am creating a list and detail page. 

The issues I am facing are:

  • The list view page shows that its continuously loading, because of which I am not able to hide or create a new column which is obvious.
  • on the Form page when I try to save my form elements/objects It is showing an error as Failed to update the structure for following schema and the schemas are my form objects which I am trying to save.
  • I found one solution on the community here that by updating the objects showing error on Workspace explorer page (System designer->advanced settings->configuration. I see my objects showing error in the status column. I did try updating the DB objects from there but showing the DB error. I think the above issue and this one is related and due to the same reason(Screen shot2)
  •  When I try to compile all in configuration, I get an error. (screenshot 3) I tried uninstalling and reinstalling the SDKs(The solution again I found here) but it doesn't seem to be working for my case.

I really Appreciate if someone could help me to figure this out.

Thanks

File attachments
Like 0

Like

1 comments

Hello,

 

I've reviewed the screenshot shared and to understand what happens with the object the actual error message from the SQL server logs should be shared. If this is MS SQL you need to take a look at the extended evens logs, if this is PostgreSQL - find the logs using this article. In the SQL server logs there will be an actual database query that fails to execute. Try executing it manually in the database and let's see which error message we face.

Show all comments

Hi everyone,

 

I have just created a multi-select text field on Classic UI but I am trying to implement the same code within Freedom UI and it is not working. Any idea why, Does Freedom UI not support such feature? I am using the 3rd party for multi-select from Creatio Marketplace

Like 0

Like

4 comments
Best reply

Not yet supported in Freedom UI. 

Ryan

Not yet supported in Freedom UI. 

Ryan

The need for multiselect lookup is immense in our current project. Is there anyway to go about this or do we have to build our own component?

Shivani Lakshman,

In version 8.1 lookups now have the ability to do multi select.

Ryan

in the new version 8.2.1 Energy of creatio you can now use the multiselect lookup

Show all comments

Hi Everyone,

 

I am still learning Creatio and have a simple issue. While making order requests, I want to add multiple contacts to my orders. There is no predefined number of contacts. It could vary from order to order. What would be the best way to have this in creatio? I was thinking of having a button that creates a new Dropdown field in which users can select a contact. And every time he clicks on the button, it creates a new field. Is that possible? or is there any other and better way to do this?

 

I have also tried an expanded List but that just displays all contacts. I don't want it to show them all. I want some kind of selection etc.

Like 1

Like

4 comments

Hello Hassan,

 

Could you please provide the screenshots? It will help for a better understanding of your question.

Mariia Sorochan,

Hi Mariia,



Sadly, I dont have a screenshot I am just looking for guidance on how to make it. In my orders, I want it to show a list of employees to which this particular order will be assigned. It should be some kind of selection in which I can select multiple employees and because later on, I also want to trigger a Whatsapp or Mobile message to them that the order has been assigned to them. Thanks!

Thank you for the details. Maybe you mean the section "Owner"?

Mariia Sorochan,

No Owner is different. He is the one that's making the entry into creatio. These are the general employees of the company to whom we are assign these orders. Let me give you the scenario. We have orders in our system. These orders are assigned to multiple people. They are not the user of Creatio platform. They are junior employees that pick those order and confirm with us

Show all comments

Hi, 

I'm looking for some guidance on setting up a process.

 

I want the process to run once per week, reading all Activities where the start date is <= Yesterday and the field (Result) is not filled in. 

Then I want the process to send 1 E-mail to the organiser listing the records that need the results field completing. 

 

I'm  relatively new to processes and sub processes so any guidance would be really appreciated.

 

Like 0

Like

1 comments

Hello Tom,

 

You can design your business process to run once a week with a help of "[Start timer] event" element, more detailed information is available on our Academy:

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

 

Best regards,

Anastasiia

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

I try to run the script task in a business process to create a printable. If the business process is started by user, it'll work just fine, but when the process is started by another process or an event it'll break with an exception:

System.NullReferenceException: Object reference not set to an instance of an object.

   at Terrasoft.Configuration.ReportService.ReportService.GetSchemaNameByTemplateId(Guid templateId)

   at Terrasoft.Configuration.ReportService.ReportService.GenerateMSWordReport(String urlTemplateId, String urlRecordUId, Boolean convertInPDF)

   at Terrasoft.Core.Process.ProcessInvoiceAutoSendCustom1Custom21Custom2MethodsWrapper.ScriptTask2Execute(ProcessExecutingContext context)

   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

The script task is like this:

var PrintableId = Get<string>("PrintableId2");
var ObjectIdInvoice = Get<string>("ObjectIdInvoice1");
var ConvertToPdf = Get<bool>("ConvertToPdf");
var AddInvoiceId = Get<Guid>("AddInvoiceId");
var AttachmentType = Get<Guid>("AttachmentType");
 
var userConnection = Get<UserConnection>("UserConnection");
 
var reportService = new Terrasoft.Configuration.ReportService.ReportService();
Terrasoft.Configuration.ReportService.ReportData report = reportService.GenerateMSWordReport(
    PrintableId, ObjectIdInvoice, ConvertToPdf);
var entity = userConnection.EntitySchemaManager.GetInstanceByName("InvoiceFile");
var fileEntity = entity.CreateEntity(UserConnection);
fileEntity.SetDefColumnValues();
fileEntity.SetColumnValue("InvoiceId", AddInvoiceId);
fileEntity.SetColumnValue("TypeId", AttachmentType);
fileEntity.SetColumnValue("Name", "Invoice.pdf");
fileEntity.SetColumnValue("Data", report.Data);
fileEntity.Save();
return true;

I guess ReportService doesn't obtain UserConnection from Supervisor user, so it can't get instance of "InvoiceFile". Is that the case?

How to change the script to make ReportService work with Supervisor or maybe with UserConnection of another user?

Like 0

Like

3 comments

In a script task in an interpretive business process you need to get "user connection"  with the following syntax:

var userConnection = Get<UserConnection>("UserConnection");

Additionally, please note that if you want to work with process parameters in a script task, you need to write in the following manner:

var parameter1 = Get<Guid>("Parameter1");

Set("Parameter2", parameter1.ToString());

var parameter2 = Get<string>("Parameter2");



Also, from exception message it seems that desired template not exists in the system, so you should check it.

I have a similar requirement to send report automatically to users at a certain frequency. We use Creatio 7.18.5 and the report was built using the old ReportDesigner for 7.14 and was carried over to the new version when we upgraded. 

I tried to follow this article to create the report as part of our process - https://community.creatio.com/articles/generate-printable-and-send-it-attachment-email

When the process is manually run by the user, the report gets generated. But when scheduled to run by Supervisor using timer, it gives below error - 

Terrasoft.Core.InstanceActivationException: Error creating an instance of the "Terrasoft.Tools.DevExpressReport.IReportProvider" class ---&gt; Ninject.ActivationException: Error activating UserConnection using binding from UserConnection to method
Provider returned null.
Activation path:
  3) Injection of dependency UserConnection into parameter userConnection of constructor of type DevExpressConfReportLocalizationReader
  2) Injection of dependency IDevExpressReportLocalizationReader into parameter reportLocalizationReader of constructor of type ConfigurationDevExpressReportProvider
  1) Request for IReportProvider
 
Suggestions:
  1) Ensure that the provider handles creation requests properly.
 
   at Ninject.Activation.Context.ResolveInternal(Object scope)
   at Ninject.Activation.Context.Resolve()
   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
   at Ninject.Activation.Context.ResolveInternal(Object scope)
   at Ninject.Activation.Context.Resolve()
   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at Ninject.Activation.Providers.StandardProvider.Create(IContext context)
   at Ninject.Activation.Context.ResolveInternal(Object scope)
   at Ninject.Activation.Context.Resolve()
   at Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
   at Terrasoft.Core.Factories.ClassFactory.GetInstance[T](Func`1 action)
   --- End of inner exception stack trace ---
   at Terrasoft.Core.Factories.ClassFactory.GetInstance[T](Func`1 action)
   at Terrasoft.Configuration.DevExpressReportGenerator.Generate(UserConnection userConnection, ReportGeneratorConfiguration configuration)
   at Terrasoft.Core.Process.TAIAutoSendOrderLogSummaryMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.ExecuteItem(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Below is the report generation part of the code -  

//ReportService reportService = new ReportService(userConnection);
//ReportData report = reportService.GenerateDevExpressReport(entitySchemaUId,reportSchemaUId,null,reportParamaters);
 
DevExpressReportGenerator reportGenerator = new DevExpressReportGenerator();
var configuration = new ReportGeneratorConfiguration {
				ReportTemplateId = !string.IsNullOrEmpty(reportSchemaUId) ? new Guid(reportSchemaUId) : Guid.Empty,
				EntitySchemaUId = !string.IsNullOrEmpty(entitySchemaUId) ? new Guid(entitySchemaUId) : Guid.Empty,
				RecordId = !string.IsNullOrEmpty(recordId) ? new Guid(recordId) : Guid.Empty,
				ReportParameters = !string.IsNullOrEmpty(reportParameters)
					? JsonConvert.DeserializeObject&lt;Dictionary&lt;string, object&gt;&gt;(reportParameters)
					: null
			};
ReportData report = reportGenerator.Generate(userConnection, configuration);

I understand it's an old version of the report but I would appreciate if anyone can provide any insights on what I'm missing.

Hello Nirupama, Can you check if the run elements in the background is disabled ? If that is enabled, then the process will not get the User Connection.

Show all comments

NOTE: I though I already sent out a post on this but I think it may have filed to go through due to internet connection issues. So I'm posting the topic again.

Hello, I am trying to get another local development environment working on my machine. I followed the instructions and got to the point that the login page is being displayed, but when I input the Supervisor password and username I get taken to the browsers too many redirects error page.

What could be causing this?

Like 0

Like

6 comments

Dear Nick,

Please recheck the login that you are using, because there is a problem in bpm'online so if there are empty spaces after login or if there are special symbols in the login (like ę or e~), the system couldn't read them and can result in the page with the information on too many redirects.

Best regards,

Oscar

Dear Nick,

Please also check if your Redis is the latest version, because there can be a problem with logging if you are using Redis 2.4.6 for example.

Best regards,

Oscar

Oscar Dylan,

Hi, thanks for responding. My redis version seems to be 2.4.6. What version should I be using? The latest is 5.

 

Nick

Also, if I replace 2.6 with 5 will I need to re-setup he Redis or can I simply just install to the same folder and it will work?\

Thanks

Nick

Dear Nick,

You'll need to install the latest version of Redis that is 5.0.0 and use it from now on. It should work right after installation, but you'll need to re-setup Redis in order to work with the new version.



Regards,

Oscar

Okay, I installed a more recent version of Redis and that is now working. Thanks.

Show all comments