I have locally installed the creatio environment + downloaded the zip archive and setup the email service

 

Install and run Email Listener:

  1. Open the directory to deploy Email Listener on the server dedicated for the service.
  2. Download and unpack the archive that contains the setup files to the directory. Download the archive.
  3. Open the / Creatio Email Listener component directory and run the following command:

docker-compose up -d

 

Executed the above command. I was able to add the email account + other configuration but when I run the diagnostics,  I do face the error as attached, how to resolve it?

 

I tried checking the Email Listener log 

 

2023-12-14 19:18:46,098 [105] WARN NT AUTHORITY\SYSTEM Warn - mailbox account@gmail.com synchronization settings not valid

 

I also do not see any email listed in the notification icon -> Mail.

 

Creatio is able to successfully send Creatio test message email from the diagnostic page.

 

 

2023-12-14 19:13:46,080 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - ListenerServiceFailHandler started

2023-12-14 19:13:46,080 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - ExchangeListenerManager created

2023-12-14 19:13:46,097 [106] WARN NT AUTHORITY\SYSTEM Warn - mailbox account@gmail.com synchronization settings not valid

2023-12-14 19:13:46,097 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - Events subscription for 882c1561-***-****-****-******** mailbox created

2023-12-14 19:13:46,097 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - Failover synchronization of account@gmail.com started

2023-12-14 19:13:46,097 [106] WARN NT AUTHORITY\SYSTEM Warn - mailbox account@gmail.com synchronization settings not valid

2023-12-14 19:13:46,097 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - Failover synchronization of account@gmail.com initialization ended

2023-12-14 19:13:46,097 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - Email synchronization process for 882c1561-***-****-****-******** mailbox created

2023-12-14 19:13:46,097 [106] DEBUG NT AUTHORITY\SYSTEM DebugFormat - ListenerServiceFailHandler ended

File attachments
Like 0

Like

1 comments

Hello,

 

I kindly request your attention to a post where a similar issue was discussed.



https://community.creatio.com/questions/exchange-listeners-806



 It is also crucial to ensure that the release version of the microservice is being used (Please note that to deploy a new version of the microservice, you need to contact Creatio technical support to grant you access to the repository).

 

Regarding the warning "mailbox account@gmail.com synchronization settings not valid," please check that the needed folders are chosen during folder synchronization. (in case you are syncing mails from the folders)



Try stopping the mailbox synchronization in the mailbox settings and restart it by reconfiguring the synchronization parameters.

 

Such issues may arise due to the specifics of deploying the local environment and may depend on other factors.

 

The best way to ensure that everything is configured correctly is to send an email from the system.

If emails are sent and synchronized successfully, you can ignore the error as it is not related to the email sending functionality.

 

Best regards,

Pavlo!

Show all comments

Hi Community!

 

I need to display existing documents from other sections together with the directly attached documents in FreedomUI 8.1.

 

The attachments are stored in the table "SysFile", which has a column called "TypeId". That lookup has the values "File" (default), "Link" and "Link to object".

 

I have tried to tinker around with the database of my on-premise dev environment. While I could manage to display inserted documents of type "Link", they won't open because the SysFile-table has no columns for referencing other documents.

 

There is also a table called "FileLink", which looks promising because it has the columns "FileSchemaName", "FileRecordId", "RecordSchemaName", "RecordId". That would be enough to link existing documents to various records, but the don't show up in the FreedomUi AttachmentList component.

 

Did anyone already manage to do this without duplicating documents?

 

Any help is much appreciated, thanks!

Robert

Like 2

Like

1 comments

Hi Robert!

 

Unfortunately, displaying the various sections' attachments together in one attachment component is impossible. However, you can use a separate attachment component for each section.

 

To implement this, we recommend the following steps:

1.  Open the Page Designer.

2.  For each section that you would like to display the attachments from:

- add the dropdown field, specifying this section as “Lookup” in the field’s general settings (or make sure that such a dropdown field already exists);

- add the attachment component.

3. In each added attachment component, set “Record to attach files” (general settings) to a value from the previously added dropdown field and “File storage location” (advanced settings) to the corresponding table.

 

After you choose the exact records in the dropdown fields, they will be linked to the current record, and you will see their attachments in the corresponding components. It will help you to avoid duplicating documents.

 

Best regards,

Natalia

Show all comments

Please help.

I created an object called UsrAppMobNotifications, which includes a Boolean variable UsrBoolRead. In the mobile application version 8.1, I need to set up a business rule so that when a user opens a record of this object, the UsrBoolRead variable becomes true.

 

The code of the mobile app's record page (UsrMobileUsrAppMobNotificationsRecordPageSettingsPortal) doesn't contain any blocks (like handlers).

Question 1: How can I add my own business rule?

Question 2: I tried to create a rule based on examples, but it doesn't work.



My rule^

Terrasoft.sdk.Model.addBusinessRule("UsrAppMobNotifications", {

name: "SetUsrBoolReadTrueRule",

ruleType: Terrasoft.RuleTypes.Custom,

events: [Terrasoft.BusinessRuleEvents.Load],

executeFn: function(model, rule, column, customData, callbackConfig) {

model.set("UsrBoolRead", true);

Ext.callback(callbackConfig.success, callbackConfig.scope);

}

});

Like 0

Like

1 comments

Hello.

Please be advised that adding business rules to a page using the Terrasoft.sdk.Model.addBusinessRule(name, config) method is only supported on the old user interface. Unfortunately, the feature to create business rules on the mobile application is not yet available, as it is currently under development. However, I can assist you in setting up card-level business rules, that might be helpful for you.

At the moment, the difference between the rules on the card and the model is insignificant. Namely, the difference is that the card has Visibility rules that can show or hide card elements. Therefore, let's consider this particular example, and try to hide a column under a condition.

1. Set up the rules in the web.

2. The names of the controls ("Code" and "Element code") must be given according to the names of the columns. That is, if the column is called UsrText, then the control should be called that way (because the names are generated by the web by default):

3. The rule that hides the UsrText field can be configured as follows:

When saving, do not forget to click Save in the card itself.

4. Add a new (or existing) section in the mobile application wizard and configure the card properly.

5. Go to the Configuration (WorkspaceExplorer) and look for the card setup scheme (scheme name format: Mobile[Object name]RecordPageSettings[Workspace name]):

In this case, the object name is Rules.

6. Open this schema. Open its metadata (Actions → Open metadata) and look at its metadata (Metadata (Read-Only) section) and copy its Uid, PackageUid and CreatedInPackageUId.



7. Export the rules configured in step 3.

8. This metadata needs to be slightly adapted to the mobile platform. Open the downloaded metadata file and make the following changes:

а) Change the Uid. You can either generate it or simply change a few digits/characters in the current value. The old UId must be changed throughout the scheme (at least 2).

b) Give a new name to the Addon in Name and A2. The format will be as follows: [Object name]RecordPageSettingsBusinessRule (for example, RulesRecordPageSettingsBusinessRule).

c) Replace all "EntitySchemaManager" with "ClientUnitSchemaManager", if any.

d) In B6, write the PackageUId from step 6.

e) In AD1 and TargetSchemaUId, write the UId from step 6.

f) In A5 we write the CreatedInPackageUId from step 6.

g) Replace all the names of the controls generated on the web with the corresponding column names. You can search for them using the following masks: LookupAttribute_, Input_, ComboBox_.

For example, instead of LookupAttribute_6wy705z, you should use UsrContactType.

h) Save the changes.

9. Import this modified schema. Select the desired package in the Configuration, click "Add" and select the "Import" item in the list (at the moment it is the last in the list).

As a result, in the package in which this section was added in the mobile application wizard, an Addon scheme with rules that are linked to the card configuration scheme in the mobile application should appear.

10. After that, synchronize the mobile app with Creatio and check the rule's operation.

Show all comments

Dear,

On our development environment we are having the following error when we try to run compilation:

Compilation errors

File name: OrderSchema.Custom.cs

Code CS1061 - Line 1727

'IEnumerable<EntityColumnValue>' does not contain a definition for 'Any' and no accessible extension method 'Any' accepting a first argument of type 'IEnumerable<EntityColumnValue>' could be found (are you missing a using directive or an assembly reference?)

We tryed to restore Order and OrderPageV2 from the prod

Recompile all environment

Clear Redis and restart application

I can figure where from is this error coming...

Thank you for help !

Nicolas

Like 0

Like

8 comments
Best reply

Hello,

Yes, indeed, in this case, it is necessary to redesign processes to be interpreted, not compiled.

 

https://academy.creatio.com/docs/8.x/no-code-customization/bpm_tools/pr…

The error was coming from a script in which variables were not well declared

Hello,

Yes, indeed, in this case, it is necessary to redesign processes to be interpreted, not compiled.

 

https://academy.creatio.com/docs/8.x/no-code-customization/bpm_tools/pr…

hello!
I have the same errors during compilation, but in OpportunitySchema.Opportunity.cs file, recompilaiton didnt help

Dmitrii Balashov,

 

Please specify if you already tried to follow the instructions provided above to fix this issue:

"it is necessary to redesign processes to be interpreted, not compiled."

https://academy.creatio.com/docs/8.x/no-code-customization/bpm-tools/pr…

I've only just recently started working with Creatio, but as I understand it this relates to writing Script task correctly


But after deleting all my custom script tasks the problem is still present on after recompiling

I contacted support and it looks like this is an issue with Opportunity package in version 8.1.3, which should be resolved in 8.1.4

Dear Dmitrii Balashov,

These compilation errors are fixed for 8.1.4, but you can go to the workaround solution:

    1) Unlock the Opportunity package for the hotfix.
    2) Open the embedded process in the Opportunity object schema.
    3) Change three lines (8, 10, 11) in the OpportunitySaving method to use the full definition of System.Linq.Enumerable save process and compile the system.
    4) Lock the Opportunity package.



BP

 

Full definition of System.Linq.Enumerable

 

Best regards,

Andrii

Andrii Kurta,

Thank you!

Show all comments

Hello, 

we have Next steps elements in Freedom UI. But "+" creates Task by default. How can we add Email, Call, Message there?

 

 

Thank you!

Vladimir

Like 3

Like

1 comments

Hello,



Unfortunately, it is not yet possible to add the option of adding Emails, Calls, and Messages records via clicking on Next Step. Alternatively, you can try to perform such an action through customization in the Freedom UI designer. Add menu items to the + Next Step button and customize the opening of pages for different types of activities.



However, we have forwarded your idea to the responsible R&D team to add this functionality in future releases. Thank you for helping us to improve our product.

 

Show all comments

I have a need to intercept record merging events (deduplication).

In the case of merging records, store information about the ID of the deleted record (which was merged and deleted) in the registry of deleted objects, which has already been created, but only deleted records are written there, and not those that were a duplicate and were simply merged and, accordingly, deleted.

Implement a mechanism that will store information about the user who performed the merge and the exact time of the operation. Is this even possible?

Like 1

Like

1 comments
Best reply

Theoretically it's possible. When triggering the merge the MergeEntityDuplicatesAsync method from the DeduplicationService is triggered. This is a public method that can be overridden. The body of the request is a JSON like below (in this case I was merging two documents):

{"schemaName":"Document","groupId":1,"deduplicateRecordIds":["054ac2b7-6840-4cc8-881e-b268b0891459","c467e547-cbff-4ae7-b146-93eff47f1ce6"],"mergeConfig":"{\"Number\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\",\"Date\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\",\"Account\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\"}"}

deduplicateRecordIds is an array with Ids of two records that I selected before triggering the merge.

In the mergeConfig body we have \"Number\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\ - this is an Id of the record that was left in the app after the merge. So we have

 

"054ac2b7-6840-4cc8-881e-b268b0891459","c467e547-cbff-4ae7-b146-93eff47f1ce6

 

in the deduplicateRecordIds array and 467e547-cbff-4ae7-b146-93eff47f1ce6 is left in the app. This means that 054ac2b7-6840-4cc8-881e-b268b0891459 was removed. So this Id should be added to the log table (for example using InsertQuery class). As for the user that performs merge - we can try retrieving this information using UserConnection.

 

Alternatively you can dig into the possibility of overriding the base merge button click (that will also trigger the "DeduplicationActionProcess" business process (see the process log after the merge is triggered)) and bind calling your custom business process that will do the same operation as the base process (create a copy of the process and trigger it instead of the base process) and using it you will also be able to log deleted record and user who performed the merge.

Theoretically it's possible. When triggering the merge the MergeEntityDuplicatesAsync method from the DeduplicationService is triggered. This is a public method that can be overridden. The body of the request is a JSON like below (in this case I was merging two documents):

{"schemaName":"Document","groupId":1,"deduplicateRecordIds":["054ac2b7-6840-4cc8-881e-b268b0891459","c467e547-cbff-4ae7-b146-93eff47f1ce6"],"mergeConfig":"{\"Number\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\",\"Date\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\",\"Account\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\"}"}

deduplicateRecordIds is an array with Ids of two records that I selected before triggering the merge.

In the mergeConfig body we have \"Number\":\"c467e547-cbff-4ae7-b146-93eff47f1ce6\ - this is an Id of the record that was left in the app after the merge. So we have

 

"054ac2b7-6840-4cc8-881e-b268b0891459","c467e547-cbff-4ae7-b146-93eff47f1ce6

 

in the deduplicateRecordIds array and 467e547-cbff-4ae7-b146-93eff47f1ce6 is left in the app. This means that 054ac2b7-6840-4cc8-881e-b268b0891459 was removed. So this Id should be added to the log table (for example using InsertQuery class). As for the user that performs merge - we can try retrieving this information using UserConnection.

 

Alternatively you can dig into the possibility of overriding the base merge button click (that will also trigger the "DeduplicationActionProcess" business process (see the process log after the merge is triggered)) and bind calling your custom business process that will do the same operation as the base process (create a copy of the process and trigger it instead of the base process) and using it you will also be able to log deleted record and user who performed the merge.

Show all comments

I'm trying to improve a UX flow in one of our clients, and to do so I'm hoping it would be possible to create a modal dialog box which can have a date selected from a date picker, but I can't see any obvious ways - is there anything that can be done for this? I saw this excellent guide on getting a Yes/No type dialog in Freedom UI, but I can't see any extra capabilities for potentially adding more freeform user interaction: https://customerfx.com/article/showing-a-message-dialog-or-confirmation…

 

Any help would be greatly appreciated. Currently on Creatio CRM 8.1.0

Like 0

Like

10 comments
Best reply

Hi Harvey,

I've done this in several areas in our system using modal forms (actually called a Mini Page in the page types dialog you select from when creating a new page). Here's an example of a dialog allowing the case status to be set from a list (we don't use editable lists yet since there's no way to add validators yet to lists):

This is just a modal/mini form created using the form designer. The nice part about this is that it can be bound directly to the object (I have many that aren't bound as well, depending on the scenario).

You can open this specific page for a particular record using this method (also possible with an action in no code designer as well) https://customerfx.com/article/opening-a-record-for-edit-in-a-specific-…

Ryan

Hi Harvey,

I've done this in several areas in our system using modal forms (actually called a Mini Page in the page types dialog you select from when creating a new page). Here's an example of a dialog allowing the case status to be set from a list (we don't use editable lists yet since there's no way to add validators yet to lists):

This is just a modal/mini form created using the form designer. The nice part about this is that it can be bound directly to the object (I have many that aren't bound as well, depending on the scenario).

You can open this specific page for a particular record using this method (also possible with an action in no code designer as well) https://customerfx.com/article/opening-a-record-for-edit-in-a-specific-…

Ryan

Ryan Farley,

Thanks for the reply Ryan, that seems like exactly what we're after! I had wondered about using a Mini Page for it but wasn't sure how that would be hooked in to work. How are you triggering the mini page to be displayed, I take it it's from code? Is it using something like the following when clicking a button or whatever the trigger is:

const handlerChain = sdk.HandlerChainService.instance;
 
await handlerChain.process({
	type: "crt.CreateRecordRequest",
	entityName: "CustomEntity",
	entityPageName: "CustomEntityMiniPage",
	$context: request.$context,
	defaultValues: [{
		attributeName: "Col1",
		value: "Val1"
	}]
});

 

Or are you able to get a Mini Page to appear without some entity it's based over? For our requirements, the data field to be modified would actually be on the entity of the Form Page the user was currently on, so it didn't seem like the crt.CreateRecordRequest would make sense, but the crt.OpenPageRequest always seems to open the Mini Page as though it were a full-sized page, and the crt.UpdateRecordRequest I hadn't tried yet as I didn't already have a Mini Page for the entity and thought it likely wouldn't work as the mini pages are generally used for adding data, not editing?

 

Thanks again.

There's so many uses of modal (mini) pages beyond just what mini pages were used for typically in classic ui. 

IMO It's one of the best additions to Freedom UI, the ability to create dialogs for specific purposes, bound to a record or not, that really enhances the user experience. This is a prompt for selecting parameters for a report.

Ryan

Harvey Adcock,

You would use an "crt.OpenPageRequest". I edited my original post to include a link to an article showing how to open it to edit a record. 

Ryan

Harvey Adcock,

In older versions the "crt.OpenPageRequest" did open the page in full screen, even if a modal page. But I think that was fixed in 8.0.10 and has been working for me (it does open as a modal)

Ryan

Perfect, thanks Ryan, really helpful!

Ryan Farley,

 

One more question, is there a way to pass information from the current page to the page being opened via the OpenPageRequest? Trying defaultValues, similar to what you would use when creating a new record from a page launched by code, doesn't seem to have any effect, and I can't see any other candidates for it.

Harvey Adcock,

I’m not 100% sure but I think you can only pass values for a new record (crt.CreateRecordRequest) only. 

Alternatively, you could write some values to a global or use the StorageUtilities module and then read from the form once opened. See StorageUtilities here: https://customerfx.com/article/persisting-data-between-pages-in-creatio…

Ryan

Harvey Adcock,

You can try something like this to pass defaultValues

request.$context.executeRequest({
	type: "crt.OpenPageRequest",
	$context: request.$context,
	schemaName: "UsrYourCustom_FormPage",
	modelInitConfigs: [
		{
			action: sdk.ModelInPageAction.Edit,
			recordId: yourRecordId
		},
		{
			defaultValues: [
				{
					attributeName: "someName",
					value: "someValue"
				}
			]
		}
	]
});

 

Alex Zaslavsky,

 

Does this passing of values work for passing a value into a Page Parameter? Or is there some way to do so? The value I want to pass to a new page (either through OpenPageRequest or CreateRecordRequest) is not on the entity, it's just a parameter on a page, but we need to set this value when opening the page.

Show all comments

Has anyone encountered the following problem with the Advanced filter for Creatio by DEVLAB:

 

- When you CREATE a filter/folder,  by default it takes the ALL column configured view  =   which is OK

- You may change the columns view and SAVE the folder view.

- When you click the folder, the configured column view of the filter is displayed with the data.

- When you EDIT the filter, change a criteria and click APPLY....the configured view is taking the Default ALL collumn configuration (GLITCH)

- But if you SAVE the filter with the updated criteria....then the column view is back to what it was configured

 

 

Can I communicate with the developer(s) who did that to make an update ?

 

Also...When I UNINSTALLED the package and RECOMPILE....the system still has the GLITCH. (outch !!!)

 

Like 1

Like

3 comments

Hi Francois,



Thank you for bringing this matter to our attention.

The developer has resolved this issue and published the new version of the application on the Creatio Marketplace.

 

Please install the latest version via the following link: Advanced list setup for Creatio

Hello...While fixing the previous bug...I believe another one came up.

When accessing a CASE (or any object), if you click on the ACCOUNT of the CASE and come back...for some reason the system doesn't know where it was and keeps displaying the Loading Icon with a brighter screen.

 

He're a short video to help you understand the problem :



vtq-media.com/Video-Library/BUG-display-when-returning-from-a-detail-page.mp4

 

Can you fix that ?



SEE CASE below opened to Support@creatio.com 

Case #SR-01273076: VTQ-CANADA - Bug display when returning from a detail page

 

Oleg Drobina  (Creatio Support)

2/29/2024 at 1:31 PM

Hello Francois,



Thank you for the video and the explanation!



After studying the behavior, we could reproduce it out-of-the-box after installing this Marketplace addon https://marketplace.creatio.com/app/advanced-list-setup-creatio. This addon directly provokes the behavior you've described.


 

Any updates on that issue ?

Show all comments

Hello Everyone,

I have implemented saving functionality in Freedom Ui.

const saveRecordRequest = {

    type: "crt.SaveRecordRequest",

    preventCardClose: true,

    $context: request.$context

};

                     

// now execute the save request and check if it was successful

if ((await request.$context.executeRequest(saveRecordRequest))) {

    // save was successful, continue with something else here

}

else {

    // save was not successful (maybe due to required fields not being filled in)

}

I have followed this link

https://customerfx.com/article/saving-a-page-before-some-action-on-a-cr…;

it is saving  the record but after saving record it is  not automatically coming to list page as save button functionality is working.

Can anyone Please guide me here, How I can get that

Like 0

Like

2 comments

What is the behavior you're expecting? Can you outline the scenario you're trying to accomplish? 

In the code you're including preventCardClose: true which specifically tells the page to not close after saving. If you want the page to close after the save, you need to remove that part (or change to false). However, there could be other factors of what a page does after saving (you could force the navigation back to the list using some code if wanted)

Ryan

preventCardClose:false , this works for me .Thank you  @Ryan for guiding me

Show all comments

Greetings,



I was curious as to whether there was a way to setup a BPM filter to pull customers that are about to become 18 years of age and send them a message about product opportunities available to them. Thanks in advance for any assistance.



Best,



Lucas

Like 0

Like

4 comments

Hi Lucac,



You can create a dynamic folder based on needed conditions.

 

And add the campaign audience from a dynamic folder, as well as from a custom filter. 

Bogdan,

Yes, however how would we set up the automation to pull a member who is a about to turn 18 for example, in the next 6 months?

Lucas Centeno,

I didn't test this out, but it would likely work to use: 

  • Age = 17
  • Birth date Within Previous 6387 Days (which is 17 1/2 years in days)

Ryan

Ryan Farley,

Thank you for the guidance, Ryan. Unfortunately, the filtration provided did not work. It would be nice to have a "Within" or "Between" filtration feature in Creatio in addition to "=" ">" "<", etc.

Show all comments