I was creating a button that runs a simple business process that sends a mail.

The problem is after altering the schema of the Portal user profile and adding a button the business process doesn't run nor gets mentioned in the process logs for tracing.

here are the codes used in the schema to run a bp in the portal contact page :

 

define("SspProfileContactPage", ["ProcessModuleUtilities","css!UsrCSSPortalProfile"], function(ProcessModuleUtilities) {

    return {

....

methods: {

            OnClickTest: function(){

                var args = {

                    sysProcessName: "UsrProcess_e179057",

                    parameters: { 

                        test: "testing" 

                    }

                };

                ProcessModuleUtilities.executeProcess(args); 

                this.showInformationDialog("Busniess process triggered");

            },

...

diff...

...

"operation": "insert",

                "name": "UpdateButton",

                "parentName": "Tabc34c9c60TabLabelGroup654f02cd",

                "propertyName": "items",

                "values": {

                    "itemType": Terrasoft.ViewItemType.BUTTON,

                    "caption": "Update Info",

                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,

                    "click": {

                        "bindTo": "OnClickTest"

                    },

                    //"tag": "OnClickTest",

                    "hint": "TEST BUTTON"

                },

Like 0

Like

4 comments

Hello,

 

I've used the same code in the demo application and the process was triggered. Maybe the process is not logged in the process log ("Enable logging" in the process settings in the process designer) or you receive some actual error in the console when starting the process. You need to check if the code of the schema doesn't contain duplicates of methods or errors as well. The complete code from my side:

define("SspProfileContactPage", ["ProcessModuleUtilities", "css!UsrCSSPortalProfile"], function(ProcessModuleUtilities) {
	return {
		mixins: {},
		entitySchemaName: "Contact",
		messages: {},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
                "name": "UpdateButton",
                "parentName": "GeneralInfoTab",
                "propertyName": "items",
                "values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"caption": "Update Info",
                    "style": Terrasoft.controls.ButtonEnums.style.BLUE,
                    "click": {
                        "bindTo": "OnClickTest"
                    },
					"hint": "TEST BUTTON"}
			},
		]/**SCHEMA_DIFF*/,
		attributes: {},
		methods: {
				OnClickTest: function(){
					var args = {
						sysProcessName: "UsrProcess_b0eee32",
						parameters: { 
							test: "testing" 
						}
					};
                ProcessModuleUtilities.executeProcess(args); 
                this.showInformationDialog("Busniess process triggered");
            },
		},
		rules: {},
		userCode: {}
	};
});

 

Hey Oleg,

 

I also made sure that the logging was already enabled and the process did not start. 

And made sure that all portal users can run this process from the process properties in the process library.

 

I am trying to add this button in the portal user profile page. After altering the page it created a schema where the entitySchemaName  is empty by default.

 

...

entitySchemaName: "",

        attributes: {},

...

 

Serge,

 

When replacing a schema I usually take the content of the original schema and make it empty (mean empty methods, empty attributes and so on). For the SspProfileContactPage the entitySchemaName is Contact and you can see it in the SspProfileContactPage schemas from base packages. This can be also an issue in case you have this entitySchemaName empty. Also try using the code I sent that worked on my side (but modify the process code).

Oleg, 

I have used your code and modified the process code 

and also tried it a new replacing view model with empty method and empty attributes ... 

even used the "debugger;" to check if the code is running and it is.

 

still the same issue.

I am using Creatio version 8.0.6.3429

what version did you use your code on ?

Show all comments

I want to build an 'add' client wizard for our customer service to make it easy for them and also to prevent mistakes.

 

The first step would be to insert zipcode and housenumber, then it will make an API call to see how many adresses match these two parameter. 

 

The list that is returned, if the list is > 1 it should show you the information from the array and make you able to choose 1 of the options. 

 

If the list is 1 it should automatically pick the only available option.

 

I understand how to create the business process but combining this with a user interface is still difficult for me, is this even possible? 

Like 1

Like

3 comments

Hi, take a look at this article, I believe that there you can find a piece of useful information. It is written for the Freedom UI page, however, in earlier versions, you can just use XMLHttpRequest for sending the request, wait for a response, and process it.

The link somehow is broken now.

Pascal,

Here you are - link

Show all comments

I have a lookup field on a detail (List of VAT options with an added column for the % values), im trying to use these now to calculate a value, how do I access the other column? I can access the VAT Code using this.get("UsrVatCode"), but want the associated column which as the % amount.

Like 1

Like

2 comments
Best reply
var lookupId = this.get("RecordColumn").value;
 
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "INSERTOBJECT"
});
 
esq.addColumn("Insert Object column you wish to view");
 
esq.getEntity(lookupId, function(result) {
    if (!result.success) {
        this.showInformationDialog("Error");
        return;
    }
    this.showInformationDialog(result.entity.values.Column You wish to view);
}, this);

This is the code that I used to get it working, if anyone needs it.

var lookupId = this.get("RecordColumn").value;
 
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "INSERTOBJECT"
});
 
esq.addColumn("Insert Object column you wish to view");
 
esq.getEntity(lookupId, function(result) {
    if (!result.success) {
        this.showInformationDialog("Error");
        return;
    }
    this.showInformationDialog(result.entity.values.Column You wish to view);
}, this);

This is the code that I used to get it working, if anyone needs it.

There is also another approach: in the schema in the attributes property you can specify your column in the following manner:

"Your_column_from_the_page": {
					"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
					"lookupListConfig": {
						"columns": ["column_name_from_the_lookup_object"]
					}
				},

As an example we can see that in the ContractPageV2 there is this attribute:

"Currency": {
					"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
					"lookupListConfig": {
						"columns": ["Division"]
					}
				},

and we have access to the value of the "Division" column from the "Currency" lookup:

Show all comments

Im trying to create a calculated field to show a total of all records from a detail on a record, ive looked into using sql views, however I'm not sure if that would work as you cant filter by the record I don't think, are there any code solutions or anything similar?

Like 0

Like

1 comments

Hello,

 

You can try creating an integer column in the page (and in the object that this page represents) and create a business process that will change the value in this column once the record is added to the detail (or decrement once the value is removed). This way you can create the logic without additional code that will save resut in the server.

 

If you still want using the code - something similar is the functionality of the order product detail summary (that displays the number of products in order, can be found on the order page in the "products" tab). This logic can be found in the updateSummary method from the OrderProductDetailV2 from the Order package.

Show all comments

Does anyone know a way to change the order of the dashboard panels?

On the table SysDashboard I found the column Postion. But if I change something here, it doesn't do anything.

It looks like he always sorts alphabetically.

 

Like 2

Like

3 comments
Best reply

Dear Christian,

 

Thanks for your question.

 

Starting from version 7.16.2, you can change the order of dashboard tabs by adding them to favorites:

 

 

 

Please let us know if additional questions arise!

 

Best regards,

Anastasiia. 

 

 

It's always just alphabetical. To force a certain order I usually just prefix the dashboard name with a number.

Ryan

Dear Christian,

 

Thanks for your question.

 

Starting from version 7.16.2, you can change the order of dashboard tabs by adding them to favorites:

 

 

 

Please let us know if additional questions arise!

 

Best regards,

Anastasiia. 

 

 

Thanks for your answers. 

I found a little workaround. I put a space in front of the name. It works.

But, to mark it as "favorites" is the better way. :-)

Show all comments

Hello. I'm working with the Multiple choice field setup for Creatio (https://marketplace.creatio.com/app/multiple-choice-field-setup-creatio) add-on but I'm not getting it to save the selected values.

I've followed the guide here: https://marketplace.creatio.com/sites/marketplace/files/app-guide/Multi…

I get the values correctly on the page, and they are selectable. But nothing is saved to the database when i Save the record

Object: UsrContactLabels

Lookup: UsrLabels

Link-object: UsrContact

 

 

Like 0

Like

10 comments

Hi Vasili,

Could you please give us more details about your issue?



Specifically, please describe your object model based on the following template:

The example implies the following conditions:

1. Multiple choice field was added to the Activity page.

2. The method uses the ActivityParticipant object linked to the Activity object.

3. The Contact object is a source object for the Multiple choice field.

 

As such, the structure comprises three main objects:

• Activity: main object

• ActivityParticipant: decoupling object

• Contact: source object for the Multiple choice field

 

Also, please send us the list of columns in the decoupling object, your Creatio version, product, and DBMS

Yevhen Vorobiov,



Thank you for your response,

DBMS is a MSSQL Server 19 ,

Creatio Version is 8.0.1,

Product is bpmonline bank customer journey on-site,

 

This is a  Piot Table, connecting contact and labels objects.

We are expecting that, all label information for all contacts will be saved in this Object "UsrContactLabels", after adding labels and saving the contact page, when we refresh the page it does not save it in object and after refreshing this field is empty.

 

 

We added multiselect element on Contact Page:

 

 

MultiSelect values are Labels from Lookup (sceen below):

• Activity: main object - For us is "UsrContact" (all our contacts)

• ActivityParticipant: decoupling object - For us is "UsrContactLabels" (Piot Table joining Contacts and Labels"Lookup")

• Contact: source object for the Multiple choice field - For us is "UsrLabels" (Labels Lookup)

Hi Vasili,

 

Thank you for the detailed description.

I tested your case on the same Creatio version, product, and DBMS. I created the same object model and was unable to reproduce the issue on my end.

Could you please send us the full JavaScript page code?

Also, please reproduce the issue with the browser console open. Do you get any errors in the console?

Hi Yevhen Vorobiov,

Thank you for your response.

I did not get any errors in console after selecting MultiSelect value and saving Contact Page.

Here we choose your Labels in MultiSelect without saving Contact Page.

Here we Saved Contact Page and There are no Errors in Console.

    attributes: {

            "UsrAutomaticLabel": {

                "dataValueType": Terrasoft.DataValueType.LOOKUP

                },

   },

        mixins: {

        MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"

        },

methods: {

    getMultiChoiceEntitiesConfig: function () {

                const items = {

                        UsrAutomaticLabel: {

                            mainEntitySchemaName: "UsrContactLabels",

                            mainColumnName: "UsrContact",

                            relatedEntitySchemaName: "UsrAutomaticLabels",

                            relatedColumnName: "UsrLabels"

                            }

                        };

                        return items;

                        

                },

},

diff:[

        {

                "operation": "insert",

                "name": "UsrAutomaticLabel67a256f2-7c41-4c17-b736-ad94b31105ec",

                "values": {

                    "layout": {

                        "colSpan": 12,

                        "rowSpan": 1,

                        "column": 0,

                        "row": 0,

                        "layoutName": "GeneralInfoTabGridLayout9426c6e2"

                    },

                    "className": "Terrasoft.MultiChoiceCombobox",

                    "dataValueType": 11,

                    "bindTo": "UsrAutomaticLabel",

                    "enabled": true,

                    "contentType": 5

                },

                "parentName": "GeneralInfoTabGridLayout9426c6e2",

                "propertyName": "items",

                "index": 0

            },

 

 

]

Vasili Piruzashvili,

Hi Vasili,

 

Your source code has to include the following method:

init: function() {

                this.callParent(arguments);

                this.mixins.MultiChoiceMixin.init.call(this, arguments);

 

In other words, the source code should look as follows: 

methods: {
 
			init: function() {
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
		},
 
    getMultiChoiceEntitiesConfig: function () {
                const items = {
                        UsrAutomaticLabel: {
                            mainEntitySchemaName: "UsrContactLabels",
                            mainColumnName: "UsrContact",
                            relatedEntitySchemaName: "UsrAutomaticLabels",
                            relatedColumnName: "UsrLabels"
                            }
                        };
                        return items;
 
                },
 
},



If the issue persists, please send me the complete source code of this page as text.

Hi Yevhen,

 

Sending source code:

define("ContactPageV2", ["MultiChoiceMixin"], function(MultiChoiceMixin) {
	return {
		entitySchemaName: "Contact",
		attributes: {
			"UsrAutomaticLabel": {
				"dataValueType": Terrasoft.DataValueType.LOOKUP
				},
		},
		mixins: {
		MultiChoiceMixin: "Terrasoft.MultiChoiceMixin"
		},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {
			onEntityInitialized: function() {
				window._contactObject = this;				
				this.callParent(arguments);
				this.mixins.MultiChoiceMixin.init.call(this, arguments);
 
			},
			getMultiChoiceEntitiesConfig: function () {
				const items = {
						UsrAutomaticLabel: {
							mainEntitySchemaName: "UsrContactLabels",
							mainColumnName: "UsrContact",
							relatedEntitySchemaName: "UsrAutomaticLabels",
							relatedColumnName: "UsrLabels"
							}
						};
						return items;
 
			},
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "STRING0d5c646a-a2a5-4b05-bdd5-91eda99aa462",
				"values": {
					"layout": {
						"colSpan": 24,
						"rowSpan": 1,
						"column": 0,
						"row": 6,
						"layoutName": "ProfileContainer"
					},
					"bindTo": "UsrExternalId",
					"enabled": true
				},
				"parentName": "ProfileContainer",
				"propertyName": "items",
				"index": 6
			},
			{
				"operation": "merge",
				"name": "ContactClientProfileIcon",
				"values": {
					"layout": {
						"colSpan": 4,
						"rowSpan": 1,
						"column": 0,
						"row": 0
					}
				}
			},
			{
				"operation": "merge",
				"name": "Type",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 0
					}
				}
			},
			{
				"operation": "move",
				"name": "Type",
				"parentName": "AdditionalContactProfileContainer",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "merge",
				"name": "AccountServiceLevel",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "AccountBranch",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "Owner",
				"values": {
					"layout": {
						"colSpan": 20,
						"rowSpan": 1,
						"column": 4,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "BirthDate",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 1
					}
				}
			},
			{
				"operation": "merge",
				"name": "Citizenship",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 2
					}
				}
			},
			{
				"operation": "merge",
				"name": "ClientType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 3
					}
				}
			},
			{
				"operation": "merge",
				"name": "SalutationType",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 4
					}
				}
			},
			{
				"operation": "merge",
				"name": "Language",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 12,
						"row": 3
					}
				}
			},
			{
				"operation": "move",
				"name": "Language",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 7
			},
			{
				"operation": "merge",
				"name": "Age",
				"values": {
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 5
					}
				}
			},
			{
				"operation": "move",
				"name": "Age",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 8
			},
			{
				"operation": "insert",
				"name": "LOOKUP5f31e5a7-d07e-4752-925a-df3453f2a040",
				"values": {
					"dataValueType": Terrasoft.DataValueType.ENUM,
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 0,
						"layoutName": "ContactGeneralInfoBlock"
					},
					"className": "Terrasoft.MultiChoiceCombobox",
					"bindTo": "UsrAutomaticLabel",
					"enabled": true,
					"contentType": 3
				},
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 9
			},
			{
				"operation": "merge",
				"name": "ContactPageV26Tab",
				"values": {
					"order": 2
				}
			},
			{
				"operation": "merge",
				"name": "JobTabContainer",
				"values": {
					"order": 5
				}
			},
			{
				"operation": "merge",
				"name": "HistoryTab",
				"values": {
					"order": 6
				}
			},
			{
				"operation": "merge",
				"name": "NotesAndFilesTab",
				"values": {
					"order": 7
				}
			},
			{
				"operation": "merge",
				"name": "ESNTab",
				"values": {
					"order": 8
				}
			},
			{
				"operation": "move",
				"name": "Gender",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "INN",
				"parentName": "ContactGeneralInfoBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "SocialStatus",
				"parentName": "group51e8654c265f_gridLayout",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "DecisionRole",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 5
			},
			{
				"operation": "move",
				"name": "Job",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 1
			},
			{
				"operation": "move",
				"name": "EmploymentType",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 0
			},
			{
				"operation": "move",
				"name": "Account2",
				"parentName": "JobInformationBlock",
				"propertyName": "items",
				"index": 2
			}
		]/**SCHEMA_DIFF*/
	};
});

 

Yevhen Vorobiov,

Hi Yevhen, I made new Server and added Multiple Choice as it was in documentation. I have same problem with saving data. There are not any error in console ,  after chosing multiple Choiche values "Labels"  and saving Contact page, but after reloading the page the data is not saved and Labels are deleted so its empty .

Hi Vasili,

I can see that your code uses this method:

methods: {
onEntityInitialized: function() {
window._contactObject = this;
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

However, the instruction uses the following method instead:

methods: {
init: function() {
this.callParent(arguments);
this.mixins.MultiChoiceMixin.init.call(this, arguments);
},

When I use the former method, I get the same issue. I can select data in the field, but Creatio will not save it. When I use the method from the instruction, everything works as expected.
Could you please test the method from the instruction? Is using a different method required in your case?

It worked! Thanks a lot

Show all comments

we are taking Token as request parameter  and it will generate Response as Data object for these thing how to create business process. 

 

Can Anybody please, suggest how to do business process?

Like 0

Like

1 comments

Hi

The best way of doing a business process around the web server would be using the element "Call web service". Regarding the situation, it would be better to start your web server via this element.

Show all comments

we are created rest webservice with username as system setting(Paramater) it was coming in Bpm and password(it was showing an error while selecting parameter as system setting) as request parameters and get response as Token for these process we need to create business process.

can you please,share any idea or image for BPM.?

 

File attachments
Like 0

Like

1 comments

Hello,

 

The best way of doing a business process around the web server would be using the element "Call web service". Regarding the situation, it would be better to start your web server via this element.

 

We have one example related with web service integration.

Show all comments

I got a strange error when trying to open Preconfigured page on UAT envirinment

no changes on the process or page has been made recenty.

The page has not been even started



Terrasoft.Common.InvalidObjectStateException: Column Id value cannot be obtained because it has not been loaded.

 

Like 0

Like

2 comments

Hello,

 

Please make sure to contact our support team directly at support@creatio.com and describe this issue in more detail, so we could help resolve it.

thx Mira.

it correctet itself.

its looks the engin cant localize any paremeters or page.

But its start working



regards

Tomek

Show all comments

Hi Everyone!

Hope everyone is well,

I really need urgent help/suggestion in the below scenario-



Scenario-

Candidates resumes are attached in the Contact attachments and I need to stream this file to 3rd party resume parsing platform which can parse the resume/CV and send back the response.



My Findings -

I found a few resume parsing platforms to which If I can pass either file url/file/base64 and then it parses the information.

I also tried to pass the data in the "Data" column of the contact attachment table directly to the parsing platform but it returns an error - "Unable to decode encoded file data"



Challenge -

Not able to read file data from attachment as base64 and convert it to string.

Like 1

Like

1 comments

Hello,

 

In Postman I was able to get the content of the file using the following URL (GET request): https://site.creatio.com/0/rest/FileService/GetFile/d95c76f6-64bc-444c-…

 

This is the URL that is called when you try to get the attachment from the UI. d95c76f6-64bc-444c-9bfc-1b9cfd4f06e0 is the UId from the SysSchema table representing the object where the attachments are stored (ContactFile, AccountFile, FileLead etc) and the eba29d21-2922-4094-b996-f5c18ee025d1 is an Id of the actual attachment.

 

This should be also received using some program call (like some integration) as either a plain text or the set of bytes (should be tested). Then the content can be encoded\decoded using something like this https://stackoverflow.com/questions/11743160/how-do-i-encode-and-decode…. These are suggestions, unfortuantely we don't have a ready solution for this. 

Show all comments