Hi guys,

I am working on a custom "ContactFieldConverter" [the thing that splits the Contact's FullName imported by excel/ webserveces etc] in order to split new contact's names into "GivenName" and "Surname", and preventing the OOTB function from filling in the "MiddleName" column.

In order to do so, I created a custom ContactGsFieldConverter in my package and inserted the value of the Separator and Converter in the Lookup "ShowNamesBy" and sysSetting "ContactFieldConverter".

[myContactGsFieldConverter code:]

 

 namespace Terrasoft.Configuration {
	using System;
	using System.Linq;
	using System.Text;
	using Terrasoft.Common;
	using Terrasoft.Configuration;
 
	#region Class: myContactGsFieldConverter
 
	/// <summary>
	/// Contact "Full name" field converter class.
	/// Separates "Full name" string using "Given name Surname" rule.
	/// </summary>
	public class myContactGsFieldConverter : IContactFieldConverter
	{
 
		#region Properties: Public
 
		/// <summary>
		/// Contact "Full name" separator characters array.
		/// </summary>
		private char[] _separator = { ' ' };
		public char[] Separator {
			get {
				return _separator;
			}
			set {
				_separator = value;
			}
		}
 
		#endregion
 
		#region Methdos: Public
 
		/// <summary>
		/// <see cref="IContactFieldConverter.GetContactSgm"/>
		/// </summary>
		/// <remarks>
		/// After splitting <paramref name="name"/> first element will be used as <see cref="ContactSgm.GivenName"/>,
		/// Everything else as <see cref="ContactSgm.Surname"/>.
		/// </remarks>
		ContactSgm IContactFieldConverter.GetContactSgm(string name) {
			var sgm = new ContactSgm();
			if (string.IsNullOrEmpty(name)) {
				return sgm;
			}
 
			var array = name.Split(Separator, StringSplitOptions.RemoveEmptyEntries);
			switch (array.Length) {
				case 0:
					return sgm;
				case 1:
					sgm.GivenName = array[0];
					break;
				case 2:
					sgm.GivenName = array[0];
					sgm.Surname = array[1];
					break;
				default:
					sgm.GivenName = array[0];
					StringBuilder sb = new StringBuilder();
					for (var i = 1; i <= array.Length - 1; i++) {
						sb.AppendFormat("{0} ", array[i]);
					}
					sgm.Surname = sb.ToString().Trim();
					break;
			}
			return sgm;
		}
 
		/// <summary>
		/// <see cref="IContactFieldConverter.GetContactName"/>
		/// </summary>
		/// <remarks>
		/// "Full name" string will be created using "Given name [Middle name] Surname" rule.
		/// </remarks>
		public string GetContactName(ContactSgm sgm) {
			var concatChar = Separator.FirstOrDefault();
			return new[] { sgm.GivenName, sgm.MiddleName, sgm.Surname }.ConcatIfNotEmpty(concatChar.ToString());
		}
		#endregion
	}
	#endregion	
}

The converter is not working. I tried to debug and noticed that my contact converter is returned as null to [this is a method in the Contact c# object]: 

public virtual void SetSgm(Contact contact) {
			if (contact == null) {
				return;
			}
			contact.FillSgmFields(GetContactConverter());
		}

Do you know if I need to do something specific in case of separate-assembly package?

ie: Using a different namespace for the converter/ setting the converter path in a different way within the system setting/ recreate the method on the Contact Object in my custom package.





Thank you in advance!

Like 1

Like

5 comments

Hello Federica,

 

I just completed the test - convertor works in the assembly package as well. The code (since we don't need middle name) was:

namespace Terrasoft.Configuration {
    using System;
    using System.Linq;
    using System.Text;
    using Terrasoft.Common;
    #region Class: UsrCustomContactFieldConverter
    /// &lt;summary&gt;
    /// Contact "Full name" field converter class.
    /// Separates "Full name" string using "Surname Given name" rule.
    /// &lt;/summary&gt;
    public class UsrCustomContactFieldConverter : IContactFieldConverter
    {
        #region Properties: Public
        /// &lt;summary&gt;
        /// Contact "Full name" separator characters array.
        /// &lt;/summary&gt;
        private char[] _separator = { ' ' };
        public char[] Separator {
            get {
                return _separator;
            }
            set {
                _separator = value;
            }
        }
        #endregion
        #region Methdos: Public
        /// &lt;summary&gt;
        /// &lt;see cref="IContactFieldConverter.GetContactSgm"/&gt;
        /// &lt;/summary&gt;
        /// &lt;remarks&gt;
        /// After splitting &lt;paramref name="name"/&gt; first element will be used as &lt;see cref="ContactSgm.Surname"/&gt;,
        /// second element as &lt;see cref="ContactSgm.GivenName"/&gt;
        /// &lt;/remarks&gt;
        ContactSgm IContactFieldConverter.GetContactSgm(string name) {
			var sgm = new ContactSgm();
			if (string.IsNullOrEmpty(name)) {
				return sgm;
			}
			var array = name.Split(Separator, StringSplitOptions.RemoveEmptyEntries);
			switch (array.Length) {
				case 0:
					return sgm;
				case 1:
					sgm.GivenName = array[0];
					break;
				default:
					sgm.GivenName = array[0];
					sgm.Surname = array[1];
					break;
			}
			return sgm;
		}
        /// &lt;summary&gt;
        /// &lt;see cref="IContactFieldConverter.GetContactName"/&gt;
        /// &lt;/summary&gt;
        /// &lt;remarks&gt;
        /// "Full name" string will be created using "Surname Given name" rule.
        /// &lt;/remarks&gt;
        public string GetContactName(ContactSgm sgm) {
            var concatChar = Separator.FirstOrDefault();
            return new[] { sgm.Surname, sgm.GivenName }.ConcatIfNotEmpty(concatChar.ToString());
        }
        #endregion
    }
    #endregion
 
}

and then this convertor was registered in the database (ShowNamesBy table). As a result newly created contacts where full name is Test 1 2 had the first (Test) and last (1) name only while middle name was skipped.

Hi Oleg Drobina,

Could you share with me the record registered in the database table ShowNamesBy for a separate assembly pkg?

Hence, in case the site receives a Contact "Name": "Federica Rose Cattani" I don't want to "lose" the "MiddleName" but I want it to be concat to the "Surname". That's what I did in the converter shared. 

Federica,

 

Hi,

 

Sorry, I guess I was wrong with the package. Tested the same approach today and it didn't work until I unchecked the "Compile into separate assembly" checkbox in the package settings. So in your case you need to also do the same to make the converter work.

 

The insert was:

INSERT INTO ShowNamesBy (Name, Separator, Converter) VALUES (N'UsrCustomContactFieldConverter', N' .,;', N'Terrasoft.Configuration.UsrCustomContactFieldConverter');

 

Oleg Drobina,

Ok! In my case I can't "undo" the separate assembly since it contains customer's implementation and separate assembly it's way faster to compile.

The actual possible workaround would be to implement a second package without separate assembly containing only the custom ContactGsFieldConverter, am I correct?

Hello, some conclusion regarding this, in Spain we have the same problem with names than in Italy

Show all comments

Hello I'm getting this issue after install the package from the marketplace https://marketplace.creatio.com/app/access-rights-setup-wizard-creatio

 

Like 0

Like

3 comments

Hi Federico!

I have installed this app and compiled the configuration successfully. Please send us more information to help us reproduce this issue:

1. What is your Creatio product and version?

2. When did you install the app? Was it the first installation or an update?

3. Have you modified the app package?

Hi Irina Lazorenko,

 

I update the version from the marketplace, I tried to delete the previous app and reinstalled and same issues shows up. Version is Sales Enterprise 8.0.4.1870.

There is a case open in support with the access to the site if you want to check.

Hi Federico!

To resolve this issue, take the following steps:

  1. Delete the Access rights setup wizard for Creatio app.
  2. Compile the configuration.
  3. Install the app from Creatio Marketplace.
Show all comments

Hi Community,

 

Do you have any example how to use asyncValidate during save and EntitySchemaQuery in freedom UI form page. I couldn't find more topics when it comes to client side coding in freedom UI.

 

 

Like 1

Like

6 comments

Hello Fulgen,

 

For creating the field validator - you need to use validators as described in the Academy article here. As for the ESQ in the Freedom UI page - unfrotunately we currently don't have any documentation on it, but we've created a task for our core R&D team to write the specification for ESQ usage in the Freedom UI page.

Hello Oleg,



Whether the document for the specification for ESQ usage in the Freedom UI page is prepared or when we can expect the documentation on the same.

Sivaranjani,

 

After verifying all the necessary information regarding specification for ESQ usage, I want to inform you that this task has been created and accepted. The process of writing such documentation may take some time, so for the moment you need to wait a while.



Thank you for your patience and understanding in this matter.

 

Sorry to jump in. Any update on the documentation?

Jahnavi,

Unfortunately the documentation is not ready yet. However, I have added your inquiry to the registered idea as to increase its priority and speed up the process.

Mira Dmitruk,

 

Any update on doing async validation in Freedom UI using validators? We need to use them, but don't have any examples in the academy as far as I can tell.

Show all comments

Can we hide a section from a workplace for a certain time frame?

 

Regards

Sivanesan

Like 0

Like

1 comments

Hello,

 

If you need to hide the section for some time for a specific user or group of users/role, you can simply remove the section for the needed time from a Workplace in which the user/group of users or specific user role is working and once needed add it to the Workplace again. 

You may also consider creating a separate Workplace for this user/users so it will be easier to manage. 

However, the user will still be able to access records or a section by a direct link for example, if you need to prevent it, we'd suggest considering changing access rights for the object for the user/user role. 



If we are talking about hiding a section for a specific timeframe, for example from 4 to 5 pm each day, such implementation can be done only by means of additional development. 

 

Best regards,

Yuliya Gritsenko

Show all comments

Hi Community,

 

Currently we are using Studio Enterprise, we've added new section from existing "Activity" object. Activity section is created having List and Dashboard view by default. How we can add the Calendar view here?

 

 

Like 0

Like

1 comments

Hello,

 

You can find the example oh how to add a Calendar view to a section in this Community post.

Show all comments

We are trying to set a dashboard to find out the user logged in to the system. We have set the below filter :

 

 

Question : When we try to login as a user then we need to see only that user usage and not the other user’s data also when the user manager logs in, then the manager needs to see his usage as well as the users associated to him in the org structure. How do we achieve this scenario?

 

Regards,

Mayan

Like 0

Like

1 comments

Hi,

 

Unfortunately, this task can not be achieved from the user's perspective 

You can create a custom widget, which allows you to upload data from the module which you customize yourself.



However, we will create a case for our R&D team on this matter so it may be implemented in the next releases.

Show all comments

Hi Community,

 

How display the account logo in account list page in freedom ui? I tried to add the column but image is not appearing.

 

Like 1

Like

1 comments

Hello,

 

Unfortunately, there is no option to display the account logo in the account list page in Freedom UI. 

We have registered an idea and forwarded it to our R&D team for further review.

 

Best regards,

Yuliya Gritsenko

Show all comments

Hello,

 

is it safe to unistall 'Customer 360' application that has appeared in our cloud system after upgrade to 8.0.6?

 

Thank you!

Vladimir

Like 2

Like

8 comments

Hello,

 

Please note that we do not recommend deleting this application, since there are base objects depending on it and it may resolve in issues on the site. If you don't intend using it, better to simply remove (hide) the sections from the workplaces instead of fully deleting it.

Mira Dmitruk,

We just have a situation that:



1. Our developing environment on-site is on 8.0.4

2. Customer test cloud environment is on 8.0.6

3. Customer production cloud environment is on 8.0.4



And there is object AccountAddress changed in 'Customer 360', but we cannot inhertit it cause otherwise our package will not work in production cloud. That gives us several issues



Kind regars,

Vladimir

I tried to uninstall this package on 8.0.6 because it impacted configuration I had previously made. Unfortunately we can't delete it. 

I am glad to have come upon this post!



Not that I am happy there is an issue, but you are avoiding us from doing a mistake. 8.0.6 does not seem the best Creatio version (albeit going in the right direction !)



Will refrain upgrading our on-premise clients past 8.0.5 until this is properly sorted out in 8.1.x (most probably will all the changes planned, 8.1.0 will not be properly ready either, and will wait for minor fixes first...)

Damien Collot,

1.1 is always better than 0.x :)

But here we have cloud

Vladimir Sokolov,

 

Could you please also specify the build of your systems?

Sales enterprise

I can see myself wanting to transition entirely to Creatio Studio. If all components that are used on OOTB sections/objects are available in the no-code designer, it feels like it's much better to start from scratch, given no customisation ends up like anything OOTB. 



I'm also hoping that there won't be performance issues for instances set up prior to 8.0.6 as it looks like so major changes of base packages on 8.1 forward

Show all comments

Account entries keep some messages under the Feed tab. I would like to export them. Is it possible?

 

Like 2

Like

3 comments
Best reply

Hello,

 

Unfortunately, it can't be done via the standard export.  

Feed is absolutely another object in the system and there is no way to export feed using the standard export tool. 

But you can run this SQL query on your side (which is an example for the "Accounts" section) that will return feed messages for all accounts:



select a.Name Account_Name, a.Address Account_Address, sm.Message Feed_message from Account a inner join SocialMessage sm on sm.EntityId=a.Id



And then upload these feed messages from the DB.

If you have any further questions, please respond to this email we would be happy to help.

Thank you for choosing Creatio!

Yes this would be great ! :)

Hello,

 

Unfortunately, it can't be done via the standard export.  

Feed is absolutely another object in the system and there is no way to export feed using the standard export tool. 

But you can run this SQL query on your side (which is an example for the "Accounts" section) that will return feed messages for all accounts:



select a.Name Account_Name, a.Address Account_Address, sm.Message Feed_message from Account a inner join SocialMessage sm on sm.EntityId=a.Id



And then upload these feed messages from the DB.

If you have any further questions, please respond to this email we would be happy to help.

Thank you for choosing Creatio!

Hello,

 

It could be considered to create a List dashboard and select object Message/comment. Put necessary columns. From here then export in excel needed information. In Message/comment there are two columns that could be used to determine to what entity and record id, feed was posted: Schema and Object instance. The only thing is that these two columns provide Id, so to have some user friendly info additional manipulation in excel should be done. This is just alternative idea. 

 

BR,

Jelena

 

Show all comments

We have business task in the mobile application to show in the section on opening 10 latest objects without waiting for specifying filter by the user.

Is it possible? And in which module to do such initial load?

Like 0

Like

1 comments

Hello Oleksandr!

 

If you are using an offline application mode, this should work by default. Otherwise, to achieve this goal for all sections, you would need to disable the "UseMobileSearchOnlyInSections" and "UseMobileRecents" features.

 

If you only need to load records without filtration in some particular sections, you have to set "SearchOnlyData": false, in the mobile mainfest in the "Models" section for the model of the sections you want.

 

Best regards,

Max.

Show all comments