Good day!

 

The report is generated in Word format.

Website version 7.18.5

Screenshot attached

 

In one of our tables, we have several products linked to a specific Id. Each product is associated with its unique point of inclusion address. The product names are successfully pulled and correctly displayed in the report table - each name in a separate line, which fully meets our requirements. We set this up through the table part report settings.

 

The problem arises with the addresses of the points of inclusion, the values for which we obtain using a macro. In the current configuration, all addresses for the three products are collected and displayed in one line of the table, instead of being located in the corresponding lines opposite each product.

 

Question:

Could you advise on how we might modify the macro or the process of its operation so that the addresses of the points of inclusion are placed in separate cells of the table in accordance with each product?

File attachments
Like 0

Like

1 comments

Hello,

 

Could you please provide us with an example of the macro you are using?

Please provide the table settings, and also take a screenshot of how this table looks specifically in the printable template in word plugin.

Show all comments

Hi, 

 

is there a code, script or library or a workaround in freedom UI (not classic) to do a dropdown list with multi select (I am using the new Version: Quantum) 

Like 1

Like

1 comments

Hi all,

 

How would one add a boolean type static filter to a section (similar to the Active flag in the Process Library)?

 





I have a field called UsrActive in my section and I'd like to have this filter applied by default.

 

Nb. I'm not currently using Freedom sections.

Like 0

Like

1 comments
Best reply

Hello,

 

In order to implement such logic in the Classic UI additional development is needed. You may refer to the below post for an example of similar implementation:

https://community.creatio.com/questions/please-help-how-add-custom-filt…

 

Best regards,

Anastasiia

Hello,

 

In order to implement such logic in the Classic UI additional development is needed. You may refer to the below post for an example of similar implementation:

https://community.creatio.com/questions/please-help-how-add-custom-filt…

 

Best regards,

Anastasiia

Show all comments

Dear colleagues,

 

I'm having a problem running my Creatio local environment when use PostgreSQL.

 

When start the app, I'm getting this error Exception Details: Npgsql.PostgresException: 28000: no hay una l�nea en pg_hba.conf para �fe80::1c5:206f:bef4:e3e9%13�, usuario �dev-toledano�, base de datos �Toledano8010�, sin cifrado

 

I have app and db in the same machine.

 

I saw I need to change the pg_hba.conf file, I did it, but get the same error. This is my file

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 
#host all all 0.0.0.0/0 trust
 
# "local" is for Unix domain socket connections only
local   all             all                                     trust
#scram-sha-256
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

And my ConnectionStrings.config file looks like

<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
  <add name="db" connectionString="Server=NoCodeServicesT;Port=5432;Database=Toledano8010;User ID=dev-toledano;password=dev-toledano;Timeout=500; CommandTimeout=400;MaxPoolSize=1024;" />
  <add name="redis" connectionString="host=localhost; db=2; port=6379" />
  <add name="defPackagesWorkingCopyPath" connectionString="%TEMP%\%APPLICATION%\%APPPOOLIDENTITY%\%WORKSPACE%\TerrasoftPackages" />
  <add name="tempDirectoryPath" connectionString="%TEMP%\%APPLICATION%\%APPPOOLIDENTITY%\%WORKSPACE%\" />
  <add name="sourceControlAuthPath" connectionString="%TEMP%\%APPLICATION%\%APPPOOLIDENTITY%\%WORKSPACE%\Svn" />
  <add name="elasticsearchCredentials" connectionString="User=gs-es; Password=DEQpJMfKqUVTWg9wYVgi;" />
  <add name="influx" connectionString="url=http://10.0.7.161:30359; user=; password=; batchIntervalMs=5000" />
  <add name="messageBroker" connectionString="amqp://guest:guest@localhost/BPMonlineSolution" />
</connectionStrings>

Somebody have some idea?

 

I never worked with PostgreSQL before 

 

Thanks in advance,

 

Best regards

Like 0

Like

2 comments
local   all             postgres                                peer
 
# TYPE  DATABASE        USER            ADDRESS                 METHOD
 
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
host all all 10.0.0.0/24 trust

Here is Mine, maybe you need an "Host all all  "  and your local subnet?

Hello,

 

Here are some recommendations:

  1. Update your pg_hba.conf file with the following content:

local all all trust

host all all 127.0.0.1/32 trust

host all all ::1/128 trust

 

  1. Verify that your connection string in the ConnectionStrings.config file is accurate, including the Server, Port, Database, User ID, and Password settings.

  2. Restart PostgreSQL after updating pg_hba.conf using the command: sudo service postgresql restart.

  3. Test your connection to ensure the error is resolved.

Show all comments

Hello Everyone,

I have a progress bar that changes its status based on approval status. However, it requires a manual page refresh to reflect the changes in the progress bar. To address this, I've added a refresh button. Now, I want this button to trigger automatically whenever the progress bar status changes. Can anyone provide guidance on how I can achieve this using a custom handler?

Currently, I've written this code with the assumption that the record is saved whenever the status changes.

    {

    request: "crt.SaveRecordRequest",

    handler: async (request, next) => {

        const schemaName = "UsrNewProductsOnboardingformpage";  

        const buttonId = "Button_qef55yg";

        const button = request.$record.$Model[schemaName].$Buttons[buttonId];

        if (button) {

            button.instance.execute();

            console.log("Button clicked");

        } else {

            console.log("Button not found");

        }

        return next?.handle(request);

    }

}

Like 1

Like

4 comments

Have you tried turning on "Enable Live Data Update" for the object? Turning that on should make it refresh automatically when the data changes with no code. 

See https://customerfx.com/article/automatically-refreshing-a-creatio-freed…

Alternatively, you could add code to refresh the page: https://customerfx.com/article/refreshing-reloading-page-or-list-data-o…

Ryan

Ryan Farley,

Hi Ryan,

I tried enabling "Live Data Updates" for the object, but it still didn't work out. Will try the alternate approach to see if it's work.



Thanks 

 

Abhishek,

 

Hello,

 

Try this handler in the page (don't forget to add creatio-devkit/common to  your page schema (example define("UsrTest_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"]/**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {):

{
				request: "crt.ApprovalActionHandlerRequest",
				handler: async (request, next) =&gt; {
					const result = await next?.handle(request);
					const handlerChain = sdk.HandlerChainService.instance;
					await handlerChain.process({
						$context: request.$context,
						type: 'crt.LoadDataRequest',
							config: {
								"loadType": "reload",
								"useLastLoadParameters": true
							},
							"dataSourceName": "PDS"
					});
				}
			}

Worked correctly in my demo.

Oleg Drobina,

Hello,

I tried, but it didn't work, nor did it even trigger after the changes. Do I need to change the request from "crt.ApprovalActionHandlerRequest" to any other request?

Show all comments

Dear Colleagues,

 

Is anyway possible to "extract" or move a custom package I did (my error) in the production environment of a customer.

 

I need to move it on my local dev environment to improve it and later to install on test & later in production?

 

Thanks in advance

 

Best regards

Julio Falcon

Like 0

Like

1 comments

Greetings,



Please take note that it is not possible and we highly do not recommend exporting the "Custom" package itself.

If you would like to migrate basic objects and schemas from the "Custom" package - it is best to create a separate new package, copy all the "Custom" objects and schemas into the new one and furthermore use it for customization and exporting functionality.

Show all comments

Hello community,

 

I want to add data inside a section with the OData interface. I've already checked the documentation at https://documenter.getpostman.com/view/10204500/SztHX5Qb?version=latest and https://academy.creatio.com/docs/developer/integrations_and_api/data_se… but I have the following problem:



I am using a simple Python script to make the API requests in these steps:

 

1. Authenticate in the website using the Authentication method

This works nice using the credentials as payload inside the request.

 

2. Extract the cookie returned inside the header response.

From the test I've made, I need to extract the cookie parts UserName, BPMCSRF, .ASPXAUTH, BPMLOADER and append all of them inside a "Cookie" header like this example:

 

"Cookie: BPMLOADER=; UserType=General; UserName=; .ASPXAUTH=; BPMCSRF=;"

 

Everywhere I've checked inside the documentation it says that it is enough using a header called BPMCSRF with that value from the Set-Cookie response header, but in my case it fails using that value and I have to build the Cookie myself with the different values specified above.

 

3. Perform a POST request to a section like https://mycreatio.com/0/odata/Case

Here the request fails and I get an error 403 - Forbidden with the following message:

 

403 - Forbidden: Access is denied.

You do not have permission to view this directory or page using the credentials that you supplied.

 

And I don't understand why Creatio returns that error, because if I try doing a GET request to the same URL it returns the full list without any problem, but performing a POST request using the same cookie structure inside the headers doesn't return the expected inserted register.

 

Thanks in advance in for your help.

 

Regards.

Like 0

Like

3 comments

Just to clarify, in theory the issue is not related to user permissions as I have tried to insert registers with multiple users (one of them being Supervisor) and in multiple sections, but I always get the same error.

 

P.D. I am using OData 4

Hello Alejandro!

 

For correct requests, you need to use all cookies not "only a part". Also "BPMCSRF" must be used in cookies and as a separate parameter in the header as mentioned in the example here Creatio API (getpostman.com).

Please try and test it with the corresponding changes.

Hello Kyrylo,

 

Thank you very much for your help. In my case the problem was only with that "BPMCSRF" header that I was not building properly, for the cookie values that I have to pass inside the "Cookie" header I tried passing ALL the values extracted from the response header "Set-Cookie" but it didn't let me authenticate, so the solution that works for me is creating a cookie manually with only the values  UserName, UserType, BPMCSRF, .ASPXAUTH, BPMLOADER that I mentioned before.

 

The POST requests are working flawlessly now. I will try now to upload files using OData following the documentation and I would highly appreciate if you are able to help me again if I have trouble.

 

Thank you very much.

Show all comments

Hello community,

 

I want to get the attached files information from a given case inside my environment. As the primary section containing the information is case, I know that I can retrieve the case information from 

 

https://mycreatio.com/0/odata/Case

 

And the attached files can be extracted from 

 

https://mycreatio.com/0/odata/CaseFile

 

Where each element from the response has the format:

{
  "Id": "7bb283a4-2f30-7193-37f3-79c8465ceda4",
  "Name": "<value>",
  "CreatedOn": "<value>",
  "CreatedById": "<value>",
  "ModifiedOn": "<value>",
  "ModifiedById": "<value>",
  "ProcessListeners": 0,
  ...
  "Size": <value>,
  "CaseId": "<value>",
  "IsNeedToNotify": true,
  "SysFileStorageId": "<value>",
  "FileGroupId": "<value>",
  "Tag": "<value>"
},

As you may see there is a field "CaseId" which is used to link the file object to the case object.

 

The problem I have is that I want to get the list of files from a case only by the Case Id. I've tried many different approaches using the OData standard syntax like:

 

'">https://mycreatio.com/0/odata/CaseFile?$filter=CaseId eq '<value>'

 

But I always get an error when trying to access the resource. In the previous example, the error I get is related to the field data type. Creatio yells because the CaseId field is of type Guid but in the comparison I am using a string.

 

By the way, changing the query to:

 

'">https://mycreatio.com/0/odata/CaseFile?$filter=CaseId eq guid'<value>'

 

or

 

'">https://mycreatio.com/0/odata/CaseFile?$filter=CaseId eq <value>

 

Doesn't fix the issue.

 

Can you please help me with this query that I am struggling to do?

 

Regards

Like 0

Like

1 comments
Best reply

Rather than using CaseId, use Case/Id:

https://mycreatio.com/0/odata/CaseFile?$filter=Case/Id eq idvalue

Ryan

Rather than using CaseId, use Case/Id:

https://mycreatio.com/0/odata/CaseFile?$filter=Case/Id eq idvalue

Ryan

Show all comments

Hello Community, 

 

is there a script or tool in creatio that convert hierarchy of records like employees/department into an organization chart. 

Like 0

Like

2 comments

I can't give you a solution (you could try the Marketplace), however some C# I wrote recently to traverse the employee tree using the employee `ManagerId` which may be of use as a starting point (it returns a list of all staff subordinate to the starting employee):

using Terrasoft.Configuration;
using Terrasoft.Core;
using Terrasoft.Core.DB;
 
using System;
using System.Data;
using System.Collections.Generic;
 
namespace Terrasoft.Configuration.UsrEmployeeTree
{
	public class EmployeeTree
	{
		private UserConnection UserConnection;
		private Guid employeeId;
 
		public EmployeeTree(UserConnection userConnection) {
			UserConnection = userConnection;
		}
 
		public void TraverseTree(Guid employeeId, List&lt;Guid&gt; staff) {
			staff.Add(employeeId);
 
			var select = new Select(UserConnection)
					.Column("Id")
				.From("Employee")
				.Where("ManagerId").IsEqual(Column.Parameter(employeeId))
					as Select;
 
			using (DBExecutor dbExecutor = UserConnection.EnsureDBConnection()) {
				using (IDataReader dataReader = select.ExecuteReader(dbExecutor)) {
					while (dataReader.Read()) {
						TraverseTree(dataReader.GetGuid(dataReader.GetOrdinal("Id")), staff);
					}
					dataReader.Close();
				}
				dbExecutor.Close();
			}
		}
	}
}

 

impressive, will try it out 

Show all comments

Hi Community,

Creatio makes an automatic actualization of the Age of a Contacts every day.

I want to capture the event when the Age of a Contact changes(is Modified) and utilize it inside a Business Process.

Is this possible ?

Sasori

Like 0

Like

4 comments

Hi Community,

Any update regarding the topic ?

Hi Sasori , 

Could you please elaborate a bit on your business task? 

The age is updated every day at a certain time, by the OOTB logic. 

It's not entirely clear what logic you'd like to utilize in your business process.



Looking forward to your response. 

Yuri

Hi Yurii,

This is the scenario.

 

Scenario:

From the OOTB feataure of age actualization , lets say that the age of a contact on his birthday is updated from 48 to 49 years old.

Question:

Can we capture this automatic change of the age and initiate a Bussiness Process out of it. Se we want a business process to be triggered when Age of contact is 49 years old.

 

Can this be achieved ?

Saspri

Hi Yurii,

Any Update regarding this topic ?

Sasori

Show all comments