Hello Community,

I have a use case where Creatio App needs to be connected to a 3rd party system always. Please help with following questions



1. How to trigger source code that establishes the connection with the 3rd party system? Its possible to run a Business Process, but if there is any other way, it could help.



2. How to get AppConnection/ Userconnection? Since the code is not triggered from client/Business process or API service (no inheritance from BaseService), how can I get the AppConnection?



Would much appreciate your help!

Like 0

Like

4 comments

Hello Shivani, 

 

1. Usually such operations performing with Business Processes and script tasks and honestly we don't have much convenient options for that. 

 

2. Script tasks exist for this kind of operations. You may use next code to achieve your requirements: 

 

var userConnection = Get<UserConnection>("UserConnection");

 

Also please check out this link with web-services it might be useful: 

 

https://academy.creatio.com/docs/developer/back-end_development/configu…

 

Thank you!

Regards, 

Bogdan L.

Thank you Bogdan. I found a post: https://community.creatio.com/questions/esq-application-access-rights

 

and it advices to get systemUserConnection as follows :

private SystemUserConnection _systemUserConnection;
private SystemUserConnection SystemUserConnection {
	get {
	     return _systemUserConnection ?? (_systemUserConnection = 
        (SystemUserConnection)AppConnection.SystemUserConnection);
	}
}

 

But looks like AppConnection is not a static class and I get the error in IDE as below. Please advice if I am doing something wrong or if the above suggestion does not work





In short passing the user connection from script task to call a source code or using BaseService for Web APIs is the only way to get userconection? 

 

Shivani Lakshman,

 

Please use User Connection from the script task to achieve the task desired.

 

Best regards,

Oscar

Update : One can create a new source code schema with a class that inherits from AppEventListenerBase.

The class has UserConnection as a property.  The UserConnection can be set using methods given in the code below. The onAppStart is called everytime IIS (webserver) is restarted or after compilation. 

// Property
protected UserConnection UserConnection	{
	get;
	private set;
	}
 
public override void OnAppStart(AppEventContext context) {
            base.OnAppStart(context);
            UserConnection = GetUserConnection(context);
            SetupConsumerJob();
        }
 
 
protected UserConnection GetUserConnection(AppEventContext context)    {
            var appConnection = context.Application["AppConnection"] as AppConnection;
            if (appConnection == null) {
                throw new ArgumentNullOrEmptyException("AppConnection");
            }
            return appConnection.SystemUserConnection;
        }







 

Show all comments

Hello Team!

 

I need to hide one filed based of the selection of one category lookup. I follow the academy  with the steps for the rule type. But my question is whats happend when you have more values in a OR condition. I tried to placed all the conditions in the same rule and didn't work and as well like in the example separate, but only the last one is working. How is the correct process in this case?

 

Thanks,

 

Like 0

Like

1 comments

Hello Federico, 

 

We performed some tests in order to achieve your requirement, but it seems like such implementation is not possible for now. The only one business rule will be active in this case. We already informed our Core R&D team and we will work to add such functionality in our next releases. Thank you for understanding!



Best Regards, 

 

Bogdan L.

Show all comments

I need to add a fax field on contact object but have that synchronized with ContactCommunication detail (Communication Options). Just like, when a mobile number is added to communication options it automatically updates contact.mobile and vice versa. 

Ideas on how to do it? 

Like 0

Like

6 comments

Hello kumar,

First of all, you'll need to enable the fax communication type for contacts in the Communication option types lookup. See https://share.customerfx.com/GGuWjxy7

Then, once you've added the contact field for Fax on the contact, you can keep it in sync with a process or use an entity event sub-process in the Contact and ContactCommunication objects. The process route is pretty straight forward, however, in order to see it update in the other place right away, you'll want to send a message from the process to the page so you can reload the page and see the change. See https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

Hope this helps

Ryan

Ryan Farley,

Thank you for your reply. 

In the case of contact's phone or email field change on the contact page, the add/edit in contact communication details happen even before save button is clicked. Can such thing be implemented for Fax field as well? 

On account page, unlike contact object, fax field came with out of the box and behaves intuitively, change in account.fax changes right account communiction option right there even before save button is clicked. 

 

Do you think that is not possible with Fax field on Contact? 

Hello Kumar, 

 

The Account object has a base lookup "Fax" field, which can be added to the left panel of the record page and for which the "connection" with the "Communications options"  detail is implemented in a base code, so while changing the value in the column on the left panel the corresponding value will be reflected in the detail (same as for "Email" or "Phone"). However, you can use the "Fax" option for the Contacts record after it's added to the lookup "Communication option types" in the "Communications options"  detail but it won't create "Fax" field for the Contact object. Even after such field is added to the Contact object manually, it still requires the "connection" between field and detail to be implemented by code. As of now, there is no way to implement such functionality only with basic system tools and development is needed.

As a workaround suggestion,  you can proceed with a variant provided by Ryan. 

From our side, we have already registered the corresponding query for our R&D team and will be awaiting for the implementation of the mentioned functionality in the upcoming versions. 

 

Should you have any questions, please let us know!



Best regards,

Anastasiia 

kumar,

Hello kumar. I've not tested this yet, so not 100% sure this will work, but I believe you could do the following and it should work the same as the account page does.

  1. Create a replacing view module for "ContactCommunicationDetail"
  2. Add the following code:
define("ContactCommunicationDetail", ["ConfigurationConstants"], function(ConfigurationConstants) {
	return {
		methods: {
			initMasterDetailColumnMapping: function() {
				this.callParent(arguments);
 
				var mappings = this.get("MasterDetailColumnMapping");
				mappings.push({
					"CommunicationType": ConfigurationConstants.CommunicationTypes.Fax,
					"MasterEntityColumn": "UsrFax" // change this to whatever your Fax column is called on Contact
				});
				this.set("MasterDetailColumnMapping", mappings);
			}
		}
	};
});

That should handle the value getting updated from the communication options detail to the Contact.

Then, on the ContactPageV2 code,

  1. Wire up a change event for the Fax column - see https://customerfx.com/article/triggering-an-event-when-a-field-is-chan…
  2. In the methodName for the change event use the method name "syncEntityWithCommunicationDetail"

Ryan

Thank you Ryan, I actually did the change very close to what you suggested. It works for the UI part of the logic as expected but the Fax field isn't getting saved in the contact object when 'Save' is clicked. 

 

Can't figure out why. 

 

Fax on ContactCommunication is getting updated but fax on contact object is not. The fax field is not passed to the UpdateQuery for contact when Save is clicked. 

Show all comments

Anyone know why I get this error after I cloned a copy of my prod creatio site and created a test instance. I have Sales on-prem 7.15.2

Error

An error has occurred when working with the repository

Unable to connect to a repository at URL 'https://xxxx/masked/xxx'

SvnErrorCode: SVN_ERR_RA_CANNOT_CREATE_SESSION

RootCause: Error running context: APR does not understand this error code

Like 0

Like

2 comments

Hello Kumar,

 

Possible reasons are incorrect proxy settings or other parameters of the SVN server, incorrect URL to which you are trying to connect.

 

To understand where the error occurred, try connecting to the server not from the application or from the browser to the web interface, but from another program for working with SVN (for example, through the TortoiseSVN Repository Browser). If the error is reproducible, then the problem is in the infrastructure, not in the application.

 

Best regards,

Bogdan.

Thank you for the response. 

It was indeed an infrastructure issue. The IIS server not able to talk with SVN. 

Show all comments

On the LEAD object, we have a user field ("UsrSecondaryPhone") and it is not indexing via Global Search (or at least no values in this field result in search results in a global search).  I have made sure that the section is marked for Index for Global Search (check box is checked).  How do I get this and other user fields to index via global search?

Like 0

Like

4 comments

Hello,

 

It is also necessary to mark the necessary column attribute Indexed as true. After that the column data will be available in the search list.

If it is still not found by the global search, I suggest to contact the support team via support@creatio.com to have a closer look at your object settings.

 

Regards,

Dean

Thank you for the reply.  I see how to do this when adding a new column.  But in this case, I have a user column that was previously added and I cannot find how to edit the column to check this box.

Hello,

 

Here it is:

 

 

Regards,

Dean

Dean,  Thanks again.  I've tried that.  I can follow these steps in our DEV environment and I can check the box in DEV, however, in our production environment, I cannot make the same change (and I've tried several instances of the LEAD object.  We made the changes to add user columns in our DEV environment, then exported a package and imported it into our production environment.  Now, I want to make this change for indexing purposes in production, but I am unable to make changes on the column.  Any ideas?

Show all comments

Hi all,

 

Quick question : when using the Competitor detail in the Opportunity section, an automatic message appears if the Supplier or Competitor product fields aren't filled in. I do not need this information though, how can I deactivate this message ?

 

Thanks in advance and have a lovely week !

Like 0

Like

1 comments

Hello,

 

You need to replace OpportunityCompetitorPageV2 of the Opportunity package and change this method:

From :

externalValidate: function() {
					if (!this.get("Supplier") &amp;&amp; !this.get("CompetitorProduct")) {
						var message = Ext.String.format(
							this.get("Resources.Strings.SupplierOrProductRequiredMessage"));
						this.showInformationDialog(message);
						return false;
					}
					return true;
				},

 

To:

externalValidate: function() {
					if (!this.get("Supplier") &amp;&amp; !this.get("CompetitorProduct")) {
 
						return true;
					}
					return true;
				},

After that you will not get the notification and will be able to save record on the competitors detail.

 

Regards,

Dean

Show all comments

In an edit page, we have fields that can be changed by the user or calculated by the page Javascript code, depending on specific circunstamces.

In this case we need to inhibit the attribute dependency method call, to make sure it is not called when the field is calculated by the page code, and not by the user.

Is it possible ?

Regards,

Like 0

Like

3 comments

Hi Ricardo,

 

Everything is simple - these specific circumstances should be included into the logic of custom method calls inside the JavaScript code. So the logic itself should be redesigned.

 

Best regards,

Oscar

Oscar Dylan,

Ok, but what I am looking for is a way of disabling the handler method activation in the attribute dependency, so that when the field is updated by the code the handler method will not be triggered... The Javascript code would first disable the dependency method call, update the field, and then enable the dependency control again.

Ricardo Bigio,

One way to accomplish that is to add a property or attribute to the code where you can set a flag that the field is being updated via code, then in the event handler, check this flag to see if you should exit or continue The flag would only get set by code, so the user entering a value the flag won't be set and the event handler will trigger normally. Something like this:

suppressEvent: false,
 
funcThatSetsDependentColumn: function() {
    this.suppressEvent = true; // set flag to suppress the event
    this.set("UsrDependentColumn", value); // set the column that will trigger the event
},
 
dependentColChangeHandler: function() {
    // check if flag is set to suppress the event
    if (this.suppressEvent) {
        this.suppressEvent = false; // unset the flag and exit
        return;
    }
 
    // do other stuff in the event handler here
}

Hope this helps,

Ryan

Show all comments

Hello community!



Is there any way to assign multiple departments (in different accounts) to a single contact?

 

For example, I have a contact who works in several accounts and in each account he is in a specific department. Some contacts are in multiple departments in the same account. For rights, it's easy, we can use functional/organizational roles but I need my contact to be in multiple accounts. How can I do this? With Creatio, I can only assign one account to a contact. If I assign another account, the previous account will appear in the job experience and it will not be his primary job..

 

About the accounts it's something like that :

 

Main Entity

───unit

   └───sub unit 1

       ├───sub sub unit 1

       │   └───sub sub sub unit 1

       └───sub sub unit 2

           └───sub sub sub unit 2

 

I have up to 5 levels of depth (main -> unit -> sub unit -> sub sub unit -> sub sub sub unit).



And I need my contact to be in 2 different units (sub sub unit 1 and sub sub unit 2 for example).



Each (sub) unit is an account because I had too many problems with departments (departments don't appear for some reason but I am able to assign a department to a contact.

 

I need to see the same contact working in two different accounts. So, in the page of the first account, I need to see the contact. For the second account as well.

Like 0

Like

3 comments
Best reply

Dear Julien,



In Creatio a contact can only have one primary job. However, you can add new jobs or mark the existing ones in "Job history" as "current". This way if you go to any of the accounts marked as "current job" of the contact you will see the contact in the "Contacts" detail of "Contacts and Structure" tab.

You can find more information about managing job experience here: https://academy.creatio.com/docs/user/crm_tools/accounts_and_contacts/manage_job_experience

 

Hello Julien, 



Can you please clarify your request a bit? 



Thank you in advance.

Hi Roman,

 

I've updated my post !

Dear Julien,



In Creatio a contact can only have one primary job. However, you can add new jobs or mark the existing ones in "Job history" as "current". This way if you go to any of the accounts marked as "current job" of the contact you will see the contact in the "Contacts" detail of "Contacts and Structure" tab.

You can find more information about managing job experience here: https://academy.creatio.com/docs/user/crm_tools/accounts_and_contacts/manage_job_experience

 

Show all comments

Hey Community !

 

I tried to install GDPR on a demo instance of Creatio 7.18 and got this error:

 

2021-07-01 16:34:19,827 Compiling configuration dll

2021-07-01 16:35:48,843 Errors and (or) warnings occurred while compiling configuration dll

2021-07-01 16:35:48,859 Autogenerated\Src\SysSchema.BackReferences.Base.cs(45,22) error CS0246: The type or namespace name 'NavGMarker' could not be found (are you missing a using directive or an assembly reference?)

2021-07-01 16:36:09,187 When application installed, an error(s) occured

 

I tried to install GDPR on a 7.17 environment and it installed successfully.

 

Is this because of the demo version or is it just that the namespace has been renamed or removed in Creatio 7.18?

 

Best regards,

 

Julien Gunther

 

 

Like 0

Like

6 comments
Best reply

Hi Julien Gunther,

 

There is no need to restart from a fresh installation. Perform a full compilation of your Creatio instance.

Hi Julien,

 

I had no issues with installing GDPR on a demo instance of Creatio 7.18. Please let us know what other applications you have installed before GDPR.

Ivan Leontiev,

 

I didn't think about this before, I installed and deleted this application before trying to install GDPR :

https://marketplace.terrasoft.ru/app/google-maps-detail-creatio

 

this application may have removed NavGMarker...

Ivan Leontiev,

 

I tried to reinstall google-maps-detail-creatio but the installation failed... Do you think there is any other solution to solve this problem than restarting from a fresh install ?

Hi Julien Gunther,

 

There is no need to restart from a fresh installation. Perform a full compilation of your Creatio instance.

I'm also cannot install GDPR for Creatio (https://marketplace.creatio.com/app/gdpr-creatio) on a 7.18 instance, getting errors, I attach an extract of the installation log 

2022-02-23 21:31:44,461 Se ha producido un error al realizar la operación en el elemento "BpmGDPR", UId = 58ab9e05-4af8-49c4-bb50-bc6728ae4d74.
2022-02-23 21:31:44,470 System.AggregateException: One or more errors occurred. ---&gt; System.Exception: Error occured while saving resources for schema 'BpmSchema1Detail' in 'BpmGDPR' package for 'en-US' culture ---&gt; Terrasoft.Common.MismatchItemsCountException: Hay más de un esquema con el nombre 'BpmSchema1Detail' y el nombre del gestor 'ClientUnitSchemaManager'
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.GetSchemaId(String schemaName, String managerName)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourceWithChecksum(SchemaResourceDescriptor descriptor)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourcesWithChecksum()
   --- End of inner exception stack trace ---
   --- End of inner exception stack trace ---
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourcesWithChecksum()
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.Save()
   at Terrasoft.Core.Packages.PackageDBStorage.&lt;&gt;c__DisplayClass351_1.&lt;SaveSchemaResources&gt;b__0()
   at Terrasoft.Core.Packages.PackageStorage.SafeItemOperation(Descriptor descriptor, Action action)
---&gt; (Inner Exception #0) System.Exception: Error occured while saving resources for schema 'BpmSchema1Detail' in 'BpmGDPR' package for 'en-US' culture ---&gt; Terrasoft.Common.MismatchItemsCountException: Hay más de un esquema con el nombre 'BpmSchema1Detail' y el nombre del gestor 'ClientUnitSchemaManager'
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.GetSchemaId(String schemaName, String managerName)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourceWithChecksum(SchemaResourceDescriptor descriptor)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourcesWithChecksum()
   --- End of inner exception stack trace ---&lt;---
 
---&gt; (Inner Exception #1) System.Exception: Error occured while saving resources for schema 'BpmSchema1Detail' in 'BpmGDPR' package for 'ru-RU' culture ---&gt; Terrasoft.Common.MismatchItemsCountException: Hay más de un esquema con el nombre 'BpmSchema1Detail' y el nombre del gestor 'ClientUnitSchemaManager'
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.GetSchemaId(String schemaName, String managerName)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourceWithChecksum(SchemaResourceDescriptor descriptor)
   at Terrasoft.Core.Packages.PackageDBResourcesStorage.SavePackageSchemaResourcesWithChecksum()
   --- End of inner exception stack trace ---&lt;---

 

Julio.Falcon_Nodos,

 

Hi! We reviewed this add-on. The issue is with the detail name. BpmSchema1Detail is a standard schema name for an earlier Creatio version. If you have the same schema name in your configuration, it conflicts with the add-on. We changed the schema name in the new version of add-on.

Show all comments

Hello

 

I am trying to update a lookup field linked to Employee section for multiple records using an input box. But, the list of records are not displaying either by typing in the field or clicking on magnifying glass icon. 

I have tried using every property for binding this to the object. But none of them works. I have attached the code snippet of this custom action for reference.

 

So please suggest a way to bind it to the correct schema and display its correct records.

 

Regards,

Malay

File attachments
Like 0

Like

4 comments

Hi Malay, 

 

Lookups are usually looking like that.

 

You can add "isSimpleLookup" to the virtual lookup attribute to make it a drop-down ,  so it might be much convenient for you.

 

Example:

 

"YourLookup": {
    dataValueType: Terrasoft.DataValueType.LOOKUP,
    isSimpleLookup: true,
    referenceSchemaName: "Employee"
}

 

Best Regards, 

 

Bogdan L

Hi Bogdan Lesyk,

 

Thank you for your response.

 

I was asking about the binding of object with this virtual lookup. As, this is not properly bind with any object, it is not showing any values.

I have also inserted the property referenceSchemaName: "Employee" but it still does not show any values.

 

Regards,

Malay

Malay,

 

If you don't see any values of your Lookup, you've probably added wrong name of the object your Lookup should referring to.

 

Please check out the example of how it should looks like:

 

https://community.creatio.com/articles/virtualcolumn-lookup-field

 

Also check out the code my test implementation:

 

 attributes: {

                "UsrTestLookup": {

                    "dataValueType": Terrasoft.DataValueType.LOOKUP,

                    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,

                    isLookup: true,

                    caption: "virtual street",

                    referenceSchemaName: "Employee",

          isSimpleLookup: true

                }

            },

 

diff: /**SCHEMA_DIFF*/[

      {

                    "operation": "insert",

                    "parentName": "ProfileContainer",

                    "propertyName": "items",

                    "name": "UsrTestLookup",

                    "values": {

                        bindTo: "UsrTestLookup",

                        "caption": {"bindTo": "Resources.Strings.UsrTestLookupCaption"},

                        layout: {column: 0, row: 8, colSpan: 12}

                    }

                },

 

As far as I choose

 "parentName": "ProfileContainer"

and

isSimpleLookup: true,

please check out the result of such implementation.

 

 

So on Contact page I've got my "some lookup test" which has it's values from "Employee" object which it refers to.

 

Also please note,  that Virtual Lookup columns most often exist to store intermediate values, that can be further used for data processing.

 

Best Regards, 

 

Bogdan L.

 

 

Hi Bogdan,



How to add filter to the virtual Lookups, I had followed the above method to add virtual lookup. And when I tried to add filter to that, its not filtering out the data.

I have attached my code for the reference,





After adding the filter I am able to see all the values in the Lookup.

Is there a way, to Filter the Lookup values in Virtual lookup column ?



Regards,

Adharsh S

Show all comments