Dear colleagues

 

I'm trying the connector, but have several doubts, please anybody can help me?

 

  1. Sent (confirmed) SMS didn't updated on Creatio, Delivery status remains Queued forever. Is that a limitation of the integration or a limitation of the Trial Twilio account?
  2. Also didn't receive responses from sent SMS, if a user answer a received SMS on Creatio this SMS is not received
  3. When I sent an SMS from a process if I want to connect the SMS with another object than the contact I didn't find how to get the id of the sent SMS, so the User task the connector provides, hasn't provided the id of the sent SMS, the only id or lookup I can get is the contact id. How can I determine the id of the sent SMS?

Thanks in advance

 

Best regards

Like 1

Like

6 comments
Best reply

Hi Julio,

The responsible team released the updated version of the connector where issues 1 and 4 have been fixed. This package is already available on Creatio Marketplace. Please install the new package version and check the updates.

I have no news regarding the third issue. I will keep you updated.

sorry I forgot another problem I'm having. When I sent the same message from a process, 2 SMS were sent, if I send one from the contact, just send one. Some idea what could be wrong?

With this process 2 SMS are received

Hi Julio,

We have updates regarding your questions:

1. We reproduced the issue with Queued Delivery status and submitted it to the responsible developer.

2. We require more information to investigate the second issue. Please check whether the sent SMS appeared on the 'Messages log' tab in your Twilio account.

3. This feature is not supported in the user task. I have forwarded your feedback to the responsible developer.

4. We require more information to investigate the issue with 2 SMS sent by the process as well. Please make sure that only one instance of the business process was run in the Process log.

Thank you and we await your reply.

Irina Lazorenko,

Hi Irina,

 

Thanks for your reply, and please confirm us as soon questions 1 and 3 were resolved.

  • Regarding question 4, the sent SMS's were managed by an internal from the connector, the User Task called “Send SMS through Twilio”.
  • Additional info regarding what was happening here is:
    • When sent an SMS from a user process using this User Task, we receive the most of times the SMS twice, but always two SMS records are created on Creatio Section DlbSmsMessage
    • When sent an SMS from the communication panel of a contact it works OK, and just one SMS is delivered, so this symptom reinforces the suspect the culprit of the 2 sent SMS and created records, was the User task “Send SMS through Twilio
  •  Regarding question 2: We won't need to solve this "problem" for now because:
    • The client confirms that he will not need to receive SMS, only send.
    • The problem could be related with a numbering issue due to the Twilio provided phone number to send SMS. Current provided number is from the USA/Arizona, and we need to send SMS to Spanish numbers, so could be there some restriction to Spanish numbers to send/answer SMS to a foreign number…
    • When our customer needs to receive SMS, we will be back to determine where the problem is: The provided numeration, some Twilio restriction or whatever

 

Thanks again and best regards

 

Hi Julio,

The responsible team released the updated version of the connector where issues 1 and 4 have been fixed. This package is already available on Creatio Marketplace. Please install the new package version and check the updates.

I have no news regarding the third issue. I will keep you updated.

Irina Lazorenko,

Thanks Irina, we will check it right now

Show all comments

Dear,

Is it possible to add a new MessageTemplateType into Creatio ?

I can not find any lookup for this element.

In the database i can find the records, but can i add a new record and how to ?

Thank you

Nicolas

Like 0

Like

1 comments

Dear Nicolas,

 

Thanks for reaching out.

 

To add a new Message type, please register the lookup Template type based on the object Message Template type. This way, you will be able to create a new Template type.

 

Please let us know if additional questions arise, we will gladly assist you!

 

Best regards,

Anastasiia

Show all comments

Hi Community,

 

On an Editable Section, I want to lock the Quantity Column when Status changes to In Stock. Is their any way I can do this?



I tried to use the Business Rules on Page but it seems that it doesn't work on Section.

Like 1

Like

2 comments

Unfortunately at the moment, Business Rules don't work with details with the editable section.

We have already registered a problem to fix it in future releases. I attached this case to increase its priority.  

Михайло Зеленюк,

 

Yes this is a very important ask, suddenly changes can be made that were not before.



Thanks,



Damien

Show all comments

Hi all,

 

I wanted to add a mini page to add a record to a detail that does not exist as a section. It is created based on a new object. How can we achieve this?

 

Thank you.

Geeviniy

Like 0

Like

1 comments

Hello Geeviniy, 

 

You can add and configure a mini page for the section. In case you have a custom object and there is obviously no oob section created based on such object, you can create such section from your side, configure mini page and further hide this section from the workplace. This way you'll have the mini page for a detail created based on this custom object and section won't bother you as it's not added to any workplace, therefore not available for users from UI.



Adding mini page to the detail without creating a section based on it's object can be achieved only with a help of additional development.

 

We've also registered a corresponding query for our responsible R&D team to consider implementing the requested functionality in the upcoming versions of a system.



Best regards,

Anastasiia

Show all comments

Hi,

 

I have an issue on getting the message argument from subscribe that the argument is undefined. I want to get the message from page on initialize if status is "On Processing" so I can able to hide or lock columns to a details on load.

 

Here is the publish from the Page:

				esq.getEntity(recordId, function(result) {
					if (!result.success) {
						// For example, error processing/logging.
						this.showInformationDialog("Data query error");
						return;
					}
					var status = result.entity.get("Status");
 
					if(status.displayValue === "Order Processing"){
						this.set("ButtonVisible", false);
					}
					debugger;
					if(status.displayValue !== "Draft"){
						this.sandbox.publish("CheckOrderDraft", {IsDraft: false}, []);
					}else{
						this.sandbox.publish("CheckOrderDraft", {IsDraft: true}, []);
					}
 
				}, this);



Here is the subscribe on Detail:

 

			init: function(){
				this.callParent(arguments);
				debugger;
				this.sandbox.registerMessages(this.messages);
				this.processMessages();
 
			},
			processMessages: function(){
				debugger;
				this.sandbox.subscribe("CheckOrderDraft", this.onCheckOrderDraft(), this, []);
			},
			onCheckOrderDraft: function(arg){
				if(!arg){
					debugger;
					this.set("canDistributorEdit", false);
				}
			}



 

Like 0

Like

3 comments

Hi,

 

The issue can be that esq is asynchronous and the message is passed when the subscribe to message is not initialized. Or the message itself is not initialized on the detail. You need to debug the code execution and see the exact place when the message is formed and then passed to the detail subscribe and handler and analyze the call stack and chain of executions to see where the issue comes from.

Your right Oleg. The ESQ was executed first before the message was initialized on the Detail module. Do you have a suggestion on how I can able to get Status from a Page to the Detail on load? 

 

Joseph Francisco,

 

I could advice either using the Terrasoft.chain construction (find examples in the sources in the code on the UI) to execute functions one by one once the page is initialized or call this method not on the page load, but once the page is loaded (like button click). 

Show all comments

Dear,

I m trying to copy an email Model HTML content into a section textarea.

Here's my code:

onUsrModeleIdChange: function() {
 
	var ModeleId = this.get("UsrModeleId").value;
 
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "EmailTemplate"
	});
	esq.addColumn("Body");
 
	esq.filters.add("IdFilter", esq.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "Id", ModeleId));
 
	esq.getEntity(ModeleId, function(result) {
 
		var BodyContent=result.entity.get("Body");
 
		this.set("Corps", BodyContent);
	});
},

I get the BodyContent variable, but the this.set comes out in error:

I don't understand why the this.set does not works.

Is it because the field is an textArea ?

Thank you !

Nicolas

 

Like 0

Like

3 comments
Best reply

As an FYI, you can retain the scope by passing this as the final parameter to the ESQ getEntity. 

esq.getEntity(ModeleId, function(result) {
    var BodyContent=result.entity.get("Body");
    this.set("Corps", BodyContent);
}, this); // note 'this' passed as final parameter

This is also the case with getEntityCollection:

esq.getEntityCollection(function(result) {
    // scope retains 'this' context
}, this);

Ryan

context error...

i used: var scope = this; to reach the object

onUsrModeleIdChange: function() {
	var scope = this;
 
	var ModeleId = this.get("UsrModeleId").value;
 
	var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "EmailTemplate"
	});
	esq.addColumn("Body");
 
	esq.filters.add("IdFilter", esq.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "Id", ModeleId));
 
	esq.getEntity(ModeleId, function(result) {
 
		var BodyContent=result.entity.get("Body");
 
		scope.set("Corps", BodyContent);
		scope.save();
	});
},

 

As an FYI, you can retain the scope by passing this as the final parameter to the ESQ getEntity. 

esq.getEntity(ModeleId, function(result) {
    var BodyContent=result.entity.get("Body");
    this.set("Corps", BodyContent);
}, this); // note 'this' passed as final parameter

This is also the case with getEntityCollection:

esq.getEntityCollection(function(result) {
    // scope retains 'this' context
}, this);

Ryan

Ryan Farley,

Hello Ryan and thank you for the reply !

Do you know how i can retrieve the message template Body in french ?

Ryan Farley writes:

var BodyContent=result.entity.get("Body"); //in french ?

Show all comments

Hi there,

 

I have a requirement to trigger a business process with a parameter value from an anonymous web service and get errors while publishing the code in the Creatio environment. Below I have mentioned the complete code of the web service and the error screenshot of the error.

 

Note: I have pre-created the business process with the parameter and written the web service.

I referred other community articles such as 

https://community.creatio.com/articles/web-service-without-authorizatio…

https://community.creatio.com/questions/calling-business-process-parame…

These codes currently seem to be outdated and not working in the Atlas version of creatio. Please give me suggestions to resolve this issue.

 

Code :

 

/* The custom namespace. */

namespace Terrasoft.Configuration.WSO2WSConfirmationServiceNamespace

{

    using System;

    using System.ServiceModel;

    using System.ServiceModel.Web;

    using System.ServiceModel.Activation;

    using Terrasoft.Core;

    using Terrasoft.Web.Common;

    using Terrasoft.Core.Entities;

    using Terrasoft.Core.Process;

    using Terrasoft.Core.Process.Configuration;

    [ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class WSO2WSConfirmationService : BaseService

    {

        /* The link to the UserConnection instance required to access the database. */

        private SystemUserConnection _systemUserConnection;

        private SystemUserConnection SystemUserConnection

        {

            get

            {

                return _systemUserConnection ?? (_systemUserConnection = (SystemUserConnection)AppConnection.SystemUserConnection);

            }

        }

        /* The method that returns the confirmation of buttons. */

        [OperationContract]

        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,

        ResponseFormat = WebMessageFormat.Json)]

        public string ConfirmationService(string guid, bool status)

        {

            new Guid(guid);

            string result = "Guid is missing";

            if (!string.IsNullOrEmpty(guid)) {

                if (status == false)

                {

                    var manager = UserConnection.ProcessSchemaManager;

                    var processSchema = manager.GetInstanceByName("WSO2Process_3c0d24a");

                    var moduleProcess = processSchema.CreateProcess(UserConnection);

                    if (processSchema.Parameters.ExistsByName("ProcessSchemaConfirmationId"))

                    {

                        moduleProcess.SetPropertyValue("ProcessSchemaConfirmationId", guid);

                    }

                    moduleProcess.Execute(UserConnection);

                    /*ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("WSO2Process_3c0d24a");

                    //schema = UserConnection.ProcessSchemaManager.GetInstanceByUId(leadManagementProcessUId);

                    //different engines for interpretable and compiled BP

                    bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);

                    if (canUseFlowEngine)

                    {

                        var flowEngine = new FlowEngine(UserConnection);

                        var param = new Dictionary();

                        param["ProcessSchemaConfirmationId"] = guid.Id.ToString();

                        flowEngine.RunProcess(schema, param);

                        

                    }

                    else

                    {

                        Process process = schema.CreateProcess(UserConnection);

                        process.SetPropertyValue("ProcessSchemaConfirmationId", guid.Id);

                        process.Execute(UserConnection);

                    }*/

                    result = "Response posting is cancelled, You can close this tab";

                }

                else {

                    result = "WSO2 endpoint intergration is pending";

                

                }

            }



            

            return result;

        }

    }

}

File attachments
Like 0

Like

1 comments

Found the answer for this mentioned issue, Please refer to the code below. Using IProcessExecutor, this can be simply achieved in the 8.0 version.

/* The custom namespace. */

namespace Terrasoft.Configuration.WSO2WSConfirmationServiceNamespace

{

    using System;

    using System.ServiceModel;

    using System.Collections.Generic;

    using System.ServiceModel.Web;

    using System.ServiceModel.Activation;

    using Terrasoft.Core;

    using Terrasoft.Web.Common;

    using Terrasoft.Core.Entities;

    using Terrasoft.Core.Entities.Events;

    using Terrasoft.Core.Process;

    using Terrasoft.Core.Process.Configuration;

    [ServiceContract]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class WSO2WSConfirmationService : BaseService

    {

        /* The link to the UserConnection instance required to access the database. */

        private SystemUserConnection _systemUserConnection;

        private SystemUserConnection SystemUserConnection

        {

            get

            {

                return _systemUserConnection ?? (_systemUserConnection = (SystemUserConnection)AppConnection.SystemUserConnection);

            }

        }

        /* The method that returns the confirmation of buttons. */

        [OperationContract]

        [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,

        ResponseFormat = WebMessageFormat.Json)]

        public string ConfirmationService(string guid, bool status)

        {

            try

            {

                new Guid(guid);

                string result = "Guid is missing";

                if (!string.IsNullOrEmpty(guid))

                {

                    if (status == false)

                    {

                        {

                            // getting  IProcessExecutor

                            IProcessExecutor processExecutor = SystemUserConnection.ProcessEngine.ProcessExecutor;

                            // List of input parameters

                            var inputParameters = new Dictionary<string, string>

                            {

                                ["ConfirmationId"] = guid.ToString(),

                            };

                            //code of the process

                            string processSchemaName = "WSO2Process_3c0d24aCustom1";

                            //execute the process

                            ProcessDescriptor processDescriptor = processExecutor.Execute(processSchemaName, inputParameters);

                            //return processDescriptor;

                        }

                        

                        result = "Response posting is cancelled, You can close this tab";

                    }

                    else

                    {

                        result = "WSO2 endpoint intergration is pending";

                    }

                }

                return result;

            }

            catch (Exception ex)

            {

                return "GUID error - " + ex.Message; 

            }

            

        }

    }

}

 

 

Thanks

Show all comments

I created an Operation Permission that will check if the user has limited access to the section and override the getViewOptions but the problem is getViewOptions was run first before the RightUtilities.checkCanExecuteOperation which checks the access of the user.



How can I able to check the user access and then override the getViewOptions?

getViewOptions: function () {
    var CanManageAccessRight = this.get("CanManageAccessRight");
 
    if (!CanManageAccessRight) {
        return this.Ext.create("Terrasoft.BaseViewModelCollection");
    } else {
        return this.callParent(arguments);
    }
}
checkCanManageAccessRight: function(callback) {
	RightUtilities.checkCanExecuteOperation({ operation: "CanManageAccessRight" }, function (result) {
		this.set("CanManageAccessRight", result);
	}, this);
}

 

Like 0

Like

1 comments

Hello,

 

You need to review which function is called before the getViewOptions method in the call stack in the developer console and use the operation permission in that method and only then call the getViewOptions method or not based on the result of the checkCanExecuteOperation method execution.

Show all comments

I installed the add on https://marketplace.creatio.com/app/access-rights-setup-wizard-creatio and is not showing in English the labels.

I tried to modify the process but is not finding the edit page element.

 

 

Like 0

Like

6 comments

Hi Federico,

The first screen you posted is a different element.

It asks an option between temp (Временные права) or permanent rights (Постоянные права).

 

The next screen, where you are asking for the page caption is for permanent rights.

Go to config, look for an IQ package to see all items of that add-on, or type in "IQSetRights" and you'll find both pages there.

Hi Federico,



This issue was fixed in the new version. The translation was added as well. You can download the updated version here:

 

https://marketplace.creatio.com/app/access-rights-setup-wizard-creatio

Hi Yevhen, seams to be the last version is not working in 8.0.3

 

I got error compatibility

 

2022-09-21 18:55:54,389 Cargado archivo: IQ_1.3 (2).zip 100%

2022-09-21 18:55:54,587 Inicio de validación de paquetes

2022-09-21 18:55:58,486 Paquetes han sido validados

2022-09-21 18:55:58,692 Se inició la copia de seguridad de configuración.

2022-09-21 18:55:58,812 Cargando paquetes desde el archivo

2022-09-21 18:55:59,302 System.AggregateException: One or more errors occurred. ---> Terrasoft.Core.Packages.Exceptions.InvalidDescriptorInFileSystemException: Descriptor no válido:

Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

Ruta: ActualizeRightTypeData ---> Terrasoft.Common.InvalidObjectStateException: Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

   at Terrasoft.Core.Packages.PackageFileStorage.Read(DataReader reader, SqlScriptDescriptor sqlScriptDescriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.InitializeDescriptor[T](Action`2 initializeDescriptor, String descriptorFilePath, T descriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.CreateDescriptor[T](String directoryPath, Action`2 initializeDescriptor)

   --- End of inner exception stack trace ---

   --- End of inner exception stack trace ---

   at Terrasoft.Core.Applications.Packages.Operations.PackageZipOperations.ThrowIfPackageStorageItemErrorsExist(PackageStorage packageStorage)

   at Terrasoft.Core.Applications.Packages.Operations.PackageZipOperations.Load()

   at Terrasoft.Core.Applications.Installation.Backup.ZipPackageBackupManager.ComposePackages(String sourcePackagesPath, String tempFilesPath)

   at Terrasoft.Core.Applications.Installation.Backup.ZipPackageBackupManager.CreateBackup(String sourcePackagesPath, String tempFilesPath, String backupPath, String code)

   at Terrasoft.Core.ServiceModelContract.PackageInstaller.PackageInstallerServiceInternal.<>c__DisplayClass26_0.<CreateBackup>b__0()

   at Terrasoft.Core.ServiceModelContract.PackageInstaller.BaseInstallerServiceInternal.InvokeWithLogging(Action action)

---> (Inner Exception #0) Terrasoft.Core.Packages.Exceptions.InvalidDescriptorInFileSystemException: Descriptor no válido:

Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

Ruta: ActualizeRightTypeData ---> Terrasoft.Common.InvalidObjectStateException: Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

   at Terrasoft.Core.Packages.PackageFileStorage.Read(DataReader reader, SqlScriptDescriptor sqlScriptDescriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.InitializeDescriptor[T](Action`2 initializeDescriptor, String descriptorFilePath, T descriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.CreateDescriptor[T](String directoryPath, Action`2 initializeDescriptor)

   --- End of inner exception stack trace ---<---

---> (Inner Exception #1) Terrasoft.Core.Packages.Exceptions.InvalidDescriptorInFileSystemException: Descriptor no válido:

Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

Ruta: CreateDeleteTrigger ---> Terrasoft.Common.InvalidObjectStateException: Lectura de la propiedad "BackwardCompatibilityConfirmed" no admitida

   at Terrasoft.Core.Packages.PackageFileStorage.Read(DataReader reader, SqlScriptDescriptor sqlScriptDescriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.InitializeDescriptor[T](Action`2 initializeDescriptor, String descriptorFilePath, T descriptor)

   at Terrasoft.Core.Packages.PackageFileStorage.CreateDescriptor[T](String directoryPath, Action`2 initializeDescriptor)

   --- End of inner exception stack trace ---<---

 

 

Federico Buffa ?,

 

Hi Federico!

Thank you for your feedback. We have already fixed this problem and appreciate your input. Please try installing the package again.

Seams to be working now. Thanks,

Yevhen Vorobiov,

Im getting a compile error after install. Im using 8.0.3 Sales enterprise

 

Show all comments

Dear Creatio community,

 

we are looking for a way for adding a position number to product positions in invoices and orders.

Is there any out of the box solution that we don't know of or did you implement your own logic for this issue?

 

Thanks a lot

Markus

Like 0

Like

2 comments
Best reply

Hello Markus,



This feature is available in 8.x sections and pages OOTB in Application Hub. You should create an Application and add sections and pages based on existing objects. The "list" tool will help you to achieve the needed list view.

 

In the 7.x pages - there is no no-code solution, you would need development to add numeration to OrderPageV2 and InvoicePageV2 details.

 

I hope my answer was useful for you!

 

Best Regards,

Dan

Hello Markus,



This feature is available in 8.x sections and pages OOTB in Application Hub. You should create an Application and add sections and pages based on existing objects. The "list" tool will help you to achieve the needed list view.

 

In the 7.x pages - there is no no-code solution, you would need development to add numeration to OrderPageV2 and InvoicePageV2 details.

 

I hope my answer was useful for you!

 

Best Regards,

Dan

Thank you very much! 

We will test it out :)

Show all comments