We are using Case records for mentoring requests. Case generation happens via an API call. Upon case closure we're looking to send out an email invite to user with a link to a survey web form on our website. We have the survey response fields already created within a new Case tab in Creatio:

 

The problem is that we're not quite sure which endpoint to use to get the users' form submission data into the survey response. I've tried a GET to the case object but don't see these fields returned, raising questions about how to POST it correctly. Ideas?

Like 0

Like

1 comments

If the fields were added in the designer, open the case object directly and do a publish and you’ll likely see the fields via the API. 
Ryan

Show all comments

Hello

 

When I try to create the package for certification and adding ProductCore as a dependency, the following error appears: 

 


 

 

 

This error happens with every dependency that I try to add to a new package, I deleted some old packages before  but I can´t pinpoint the exact issue.

 

How do I solve this? Thanks in advance 

Like 2

Like

2 comments

Hello,

This error occurs because the data is not bound to the shown in the screenshot objects: "SysModuleEntity". Please follow the described steps to bind data and solve the error:

1. Create a "Data" element in your package. Example in screenshot below.

2. Select the SysModuleEntity object. Example in screenshot below.

3. On the "Bound Data" tab, add the id specified in the error. Example in screenshot below.


4. Save changes


Best regards,
Malika
 

Malika,

Thank you for your help!

Show all comments

Hi Community, I'm trying to create a system, that allows me to easily assign Brands and Models to Products and spare parts, to make it easier for the support teams and sales team to find related products. For the "main" products i.e a laptop, this is easy enough, i.e Brand: Lenove, Model: Thinkpad 4

 

However, now that I'm looking at spare parts the same logic becomes much more difficult i.e a charging cable. The charging cable might be suitable for Lenove Laptops and Asus Laptops and multiple models of each. 

 

How do I assign multiple brands and models to that charger? The only options I see is to create merged brands and model i.e "Asus, Lenovo", however I am worried that this will get very messy very quickly and impossible to maintain as new products get added to the inventory... 

 

In the perfect world, I would like to be able to open any product and have a filtered list by (product brand and product model) on the same page, which will display all spare parts and accessories that is compatible with that product. 

 

Does anyone else face similar issues? Maybe I'm just overthinking it all and there is a really easy solution to it :)!

 

Thank you in advance!

 

Julia 

 

 

Like 0

Like

3 comments

Hello!

Thank you for the detailed description of the problem. The implementation you described assumes the use of a many-to-many relationship, which cannot be supported directly in the relational database structure.


Please note that in relational databases, the many-to-many relationship cannot be directly implemented because it violates the principles of the relational model, which is based on atomic data and normalization. Instead, such relationships are resolved using an intermediate (junction) table.

These are tables that reference two other tables and define the relationships between them. For instance, if we have Table 1 and Table 2, and we need to establish a multi-relationship between them (e.g., linking a record in Table 1 to multiple records in Table 2), we would create a junction table. This table would contain references to both tables and define the dependencies.

This approach allows us to implement a multi-selection mechanism, such as associating a product with multiple brands or categories (e.g., one product having three or more associated brands).

 

Here’s an example of how the table could look:

CompatibilityID    ProductID    BrandID
1                             101                1
2                             102                1

3                             101                2

Thank you Arsenii Ostapyk, that seems like it may be the solution to my problem. I have done a search through Creatio Academy for "junction" or "junction table". Can you point me in the right direction on where I can find information on how I go setting this up?

 

Julia Molnar,

 

Please note that we do not have any instructions or examples for this, since the question relates to the general Database structure principles, rather than to the Creatio system functionality. However, you are welcome to use the public open sources for more in-depth details on the subject.

Show all comments

Hello

 

We faced with situation when a user having access to all contact records can include all of them into one campaign (with no intention but due to mistake in a filter). Does Creatio have any capability to limit number of participants in one campaign? Because such mistakes can lead to unplanned licenses spending. 

 

Of course some time it could be done by correction in visibility of Contact records, but are there any alternative ways? May be some kind of approvals in cases when numebr of contacts strats to exceed some values, or maybe it could be done with some system's configurations? 

Like 0

Like

1 comments

Hello,

There is no built-in functionality in Creatio to limit the number of participants within a single campaign. 
However, as a workaround, you can consider the approach described in this article:
Configure restriction of the number of emails for sending.
 

While this article primarily addresses restricting the number of emails sent, it can be adapted to monitor the size of the audience and prevent unintended large-scale campaigns.
 

We understand the importance of preventing unplanned license usage and minimizing human error. As such, we have forwarded your request to the R&D team for further consideration. They will evaluate the possibility of introducing functionality to limit campaign participants or implement approval workflows in future releases.

Best regards,
Antonii.

Show all comments

Hi Community, 

 

We have upgraded the production environment from version 8.0.6 to 8.1.4. During the upgrade process, we encountered some errors in the log files (see below), but the upgrade continued to the latest version (8.1.4). 

----------------------------------------------------------------------------------------------------------------------------------
console.error('The "Default" workspace assembly is not initialized.
ConfigurationAssemblyPath [/app/conf/bin/3/Terrasoft.Configuration.dll]
WorkspacePackagesPath [/app/Terrasoft.Configuration/Pkg]
LoadWorkspaceAssemblyError: [Error has occurred during the loading of workspace build
Could not load file or assembly "CrtEmailSender, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load file or assembly "CrtCaseService, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load type "Terrasoft.Configuration.DayInCalendarObjectV2" from assembly "CrtCalendar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
Could not load type "Terrasoft.Configuration.DayInCalendarExtendedV2" from assembly "CrtCalendar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
Could not load type "Terrasoft.Configuration.WorkingTimeIntervalObjectV2" from assembly "CrtCalendar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
Could not load type "Terrasoft.Configuration.CalendarUtilsBase" from assembly "CrtCalendar, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null".
Could not load file or assembly "CrtSLM, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load file or assembly "CrtMessage, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load file or assembly "CrtWebhookServiceBase, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load file or assembly "CrtWebFormBase, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.

 

Could not load file or assembly "CrtTouchPointBase, Version=8.1.4.2940, Culture=neutral, PublicKeyToken=null". The system cannot find the file specified.]
WorkspaceAssemblies: [CrtBaseConsts (Ver. 0.0.0.0), CrtFeatureToggling (Ver. 0.0.0.0), CrtCoreBase (Ver. 8.1.4.207), CrtMLangContent (Ver. 0.0.0.0), CrtMacrosBase (Ver. 0.0.0.0), CalendarBase (Ver. 0.0.0.0), CrtEmailTemplate (Ver. 0.0.0.0), CrtML (Ver. 0.0.0.0), CrtCalendar (Ver. 0.0.0.0), CrtSecurity (Ver. 0.0.0.0), Workplace (Ver. 2.0.0.0), CrtUISwitcher (Ver. 8.1.0.6492), CrtOmnichannelApp (Ver. 1.0.0.0), IntegrationV2 (Ver. 1.0.0.2), SspWorkplace (Ver. 2.0.0.0), MLProcessDesigner (Ver. 8.0.3.1669), XSSProtection (Ver. 0.0.0.0), CSP (Ver. 8.1.3.6587), FeatureToggling (Ver. 1.0.0.0), CrtCore (Ver. 8.1.4.2810), CrtCall (Ver. 8.1.2.3000), CrtSecurity7x (Ver. 0.0.0.0), CrtTouchPoint (Ver. 1.0.0.0), CrtProductivityApp (Ver. 8.1.2.3660), CrtLead (Ver. 8.1.1.1828), CrtJunkFilter (Ver. 8.0.10.242), CrtSpecification (Ver. 8.1.4.2800), CrtMLLeadScoring (Ver. 8.1.1.1828), CrtCase7x (Ver. 8.1.3.5953), CrtProductBase (Ver. 8.1.1.1828), CrtDocument (Ver. 8.1.1.1828), CrtInvoice (Ver. 8.1.1.1828), CrtOrder (Ver. 8.1.1.1828), CrtSLM7x (Ver. 8.1.0.1455), CrtCustomer360Mobile (Ver. 8.1.0.1455), CrtSLMITILService (Ver. 8.1.2.1093), CrtOpportunity (Ver. 8.1.1.1828), CrtProductCatalogue (Ver. 8.1.1.1828), CrtCustomer360App (Ver. 8.0.10.4653), CrtSLMITILService7x (Ver. 8.1.0.1455), CrtInvoiceOrder (Ver. 8.1.1.1828), CrtSupplyPayment (Ver. 8.1.1.1828), MLSimilarCaseSearch (Ver. 8.1.0.1675), CrtContract (Ver. 8.1.1.1828), CrtMLOpportunityScoring (Ver. 8.1.1.1828), CrtContractDocument (Ver. 8.1.1.1828), CrtOrderContract (Ver. 8.1.1.1828), CrtMLLeadConversion (Ver. 8.1.1.1828), CrtProductCatalogueInInvoice (Ver. 8.1.1.1828), CrtInvoiceContract (Ver. 8.1.1.1828), CrtProductCatalogueInOrder (Ver. 8.1.1.1828), CrtSimilarLead (Ver. 1.0.0.0), CrtTouchPointInC360 (Ver. 8.1.1.1828), CrtOpportunityManagement (Ver. 8.1.1.1828), CrtOrderDocument (Ver. 8.1.1.1828), CrtOrderLead (Ver. 8.1.1.1828), CrtOrderContractMgmtApp (Ver. 8.1.1.1828), CrtKnowledgeManagementObject (Ver. 8.1.2.2782), CrtLeadOppMgmtApp (Ver. 8.1.1.1828), CrtCaseService7x (Ver. 8.1.0.2567), CrtSalesInC360 (Ver. 8.1.1.1828), CrtOpportunityInvoice (Ver. 8.1.1.1828), CrtPlaybook (Ver. 8.1.2.2782), CrtMatomoConnector (Ver. 1.0.0.0), CrtCaseManagement (Ver. 0.0.0.0), CrtOCMInLeadOppMgmt (Ver. 8.1.1.1828), CrtDigitalAdsApp (Ver. 1.0.0.0), CrtCaseManagementApp (Ver. 8.1.3.4903), CrtEngagementToolsApp (Ver. 8.1.2.3105), CrtInvoiceInC360 (Ver. 8.1.1.1828), CrtKnowledgeManagementApp (Ver. 8.1.2.2782), CrtOrderContractInC360 (Ver. 8.1.1.1828), CrtMarketingCampaignsApp (Ver. 1.0.0.0), CrtOpportunityInC360 (Ver. 8.1.1.1828), CRM_F (Ver. 8.0.7.3863), MSchooling (Ver. 8.0.7.3863), UsrApp_kgvwarg (Ver. 8.1.0.6828), UsrApp_tbza4yl (Ver. 8.1.0.6828), PfdReport (Ver. 8.0.7.3863), CrtTouchPointInLead (Ver. 8.1.1.1828), CrtLeadOppMgmtInC360 (Ver. 8.1.1.1828), CrtC360InUiV2 (Ver. 8.1.1.264), UsrApp_cs2z91q (Ver. 8.1.0.6828)]');

----------------------------------------------------------------------------------------------------------------------------------
This error causes the application to not display the login page. Instead, it keeps showing a blank page with the Creatio logo. When checking the console, it says:


When accessed the configuration page using the link (https://hostName/ClientApp/#/WorkspaceExplorer) we ran generate source code for all schema and compile all after, the compilation finished without errors, and the application successfully opened using the login page. However, when verifying if all functionalities were working as expected, we noticed unusual behavior: some standard buttons (e.g., Select multiple records, Select all, Export to Excel, etc.) and the VIEW button on the right are not visible, as shown in the picture below.

have you ever encountered such case ?

 

thanks in advance

Like 0

Like

1 comments

Hello!

 

This issue could happen due to some issue with generating static content on the site. Which can occur after an unsuccessful update in that case we would recommend checking update logs and restoring the site if needed.

 

If the update was successful, the "Compile All" action would fix the issue due to static content generation built-in the compilation process. But we recommend taking this action only if the site was updated successfully.

Show all comments

Hi All, I am trying to put in a phone number in email template and I want to make it "Click to Call". I tried hyperlinking the phone number text and selected phone number as shown in screenshot below. But I test this email, it takes me to tracking URL in the browser instead of giving me an option to call. How can I resolve this issue? Thanks

 

 

Like 0

Like

4 comments

Good day, Puneet,

In order to introduce a click-to-call phone number link in your email template, you can use a "tel:" link.

For instance, 

 

1. You may realize it as a part of an HTML block:

HTML block

2. Or as part of a button, where the URL is something like "tel:<phonenumber>":
button

Hope this helps!


 

Alternatively, using the "Link", you can skip the "tel:" tag.
It should work just by specifying a number:

link

Nikita Kudin,

Thanks Nikita, I tried this option on my side but it is still taking me to the tracking URL in the browser. Does this work on your side?

Nikita Kudin,

Even the HTML code is taking me to the tracking URL in the browser

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

Hi Guys, We have checked the free Whatsapp tool by creatio but that is limited to only inbound messages however we want to send outbound messages to our team internally. How is that possible. I saw some other connectors but they are too costly.

Like 1

Like

2 comments

Bump

Hello!

According to the basic logic of WhatsApp chat integration, you can receive chats and write in response to chats within 24 hours of the recipient's last message. However, the integration does not provide the option to send messages from Creatio before people wrote to you or outside the 24 hour window. Also, the integration does not have the ability to create tasks and notifications for the person in charge of the chat.

As a workaround, you can create a business process with the addition of a script to integrate with https://www.twilio.com/ and initialise the chat on your end. After that, responses to such messages should be available in Creatio chat.

You can contact Creatio support to get a package with a ready-made business process for sending WhatsApp messages (using a script for integration). You will then need to customize the integration to work specifically with your twilio number and account. 

We have also registered a request for the R&D team to expand integration capabilities and added your case to the request.

Best regards, 
Antonii.

Show all comments

Hello everyone,

I’m working on a solution that automatically adds 15 minutes to the StartDate and assigns this new value to the DueDate attribute in Creatio. The issue is that although the logs show the correct date (after adding 15 minutes), the DueDate value is not updating on the page, and I still see the old value.

Here’s my code in the handler:

javascript

handlers: [
  {
    request: 'crt.HandleViewModelAttributeChangeRequest',
    handler: async (request, next) => {
      if (request.attributeName === 'StartDate') {
        const startDate = request.$context.StartDate;
        console.log("StartDate before adding minutes: ", startDate);
 
        if (startDate) {
          // Add 15 minutes to StartDate
          const newDueDate = new Date(new Date(startDate).getTime() + 15 * 60 * 		  1000);
          console.log("DueDate after adding 15 minutes: ", newDueDate);
 
          // Assign the new value to DueDate
          request.$context.DueDate = newDueDate;
 
          // I also tried using $set to update the UI
          try {
            if (request.$context.$set) {
              request.$context.$set('DueDate', newDueDate);
            }
          } catch (error) {
            console.log('Error with $set method:', error);
          }
        }
      }
 
      return next?.handle(request);
    }
  }
]
  • The logs show that the date is correctly calculated, and 15 minutes are added 
  • However, on the Creatio interface, I see that DueDate is not updating.
  • Even though I tried using the $set method to update the value, it still does not work.

**Has anyone encountered this issue before? How can I ensure that the DueDate is updated correctly on the interface after modifying StartDate? Any suggestions would be greatly appreciated!

Thank you in advance!

Like 0

Like

2 comments

First of all, are you sure the attribute for DueDate is really DueDate? I'd start with making sure you're using the correct attribute name as located on the viewModelConfigDiff. 

Second, the change request not only fires when a user changes a value, but also when the page loads the data initially. If you want to only handle the change when a user changes the value, add a check for request.silent=false (silent=true means it was silently loaded on the page, not an actual change occurring). 

Your if statement would look like this to only handle changes made after the page it loaded by the user: 

if (request.attributeName === 'StartDate' &amp;&amp; !request.silent) {
    // code here
}

Ryan

It actually turned out that the attribute had a different name , but in addition I had to leave the ‘await’ 
const startDate = (await request.$context.StartDate);
Now it works, thank you for your help  :) 

Show all comments

Hi everyone!

 

I am stuck with the BP, hope you can help me out.

 

I have a detail with duplicate records in it. These records are automaticaly added after the certain emailing (via webhooks). The issues is there are duplicates and I do need them - I need some of them be deleted and at least one should be staying (see image below). 

 

I cannot understand how to write the deleting part in business process

 

Like 1

Like

1 comments

Hello,

Basically, when a webhook comes to the system, there is no process of searching for duplicates, so that duplicate records could be created. However, you can create a business process in which you can use the Find and merge duplicate process element to search and merge these records.

Best regards,
Antonii.

Show all comments