Hi Community,

Scenario : Age in the contact is calculated OOB based on the DOB

Question: How to add the age field in printable, as we off the existing Age field, “0” value is being printed in the printable

 

Like 0

Like

1 comments

Best route is likely to create a custom macro for the printable, you could pass it the DOB and it would return the age. See an example here: https://customerfx.com/article/creating-custom-macros-to-format-values-…

Ryan

Show all comments

Hello,

 

I'm extending BaseSchemaModuleV2 follow example of CenterNotificationModule, but it's missing the messages GetHistoryState and ReplaceHistoryState (already define in BaseSchemaModuleV2). I found that CenterNotificationModule has Parent = BaseSchemaModuleV2, but I cannot find a way to add that Parent to my module.

Like 0

Like

3 comments

Hello,

 

Here is an example of extending the modules:

 

define("UsrTestModuleV2", ["TestModuleV2"],
function() {
    Ext.define("Terrasoft.UsrTestModuleV2", {
        extend: "Terrasoft.TestModuleV2",
         
        // extend functions in TestModuleV2
     
    });
});

 

In the logic above the "UsrTestModuleV2" will use all the logic of "TestModuleV2" and also extended logic for "TestModuleV2" specified in the "UsrTestModuleV2". Also the parent is already added to "CenterNotificationModule" - it is done in this part of the schema definition:

 

 define("CenterNotificationModule", ["BaseSchemaModuleV2"]

 

so BaseSchemaModuleV2 is a dependency for the "CenterNotificationModule".

 

Best regards,

Oscar

No, I mean this parent:

The messages are inherited via metadata inheritance:

 

This is the error I get when I loaded the test module:

 

 

Basically, I can manual add those messages into the test module. However, if the BaseSchemaModuleV2 is updated with new messages, the error may happen again. Therefore, inheriting those metadata is the best way to make sure that the test module is forward-compatible. The CenterNotificationModule metadata exported shows that it inherited those metadata instead of redefining them. But it seems that I cannot do that from the developer console, although the built-in package already had ability to do that.

Is there any update?

Show all comments

Hi, i have an issue when i Show Confirm dialog in a page but when i selected it's close dialog and page but process still running, it is

not completed. Anybody know this issuse ?

diff: /**SCHEMA_DIFF*/[
			{
				"operation": "merge",
				"name": "Button-be6148b819154a0791eaee8f1635d859",
				"values": {
					"enabled": true,
                    "click": {
                      "bindTo": "confirmRegistrationWriteOffContract"
                    },
				}
			},
methods: {
          confirmRegistrationWriteOffContract: function() {
            var message = this.get("Resources.Strings.RegistrationWriteOffContractRequestMessage");
            Terrasoft.showConfirmation(message, function(result) { 
              if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
                this.onSaveButtonClick();
              }
            }, ["yes", "no"], this);
          }
        },

 

Like 0

Like

0 comments
Show all comments

Hi,

I'm new on creatio, I'm ready to deploy my first custom package on production environment.

I've some question.

Is it possible to unlock my package on production environment ?

If I need to change something after deploy how can do it ?

Like 0

Like

2 comments

Hello!

 

We would like to pay your attention, that unlocking and modifying the packages directly in the production environment may lead to system failure, that is why we recommend completing all changes in a package in one particular environment (for example, in the development one) to have it all tested and ready to be deployed properly in a production environment.

 

More detailed information on how to work with packages can be found in the Packages basics Academy article. 

 

Please, let us know in case any further assistance is required. 

 

Best regards,

Olga. 

Olga Avis,

thank you for your response.

Then the better way is export my customization as md file and import in the production environment ?

Show all comments

Hi Community,

Scenario : For the approval action in the record page under case flow, it appears/ disappears on mouse hover the "approve", "reject" and "change approver" button

Question: Is there a option to have them fixed in the screen instead of mouse hover, so that the user can know that there is option to approve if they dont understand that they need to mouse hover on the screen to get the option 

Like 1

Like

1 comments

Hello Amritha,

 

The schema name that is to be modified is called ActionsDashboardItemContainer. Unfortunately, I was not able to find any examples of code that can change that functionality,

 

Best regards,

Bogdan

Show all comments

Hi

We are trying to implement CI CD in our Creatio dev project where we have the created project package mapped to the git version control.

When we try to build the exported package alone, before deploying them to another environment, we are getting dependency errors.

Is there a way to build an installable package file from source code of the creatio application without a need for a Creatio instance?

 

Appreciate any help/suggestion on this.

 

Thanks

Abinaya

Like 0

Like

1 comments

Hello,

 

Please check this Marketplace application. It can help you to generate packages from the file system.

 

Please let us know if it helps!

 

Best regards,

Bogdan S.

Show all comments

Is it possible to auto trigger an email with an attachment? 

Like 0

Like

1 comments

Hello Nicola,

 

Please check this Marketplace solution. I believe it has the exact functionality you are looking for.

 

Best regards,

Bogdan S.

Show all comments

Hello,

 

How can cache the lookups to the device in order to view them in offline mode for mobile app?

 

Thank you.

Maher.

Like 0

Like

3 comments

Hello Maher,

 

Once you sync the mobile app with the main app all lookup values are being saved in the cache of the mobile app and will be available for selection in offline mode. In case you've added new lookup values to the main app and need them to appear in the mobile app please sync the mobile app with the main app and new values will appear as needed.

 

Best regards,

Oscar

Oscar Dylan,

Hello Oscar,

 

Thank you for the reply.

I am not able to see the list of values in offline mode for some reason, are there any steps to do or configurations?

I did synchronize before disconnecting from the network.

 

Maher.

maher daher, maybe our steps to reproduce the behavior are different. Can you please specify the value for the system setting with the "MobileApplicationMode" code (try setting the value as "Offline")? Have I understood you right that you perform synchronization, then disconnect your device from the network and then try to edit the record, select the lookup, but you don't have any values there? Is this a custom lookup or some out-of-the-box lookup?

 

Please also make sure that your lookup is present in the SyncOptions property -> SysLookupsImportConfig attribute in the mobile application manifest (as described here). Because your lookup may simply not sync with the mobile application.

 

Best regards,

Oscar

Show all comments

HI team,

 

I want to filter the Action option based on 3 conditions and I implemented it on the trial instance, it was working as expected using the below code.

 

But when we moved it to the Local Development environment then we are not getting the desired output 

when I checked we are getting Activerowid only on local development instance

 

var status=selectedOrder.get("UsrPOStatusNew");

              var statusordertype=selectedOrder.get("UsrOrderType");

              var vendorcode=selectedOrder.get("UsrVendorGSTStateCode");

               var statecode=selectedOrder.get("UsrBillToGSTStateCode");

 

these fields return an empty or undefined value 

Someone please suggest a solution or workaround

 

Thanks a lot 

 

 

define("UsrCondition631066a3Section", ["ProcessModuleUtilities"], function(ProcessModuleUtilities) {

    return {

        entitySchemaName: "UsrCondition",

        details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,

        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,

        methods: {

          

           isRunning: function(activeRowId) {

                // Getting the section list view data collection. 

                var gridData = this.get("GridData");

             var selectedOrder = gridData.get(activeRowId);

                // Getting the selected order model accroding to the indicated primary column value. 

                var status=selectedOrder.get("UsrPOStatusNew");

              var statusordertype=selectedOrder.get("UsrOrderType");

              var vendorcode=selectedOrder.get("UsrVendorGSTStateCode");

               var statecode=selectedOrder.get("UsrBillToGSTStateCode");

             //this.showInformationDialog(status.displayValue);

             //this.showInformationDialog(statecode);

             this.showInformationDialog(status.displayValue);

             if(status.displayValue === "Approved" && statusordertype.displayValue==="Purchase Order" && vendorcode===statecode)

               {

                 return true;

               }

             else

               

                return false;

            },

          

           isRunning1: function(activeRowId) {

                // Getting the section list view data collection. 

                var gridData = this.get("GridData");

             var selectedOrder = gridData.get(activeRowId);

                // Getting the selected order model accroding to the indicated primary column value. 

                var status=selectedOrder.get("UsrPOStatusNew");

              var statusordertype=selectedOrder.get("UsrOrderType");

              var vendorcode=selectedOrder.get("UsrVendorGSTStateCode");

               var statecode=selectedOrder.get("UsrBillToGSTStateCode");

             //this.showInformationDialog(status.displayValue);

             //this.showInformationDialog(statecode);

             if(status.displayValue === "Approved" && statusordertype.displayValue==="Purchase Order" && vendorcode!==statecode)

               {

                 return true;

               }

             else

               

                return false;

            },

          isRunning2: function(activeRowId) {

                // Getting the section list view data collection. 

                var gridData = this.get("GridData");

             var selectedOrder = gridData.get(activeRowId);

                // Getting the selected order model accroding to the indicated primary column value. 

                var status=selectedOrder.get("UsrPOStatusNew");

              var statusordertype=selectedOrder.get("UsrOrderType");

              var vendorcode=selectedOrder.get("UsrVendorGSTStateCode");

               var statecode=selectedOrder.get("UsrBillToGSTStateCode");

             //this.showInformationDialog(status.displayValue);

             //this.showInformationDialog(statecode);

             if(status.displayValue === "Approved" && statusordertype.displayValue==="Work Order" && vendorcode!==statecode)

               {

                 return true;

               }

             else

               

                return false;

            },

          isRunning3: function(activeRowId) {

                // Getting the section list view data collection. 

                var gridData = this.get("GridData");

             var selectedOrder = gridData.get(activeRowId);

                // Getting the selected order model accroding to the indicated primary column value. 

                var status=selectedOrder.get("UsrPOStatusNew");

              var statusordertype=selectedOrder.get("UsrOrderType");

              var vendorcode=selectedOrder.get("UsrVendorGSTStateCode");

               var statecode=selectedOrder.get("UsrBillToGSTStateCode");

             //this.showInformationDialog(status.displayValue);

             //this.showInformationDialog(statecode);

             if(status.displayValue === "Approved" && statusordertype.displayValue==="Work Order" && vendorcode===statecode)

               {

                 return true;

               }

             else

               

                return false;

            },

          

            // Determines if the menu option is enabled. 

            isCustomActionEnabled: function() {

                // Attempt of getting the active (list selected) record identifier. 

                var activeRowId = this.get("ActiveRow");

              

                // If the identifier is determined and the order status is 

                // [In Progress], it gets true, otherwise - it gets false.

                return activeRowId ? this.isRunning(activeRowId) : false;

            },

             isCustomActionEnabled1: function() {

                // Attempt of getting the active (list selected) record identifier. 

                var activeRowId = this.get("ActiveRow");

              

                // If the identifier is determined and the order status is 

                // [In Progress], it gets true, otherwise - it gets false.

                return activeRowId ? this.isRunning1(activeRowId) : false;

            },

          isCustomActionEnabled2: function() {

                // Attempt of getting the active (list selected) record identifier. 

                var activeRowId = this.get("ActiveRow");

              

                // If the identifier is determined and the order status is 

                // [In Progress], it gets true, otherwise - it gets false.

                return activeRowId ? this.isRunning2(activeRowId) : false;

            },

          isCustomActionEnabled3: function() {

                // Attempt of getting the active (list selected) record identifier. 

                var activeRowId = this.get("ActiveRow");

              

                // If the identifier is determined and the order status is 

                // [In Progress], it gets true, otherwise - it gets false.

                return activeRowId ? this.isRunning3(activeRowId) : false;

            },

            // Action handler method. Displays the order creation date in the message window. 

            showOrderInfo: function() {

                var activeRowId = this.get("ActiveRow");

                var gridData = this.get("GridData");

                // Getting the order creation date. The column must be added to the list. 

               // var dueDate = gridData.get(activeRowId).get("Date");

                // Message window display.

                //this.showInformationDialog("hello");

              

                var args = {

        // Name of the process that should be run.

                 sysProcessName: "UsrProcess_44f0ffe",

                parameters:

                {

                  ProcessSchemaParameter1 : activeRowId

                 }

        // Object with the value of ContractParameter input parameter for CustomProcess parameter.

               };

              //this.showInformationDialog("hello1");

        // Running of user business process.

             ProcessModuleUtilities.executeProcess(args);

              //this.showInformationDialog("hello2");

              

              

            },

            // Overriding the base virtual method that gets the section action collection. 

            getSectionActions: function() {

                // Calling of the method parent implementation for getting the 

                //  initiated action collection of the section. 

                var actionMenuItems = this.callParent(arguments);

                // Adding a separator line.

                actionMenuItems.addItem(this.getButtonMenuItem({

                    Type: "Terrasoft.MenuSeparator",

                    Caption: ""

                }));

                // Adding a menu option to the section action list. 

                actionMenuItems.addItem(this.getButtonMenuItem({

                    // Linking the menu option title to the schema localized string.

                    "Caption": {bindTo: "Resources.Strings.purchaseActionCaptionIGST"},

                    // Action handler method linking. 

                    "Click": {bindTo: "showOrderInfo"},

                    // Linking of the menu option enabling property to the value that gets the isCustomActionEnabled method.

                    "Enabled": {bindTo: "isCustomActionEnabled"},

                   "Visible": {bindTo: "isCustomActionEnabled"}

                }));

               actionMenuItems.addItem(this.getButtonMenuItem({

                    // Linking the menu option title to the schema localized string.

                    "Caption": {bindTo: "Resources.Strings.purchaseActionCaptionCGSTSGST"},

                    // Action handler method linking. 

                    "Click": {bindTo: "showOrderInfo"},

                    // Linking of the menu option enabling property to the value that gets the isCustomActionEnabled method.

                    "Enabled": {bindTo: "isCustomActionEnabled1"},

                 "Visible": {bindTo: "isCustomActionEnabled1"}

                }));

               actionMenuItems.addItem(this.getButtonMenuItem({

                    // Linking the menu option title to the schema localized string.

                    "Caption": {bindTo: "Resources.Strings.WorkActionCaptionCGSTSGST"},

                    // Action handler method linking. 

                    "Click": {bindTo: "showOrderInfo"},

                    // Linking of the menu option enabling property to the value that gets the isCustomActionEnabled method.

                    "Enabled": {bindTo: "isCustomActionEnabled2"},

                 "Visible": {bindTo: "isCustomActionEnabled2"}

                }));

               actionMenuItems.addItem(this.getButtonMenuItem({

                    // Linking the menu option title to the schema localized string.

                    "Caption": {bindTo: "Resources.Strings.WorkActionCaptionIGST"},

                    // Action handler method linking. 

                    "Click": {bindTo: "showOrderInfo"},

                    // Linking of the menu option enabling property to the value that gets the isCustomActionEnabled method.

                    "Enabled": {bindTo: "isCustomActionEnabled3"},

                     "Visible": {bindTo: "isCustomActionEnabled3"}

                }));

                // Getting the appended section action collection.

                return actionMenuItems;

            }

          

        }

    };

});

 

Like 1

Like

2 comments
Best reply

The difference between your trial and your local instance (and why it isn't working in your local instance) is likely because of a difference in the section list layout (the columns added to the list). In order for a field you're using to be available as a part of GridData, it needs to exist in the ESQ behind the list, meaning it needs to be in the column layout - or you need to add the column to the list ESQ. For example, you're using the column "UsrPOStatusNew" from the GridData. If the UsrPOStatusNew column doesn't exist in the list ESQ (which it only will if it's in the column layout for the list), it won't be available. You can add this column and any other column you'll need to access in the section code by adding it to the list ESQ like this:

initQueryColumns: function(esq) {
    this.callParent(arguments);
 
    if (!esq.columns.contains("UsrPOStatusNew")) {
        esq.addColumn("UsrPOStatusNew");
    }
}

Now, when you need to access the UsrPOStatusNew column, it will be available in the GridData. I picked UsrPOStatusNew out of your code as an example, add any other fields you'll need to access in the section code using the same as above.

Ryan

The difference between your trial and your local instance (and why it isn't working in your local instance) is likely because of a difference in the section list layout (the columns added to the list). In order for a field you're using to be available as a part of GridData, it needs to exist in the ESQ behind the list, meaning it needs to be in the column layout - or you need to add the column to the list ESQ. For example, you're using the column "UsrPOStatusNew" from the GridData. If the UsrPOStatusNew column doesn't exist in the list ESQ (which it only will if it's in the column layout for the list), it won't be available. You can add this column and any other column you'll need to access in the section code by adding it to the list ESQ like this:

initQueryColumns: function(esq) {
    this.callParent(arguments);
 
    if (!esq.columns.contains("UsrPOStatusNew")) {
        esq.addColumn("UsrPOStatusNew");
    }
}

Now, when you need to access the UsrPOStatusNew column, it will be available in the GridData. I picked UsrPOStatusNew out of your code as an example, add any other fields you'll need to access in the section code using the same as above.

Ryan

Ryan Farley,

 

Thank You very Much ?

Show all comments

Please shed some light on LDAP integration with .NET core. We plan to use .NET core on a Linux box. Does it work OOTB seamlessly as it does with the .NET framework versions? Are there any architectural implications/extra components that need to be deployed?

 

Please explain the below phrase that has been picked from the .NET Core Creatio documentation.

 

"LDAP Integration - Current Implementation - A separate .NET Core instance is used for the synchronization of Windows-based applications. "

Like 0

Like

3 comments

Hello,

 

There is no possibility to establish LDAP integration with Creatio that is fully deployed on .Net Core platform because of .Net restrictions. This kind of integration is planned after the implementation of corresponding functionality on .NET 5.

Speaking of the "LDAP Integration - Current Implementation - A separate .NET Core instance is used for the synchronization of Windows-based application". This means that you can deploy a web-farm that will have several nodes and one of them should be on Windows. Then this Windows-based node should be used for LDAP integration.

 

Best regards,

Bogdan

Bogdan Spasibov,



A quick clarification on LDAP integration with web farm setup.



Say, I have 2 nodes running in the .Net framework, Do I need to perform the LDAP setup in both nodes and update the required web.config files in both nodes?



Regards,

Bhoobalan Palanivelu.

 

Bhoobalan Palanivelu,



Hi.



That's correct. Please apply the changes on both nodes. 



Yurii.

 

Show all comments