Is there any setting to avoid sending mails to persons outside the company (for example @yahoo.com) on the test environments? We want to avoid sending the test mails to wrong persons or to wrong email addresses.

Like 1

Like

1 comments

You need to create a replacing view module for EmailMessagePublisherPage and EmailPageV2 and add the following replacement of the checkSenderBeforeSend method in both schemas methods:

checkSenderBeforeSend: function() {
				var recipient = this.get("Recepient");
				var copyRecipient = this.get("CopyRecepient");
				var blindCopyRecipient = this.get("BlindCopyRecepient");
				var allRecipientsList = recipient + copyRecipient + blindCopyRecipient;
				var isYahooMailboxPresent = allRecipientsList.indexOf("yahoo.com") != -1;
				if (isYahooMailboxPresent) {
					this.showInformationDialog(this.get("Resources.Strings.YahooMailboxIsInTheRecipients"));
					return;
				}
				this.callParent(arguments);
			},

Additionally you need to create a localizable string in both replaced modules with the YahooMailboxIsInTheRecipients code and the value you need (this will be a popup notification that there is the yahoo.com domain mailbox in the list of email recipients). As a result such email won't be sent (page refresh is required once these changes are applied) and end users will see the popup. 

Show all comments

Hi all,

I am looking for a way to highlight js c# code in a rich text field.

Especially we want to use it in the knowledge base in creatio.

 

 

Is there a way to do this?

 

Regards,

Oliver

Like 0

Like

5 comments

Hi Oliver,

You can possibly do it and here is small instruction on how:

1) At first write an example of a code you want to highlight and do it manually using the options above the text. Save the result.

2) Get the value of this field from the database, it should look something like this:

 <div>hello there&nbsp;</div>  <div>&nbsp;</div>  <div>define(&quot;PrcAcceptanceCertificate777ab4cfSection&quot;, [], function() {<br /> &nbsp;&nbsp; &nbsp;return {<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;entitySchemaName: &quot;PrcAcceptanceCertificate&quot;,<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,<br /> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;methods: {}<br /> &nbsp;&nbsp; &nbsp;};<br /> });<br /> &nbsp;</div>  <div>&nbsp;</div> 

3) In this value take a look at how the system applies styles, you need to do it automatically in your method.

4) Write a method that will apply needed highlights to your text.

var text = this.get("Notes");

text.DoSomethingToModifyIt();

this.set("Notes", text);

Probably the hardest point would be finding the js code in the whole text because for the system there are no differences between a normal sentence or parts of the code. But if you manage to do it, then applying highlights is not that difficult to do.

 

Hi,

 

phew, that sounds like a lot of work.



I was thinking more of a js library that you can just use.

There must already be something integrated in creatio, because there is the source code area. Couldn't we just use that somehow?

 

Or a component in the editor like here in the community area

 

Regards,

Oliver

Oliver Herzog,

Slightly misunderstood what are you trying to do.

Can you please specify what source code area you are referring to?

Sorry for the misunderstanding!

 

I just want c#, js or html to be displayed "nicely" in the richtext editor. In the first post you can see how it should not look like.

 

No logical check or something like that.



Something like the code snippet function here in the community.

 

Oliver Herzog,

Unfortunately, right now highlighting the code lines like the "Code snippet" function is impossible on the system itself due to a base logic of RICH_TEXT fields.

I registered your suggestion for our R&D team, thank you for your idea.

Show all comments

Hi Team,

 

I am trying to read the current user's role by using the following custom logic.

GetCurrentUserRole: function(){
				var scope = this;
				var esq = Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "SysUserInRole"});
				esq.addColumn("SysRole");
				esq.filters.add("UserFilter", Terrasoft.createColumnFilterWithParameter(
    				Terrasoft.ComparisonType.EQUAL, "SysUser", Terrasoft.SysValue.CURRENT_USER.value
				));
				esq.getEntityCollection(function(result) {
					if (!result.success || result.collection.getItems().length === 0) {return;}
					result.collection.each(function(item) { 
						var role = item.get("SysRole");
						var roleName = role.displayValue;
						var roleId = role.value;
						this.console.log("roleName: ",roleName);
					});
				}, this);
				return true;
			},

The above code works perfectly fine while logged in as a Normal user, but the same doesn't work for Portal users. For portal users, the "roleId" variable gives the correct Id but the variable "roleName" shows as a blank string("") because it is not reading the displayValue.

 

To address the issue, I have added "SysUserInRole" and "SysAdminUnit" in the lookup named "List of objects available for portal users". Also the Object permissions for both the tables are default. But still no luck in getting the desired output.

 

Request any suggestions or additional steps that I need to perform to get the displayValue of current user role while logged in as a portal user.

 

Regards,

Sourav Kumar Samal

Like 0

Like

1 comments
Best reply

Hi Sourav,

 

I was able to achieve the result needed by adding the "System administration object" schema to the "List of objects available for portal users" lookup and relogin under the portal user. Try the same approach on your side, it should work.

Hi Sourav,

 

I was able to achieve the result needed by adding the "System administration object" schema to the "List of objects available for portal users" lookup and relogin under the portal user. Try the same approach on your side, it should work.

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