Hello Community!

I'm testing a Soap Service in Creatio, but I'm getting the following error when trying to do the Test inside the webservice:

 

No Action header was found with namespace 'http://www.w3.org/2005/08/addressing' for the given message

 

Has anybody got this?  How can I "include" this in the service?

 

Thank you!

Like 0

Like

1 comments

Dear Cesar,

 

Thanks for your question.

 

To find the root cause of the issue, please contact us at support@creatio.com, and we'll help you out!

 

Best regards,

Anastasiia

Show all comments

Hello,

 

I am trying to build a business process that runs when a new SMS message is received. However, the Twilio SMS connector uses direct insert statements in the DlbSmsService source code object instead of the EntitySchema (ORM). Is there another way of firing off this business process without having to duplicate the entire SMS connector and changing out the method myself?

 

Thanks in advance.

Like 0

Like

2 comments
Best reply

Hi Josh,

 

I've not had an issue with processes triggering the signal on record added to DlbSmsMessage. I also saw the code in the DlbSmsService using the direct Insert, but that is for a record in DlbSmsConnectorMessageLog, not the SMS message itself. The code starts a background task to a class in the Files of the package (assuming). Have you not been able to trigger the start signal on record added SMS message? (That *is* working for me)

Ryan

Hi Josh,

 

I've not had an issue with processes triggering the signal on record added to DlbSmsMessage. I also saw the code in the DlbSmsService using the direct Insert, but that is for a record in DlbSmsConnectorMessageLog, not the SMS message itself. The code starts a background task to a class in the Files of the package (assuming). Have you not been able to trigger the start signal on record added SMS message? (That *is* working for me)

Ryan

You were absolutely right! Thank you very much for your help.

Show all comments

Is there a way to hide the button on a detail page when the parent page status has changed upon checking on initialize?

 

I tried to create an attribute that will be set to true when the parent status is 'order processing' and bind it to the visible property of the button but it doesn't work.

 

"className": "Terrasoft.ConfigurationGrid",
"generator": "ConfigurationGridGenerator.generatePartial",
"generateControlsConfig": {"bindTo": "generateActiveRowControlsConfig"},
"changeRow": {"bindTo": "changeRow"},
"unSelectRow": {"bindTo": "unSelectRow"},
"onGridClick": {"bindTo": "onGridClick"},
"activeRowActions": [
	{
		"className": "Terrasoft.Button",
		"style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
		"tag": "save",
		"markerValue": "save",
		"imageConfig": {"bindTo": "Resources.Images.SaveIcon"},
		"visible": {"bindTo": "IsOrderProcessing"}
	},...
init: function() {
	debugger;
	this.callParent(arguments);
 
	var orderId = this.$MasterRecordId;
	var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "Order"
	});
 
	esq.addColumn("Status", "Status");
	esq.getEntity(orderId, function (result) {
		debugger;
		if (!result.success) {
			this.showInformationDialog("Data query error");
			return;
		}
		if (result.entity) {
			var orderStatus = result.entity.get("Status");
 
			if (orderStatus.value === "3f7523c5-f066-4bb6-bfd8-b2156fb42f13") { // Order Processing
				this.set("IsOrderProcessing", true);
			}
			else {
				this.set("IsOrderProcessing", false);
			}
		}
 
	}, this);
}

 

Like 0

Like

1 comments

Hello all,

 

I am trying to enable access for a portal user to trigger a service within Creatio. I'm following the steps as listed in this academy page but when I try to declare _baseService and publish, I receive an error saying that GlbInterviewService is "'GlbInterviewService' is a namespace but is used like a type"

 

namespace Terrasoft.Configuration.KeenGlbInterviewService
{
	using System;
	using System.IO;
	using System.Collections.Specialized;
	using System.Globalization;
	using System.Runtime;
	using System.Runtime.Serialization;
	using System.ServiceModel;
	using System.ServiceModel.Web;
	using System.ServiceModel.Activation;
	using System.Threading;
	using System.Threading.Tasks;
	using System.Web;
	using Terrasoft.Core;
	using Terrasoft.Core.Factories;
	using Terrasoft.Web.Common;
    using Terrasoft.Web.Common.ServiceRouting;
 
	#region Class: KeenGlbInterviewService
 
	[DefaultServiceRoute, SspServiceRoute]
	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class KeenGlbInterviewService : BaseService
	{
 
		#region Methods: Public
		private static readonly GlbInterviewService _baseService = new GlbInterviewService();
 
		[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public InterviewServiceResponse Start(InterviewServiceRequest request)
		{
			return _baseService.Start(request); 
		}
 
		[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
		public InterviewServiceResponse Complete(InterviewServiceRequest request)
		{
			return _baseService.Complete(request);
		}
 
		#endregion
 
	}
 
	#endregion
 
	#region DataContract
 
	[DataContract]
	public class InterviewServiceResponse : ConfigurationServiceResponse
	{
		[DataMember(Name = "isSuccess")]
		public bool IsSuccess {get; set;}
	}
 
	[DataContract]
	public class InterviewServiceRequest
	{
		[DataMember(Name = "interviewId")]
		public Guid InterviewId { get; set; }
	}
 
	#endregion
 
}

From what I can tell I've set everything up exactly as the article says but I still receive the error. Though they declare _baseService the same way. Any suggestions as to what I could be doing wrong?

Like 0

Like

3 comments
Best reply

Kevin Brady,

 

Ok, according to the error you should have the Terrasoft.Configuration.GlbInterviewService namespace in your system, but you try to create a new method that has the same name as the namespace (as well as your current class KeenGlbInterviewService has the same name as your namespace Terrasoft.Configuration.KeenGlbInterviewService). So theoretically adding "using Terrasoft.Configuration.GlbInterviewService" to your code should fix this issue, but still you need to rename either classes or namespaces since they shouldn't have the same name.

Hello Kevin,

 

I used the same exact code and created a source code in my local app and it didn't return error messages. Try recreating it and also check if the error message is returned from the source code you've shared.

Oleg Drobina,

I recreated the code and also tried pasting the above code directly back into Creatio to ensure that there weren't any changes that occurred in creating this post and I still received the error.

Kevin Brady,

 

Ok, according to the error you should have the Terrasoft.Configuration.GlbInterviewService namespace in your system, but you try to create a new method that has the same name as the namespace (as well as your current class KeenGlbInterviewService has the same name as your namespace Terrasoft.Configuration.KeenGlbInterviewService). So theoretically adding "using Terrasoft.Configuration.GlbInterviewService" to your code should fix this issue, but still you need to rename either classes or namespaces since they shouldn't have the same name.

Show all comments

Hello!



Where can I find Accounts and Contacts, excluded from duplicates search as 'Not duplicate'?

There are doubts and some of same mistakenly were marked as 'Not duplicate' in global duplicates search and it is necessary to remove this mark

 

Thank you!

Like 0

Like

3 comments

Hello,

 

Can you please specify what Creatio version you have and also your Deduplication service version?

Hi Mira Dmitruk,

Sales Team. Version 8.0.3.2908 (Cloud)

How can I found Deduplication service version?

Hello,

 

For the mechanism of Bulk duplicates search using the deduplication service, in order to reset the "Not duplicates" flags of all marked packs of duplicates on the deduplication service, it is necessary to clean the UniqueEntity table in mongodb.

In future releases, it should be possible to change the logic of the "not a duplicate" mark so that this action can be canceled by basic tools.

 

In case you use the deduplication service in cloud, and you get the situation when you need to clean the table with "not a duplicate" in mongo, please don't hesitate to contact us and we will help you to clean it.

Show all comments

Hi,

 

Once the activity is created by DCM, I want to show only the activity which is assigned to the current user. Any lead woul help.

 

Regards,

Sourav

Like 1

Like

3 comments

Hello,

 

You can create a business process that grants read permission to an activity only to its owner.

 

More about the business process element "Change access rights":

https://academy.creatio.com/docs/user/bpm_tools/process_elements_refere…

Cherednichenko Nikita,

 

I have already tried this approach. Although it works perfectly fine for Activity section, but under DCM it still shows the Activity which I want to show or hide conditionally.

 

Regards,

Sourav

Sourav Kumar Samal,

 

If you remove read permissions for other users, then only the responsible user will be able to see this record.

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

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