Hi,

I am trying to make a detail available.  At Detail setup the checkbox 'Make the list editable' is disabled:

 

Like 0

Like

2 comments

Hello!

 

Could you please specify the issue you are facing?

 

Additionally, we were unable to view the picture you provided. Could you kindly resend it for us to review?

 

Thank you in advance, and we look forward to your reply!

Show all comments

I am trying to filter the list of products shown in the Application page, based on the field Segment. The field segment is part of the object FZVwActiveProduct (it represents a view in db). This object has the following fields:  FZId (GUID), FZOpportunityConditionName (Text),

FZProduct (Lookup -> Product), FZProductCategory(Lookup -> ProductCategory), FZProductType (Lookup -> ProductType), FZSegmentation (Lookup -> Segment). 

The filter used for Products in BaseFinApplicationPage uses the object  VwFinActiveProduct (it represents a view in db), which has the following fields: Name (Text), OpportunityCondition(Lookup -> OpportunityCondition), Product(Lookup -> Product).

 

The original creatio function used for filtering is:

    getActiveProductLookupFilter: function() {
                    var filters = this.Terrasoft.createFilterGroup();
                    var productType = this.get("ProductType");
                    var productCategory = this.get("ProductCategory");
                    if (this.Ext.isObject(productType)) {
                        var productTypeFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL,
                            "Product.Type", productType.value);
                        filters.add("TypeFilter", productTypeFilter);
                    }
                    if (this.Ext.isObject(productCategory)) {
                        var productCategoryFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL,
                            "Product.Category", productCategory.value);
                        filters.add("CategoryFilter", productCategoryFilter);
                    }
                    var productStatusFilter = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL,
                        "Product.ProductStatus", BaseFinanceConstants.ProductStatus.IsActual);
                    filters.add("StatusFilter", productStatusFilter);
                    return filters;
                }

 

I have overriden it to use the foloowing filtering, but it does not provide any filtering and it throws the error:

{
   "errorCode": "ItemNotFoundException",
   "message": "Column by path [FZVwActiveProduct:FZProduct].Id not found in schema VwFinActiveProduct.",
   "errors": []
}

getActiveProductLookupFilter: function() {
             var borrower = this.get("Borrower");
             var filters = this.Ext.create("Terrasoft.FilterGroup");
             // Retrieve the SegmentationId from the borrower
             var segmentationId = borrower.FZSegmentationId;
             var contactFilter = this.Ext.create("Terrasoft.FilterGroup");
              var contactLookupFilter = Terrasoft.createExistsFilter("[FZVwActiveProduct:FZProduct].Id");
             //Application Filter
             contactLookupFilter.subFilters.addItem(Terrasoft.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "FZSegmentation", segmentationId));
             contactFilter.addItem(contactLookupFilter);
             return contactFilter;
             // Create EXISTS filter for FZVwActiveProduct
             var existsFilter = Terrasoft.createExistsFilter("[FZVwActiveProduct:FZProduct].Id");
             
             // Filter to match Product in VwFinActiveProduct with FZProduct in FZVwActiveProduct
             existsFilter.subFilters.addItem(
               Terrasoft.createColumnFilterWithParameter(
                 Terrasoft.ComparisonType.EQUAL,
                 "FZProduct",
                 "Product"
                 )
             );
           // Filter to match SegmentationId in FZVwActiveProduct
             
         existsFilter.subFilters.addItem(
           Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "[FZVwActiveProduct:FZProduct].FZSegmentation", segmentationId)
         );
             
       // Add the EXISTS filter to the filter group
       filters.addItem(existsFilter);
       return filters;
}

Like 0

Like

3 comments

Hello Alba,

Such an error usually occurs in the construction of the filter, causing an incorrect database query.Value [FZVwActiveProduct:FZProduct].Id should be defined in another way. Please, debug your code to analyze which value may be passed to existsFilter and contactLookupFilter.

Additionally, I've found a good article that explains how to build the right filter conditions using the usual filters in Creatio.

Anhelina,

The article you mentioned creates the filter in the same way. I think the problem consists on the fact that my object (FZVwActiveProduct), as well as creatio's object (VwFinActiveProduct ) represent  views (not tables).

 

Alba M,

 

Ok, this should be debugged; without debugging, we can only make theories. Also if you can build this kind of filter in some seciton - you can then review the filter's content in the correspondent SelectQuery in the "Network" tab of the browser and then build the very same filter in your code.

Show all comments

I am trying to implement the currency exchange rate business process as outlined in this article. I have done everything according to the instructions, but for some reason when I run the business process it is not updating the exchange rates correctly.

 

After a lot of trial and error, it appears that somewhere not in my business process it is doing the calculation

1 / exchangeRate

and entering that into the exchange rate instead of just the exchange rate.

 

For example, with the base currency set to euro, the call to the API responded with "AUD":1.646885, but after the business process finishes, the exchange rate says it is 0.60720694 for AUD:

Picture of the relevant business process element:

Is there an explanation as to why this could be happening?

Like 0

Like

2 comments

Hello!

 

The Exchange rate column in the Currency object is virtual, so it is not shown in the Lookup and cannot be edited directly from the Lookup.

The Rate itself is saved in the CurrencyRate table with a link to CurrencyId each time it is changed.



The base stores the inverse of the exchange rate. For example:

Base currency:  EUR

AUD exchange rate: 0.60720694



Which is inconvenient to understand, so a Lookup with a more user-friendly currency display, but converting to a reverse exchange rate, has been developed to support backward compatibility.

This way you can enter the usual exchange rate of EUR = 1.646885 (AUD to EUR) on the interface. And the base will already save 0.60720694 (EUR per 1 AUD).

 

These different types of rate (1.646885 and 0.60720694 ) will determine the formula by which you will then calculate the amounts.:

1) convert it to a familiar rate - 1/0.60720694  = 1.646885.

2) either work already with 0.60720694 , but then the calculation of the amount will be different.



So, the Rate column is virtual, but you can use CurrencyRate (exchange rate) to calculate the exchange rate.

Kyrylo Atamanenko,

 

What is the reasoning behind storing the exchange rates in such a manner? Why isn't this mentioned in any articles?

 

Also, you mention a more user friendly lookup has been developed; is this new lookup implemented in 8.1.5, or is this an upcoming feature?

Show all comments

Hi Creatio Community,

 

I'm encountering an issue when trying to add a new contact in Creatio. A pop-up error appears that says:

 

"Could not load file or assembly 'CrtCoreBase, Version=8.1.2.3941, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."

I've checked the installation and verified most dependencies, but I'm unsure what could be causing this or how to resolve it. Has anyone else faced this issue? Any suggestions or guidance would be greatly appreciated.

 

Thanks in advance for your help!

 

Best regards,


Rodrigo

Like 0

Like

2 comments

Hello,

The problem may occur because the site on which you developed the functionality is on another version than the test site to which you transferred the package. We do not recommend transferring a package that was developed on one version of a site to a site of another version, as inconsistency may occur. 


Best regards,
Antonii.

Thank you Antonii for you answer ;)

 

Show all comments

Hello Creatio Community,

I have found a tool from marketplace named : Excel Report Builder 
Link :https://marketplace.creatio.com/app/excel-reports-builder-creatio

Can anyone  inform me how much records in a report generation can be printed? Is there any limitation, 10K , 20k? 

Thanks

Like 0

Like

1 comments

Hello.

The maximum number of records that can be exported at once is 20,000. If you need to export more than 20,000 records, you must split and export the data separately. We also recommend performing these exports during the site's technical window, as exporting large volumes during business hours may slow down the site.

Best regards,
Antonii

Show all comments

Hello Creatio Community,

I'm creating a script task for email sender using a documentation from creatio team. I followed the provided instructions for creating the script task, but when I published  the script task some errors occured.

Some of the classes and interface cannot be found also the IntegrationApi library cannot be found.

source code below :

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using Terrasoft.Common;
using Terrasoft.Core;
using Terrasoft.Core.Configuration;
using Terrasoft.Core.DB;
using Terrasoft.Core.Entities;
using Terrasoft.Core.Factories;
using Terrasoft.Core.Process;
using Terrasoft.Core.Process.Configuration;
using Terrasoft.Mail;
using Terrasoft.Mail.Sender;
using IntegrationApi;

    var mailBoxSettingId = Get("SenderMailbox");
    var emailClientFactory = ClassFactory.Get(
    new ConstructorArgument("userConnection", UserConnection));
    
    var emailSender = ClassFactory.Get(
    new ConstructorArgument("emailClientFactory", emailClientFactory),
    new ConstructorArgument("userConnection", UserConnection));
    var entity = UserConnection.EntitySchemaManager.GetInstanceByName("MailboxSyncSettings").CreateEntity(Uif (entity.FetchFromDB("Id", mailBoxSettingId, new List { "SenderEmailAddress" })) {
    var senderEmailAddress = entity.GetTypedColumnValue("SenderEmailAddress");
    var message = new Terrasoft.Mail.Sender.EmailMessage {
    From = senderEmailAddress,
    To = Get("Recipient").Split(';').ToList(),
    // Cc = List{ "first@recepient.co", "second@recepient.co"},
    // Bcc = List{ "first@recepient.co", "second@recepient.co"},
    Subject = Get("Subject"),
    Body = Get("Body"),
    Priority = Terrasoft.Mail.Sender.EmailPriority.Normal
    };
    var attachment = new Terrasoft.Mail.Sender.EmailAttachment {
    Id = Guid.NewGuid(),
    Name = "test.txt",
    Data = Encoding.ASCII.GetBytes("some test text")
    };
    message.Attachments.Add(attachment);
    emailSender.Send(message);
    }
    
    
    return true;


errors in lines :

    var emailClientFactory = ClassFactory.Get(
            var emailSender = ClassFactory.Get(
            var message = new Terrasoft.Mail.Sender.EmailMessage {
            Priority = Terrasoft.Mail.Sender.EmailPriority.Normal
            var attachment = new Terrasoft.Mail.Sender.EmailAttachment {

Documents in this link:
page 14: https://academy.creatio.com/docs/sites/academy_en/files/pdf/node/1474/Sending_emails_.pdf

https://academy.creatio.com/docs/7-18/developer/application_components/…



 

Like 0

Like

2 comments

Hello Alba,
Thanks for your question.

I am glad to assist you however it is hard to understand what causes the error without error messages. Could you please enable tracing for you business process and share the error message? 

This code works fine for me:
1

2

Hope this helps

Alba,

I had the same issue following the same article.

 

Then I decided to do differently. No code is needed :

 

 

By using the element process file you can generate the printable then using the file in the process allows you to add the file generated in the email as attachment, you don't need to store the file in an activity record.

 

Tell me if you need more details.

Show all comments

I have a record that I'm trying to delete, but just as the title says, the system is telling me that I do not have the rights to any CRUD operations despite me being the system user and making sure that I have full operation permissions on the object.

 

The specific object in question is the AppValidation object from the FinAppLending package. The record was created automatically by a business process. Is there something I'm missing that will allow me to do anything with this object?

 

Thanks in advance!

Like 0

Like

4 comments
Best reply

Hello,
 

Having verified all information, we inform you that in order to work with the Validation object, you must need the finserv lending creatio license, which grants you access to modify the Validation object.

So please check if you have this license.

Hello,

Do you have a license finserv lending creatio app assigned to your user?

Malika,

Yes, I have all available licenses in my system and I am marked as the system user, so I have full access permissions for everything already. 

Hello,
 

Having verified all information, we inform you that in order to work with the Validation object, you must need the finserv lending creatio license, which grants you access to modify the Validation object.

So please check if you have this license.

Malika,

 

Thank you for your help

Show all comments

Hello Creation Community,

I have developed functionality that displays printables based on specific configurations. I have overridden the initCardPrintForms method and other necessary methods. However, I've encountered an issue: this development works correctly only when the page is rendered for the first time.
I need to refresh the list of printables whenever the "Product" field, used as a filter, is updated. Here's the relevant code snippet:

onProductUpdate: function(){
debugger;
this.setFZSelectedApp(this.$PrimaryColumnValue, true, null);
this.initCardPrintForms();
},
Even though the collection of printables updates during debugging, the action buttons, including the print button, do not reflect these changes.
Based on my developments the "Application form report" should be excluded after the product was updated.

Displaying image.png

Like 1

Like

1 comments

Hello,
Look at this discussion, I believe you can find useful information there.

Show all comments

Hi, 

I have a detail that uses an object  that represents structure of database view, the detail is non editable. 

What can I do that on double click of a row to open a page that contains the detail's columns as fields?

Like 0

Like

1 comments

Dear Alba,

 

You can register details based on a database view that will open to editing, the same way you can add a detail based on a regular object.

You can read more about these implementations in the following tree: https://academy.creatio.com/docs/8.x/dev/development-on-creatio-platform/detail-examples

 

Have a great day!

Show all comments

Hi,

In creatio, I have created a section which has a detail. The section's object has a field named 'Stage'. When 'Stage' value changes I want to refresh grid detail action buttons without page reloading, so that I can remove the + button (for adding) and the actions for copying, editing, deleting and Data Import.

I have tried using 'updateDetail' and 'reloadEntiy' but they don't seem to refresh these buttons

Like 0

Like

2 comments
Best reply

Hello,

 

Not sure about removing buttons (but theoretically it's possible using the "Visible" property), but as for the "Enabled" property, it's possible to control the state of the button. This can be achieved using sandbox messages exchange mechanisms like (control the copy button "Enabled" property in the detail on the case page based on the case category selected):

 

CasePage schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
		...
onCategoryChanged: function() {
				this.callParent(arguments);
				this.sandbox.publish("UpdateActionsStatuses", this.get("Category"), ["ForActionsStatusUpdate"]);
			}

 

Detail schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
....
CopyRecordMenuItemEnabled: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: false
			},
....
getCopyRecordMenuItem: function() {
				return this.getButtonMenuItem({
					Caption: {"bindTo": "Resources.Strings.CopyMenuCaption"},
					Click: {"bindTo": "copyRecord"},
					Enabled: {bindTo: "CopyRecordMenuItemEnabled"},
					Visible: {bindTo: "IsEnabled"}
				});
			},
....
subscribeSandboxEvents: function() {
				this.callParent(arguments);
				this.sandbox.subscribe("UpdateActionsStatuses", this.updateActionsStatus, this,
						["ForActionsStatusUpdate"]);
			},
 
			updateActionsStatus: function(result) {
				var parentCaseCategory = result.displayValue;
				var isCategoryCorrect = parentCaseCategory == "PPE Case (Sales Contract)";
				this.updateCopyRecordMenuItem(isCategoryCorrect);
			},
 
			updateCopyRecordMenuItem: function(isCategoryCorrect) {
				var parentCopyRecordEnabled = this.getCopyRecordMenuEnabled();
				var isEnableCopyRecordMenuItem = isCategoryCorrect && parentCopyRecordEnabled;
				this.set("CopyRecordMenuItemEnabled", isEnableCopyRecordMenuItem);
			}

 

As a result the copy button will be enabled in the detail only if any record is selected in the detail and also if the case category (case page is where the detail is added) is "PPE Case (Sales Contract)".

Hello,

 

Not sure about removing buttons (but theoretically it's possible using the "Visible" property), but as for the "Enabled" property, it's possible to control the state of the button. This can be achieved using sandbox messages exchange mechanisms like (control the copy button "Enabled" property in the detail on the case page based on the case category selected):

 

CasePage schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.PUBLISH
			}
		},
		...
onCategoryChanged: function() {
				this.callParent(arguments);
				this.sandbox.publish("UpdateActionsStatuses", this.get("Category"), ["ForActionsStatusUpdate"]);
			}

 

Detail schema

messages: {
			"UpdateActionsStatuses": {
				mode: Terrasoft.MessageMode.PTP,
				direction: Terrasoft.MessageDirectionType.SUBSCRIBE
			}
		},
....
CopyRecordMenuItemEnabled: {
                    dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
                    value: false
			},
....
getCopyRecordMenuItem: function() {
				return this.getButtonMenuItem({
					Caption: {"bindTo": "Resources.Strings.CopyMenuCaption"},
					Click: {"bindTo": "copyRecord"},
					Enabled: {bindTo: "CopyRecordMenuItemEnabled"},
					Visible: {bindTo: "IsEnabled"}
				});
			},
....
subscribeSandboxEvents: function() {
				this.callParent(arguments);
				this.sandbox.subscribe("UpdateActionsStatuses", this.updateActionsStatus, this,
						["ForActionsStatusUpdate"]);
			},
 
			updateActionsStatus: function(result) {
				var parentCaseCategory = result.displayValue;
				var isCategoryCorrect = parentCaseCategory == "PPE Case (Sales Contract)";
				this.updateCopyRecordMenuItem(isCategoryCorrect);
			},
 
			updateCopyRecordMenuItem: function(isCategoryCorrect) {
				var parentCopyRecordEnabled = this.getCopyRecordMenuEnabled();
				var isEnableCopyRecordMenuItem = isCategoryCorrect && parentCopyRecordEnabled;
				this.set("CopyRecordMenuItemEnabled", isEnableCopyRecordMenuItem);
			}

 

As a result the copy button will be enabled in the detail only if any record is selected in the detail and also if the case category (case page is where the detail is added) is "PPE Case (Sales Contract)".

Yes, it worked. Thank you

Show all comments