Hi Team 

 

We are trying to generate notification Using Academy Article as everything shows successful but no notification was generated

 

https://academy.creatio.com/documents/technic-bpms/7-11/how-set-push-notifications-mobile-application-users

 

 

For Approval we tried adding section to mobile but nothing was found in section

 

 

 

These are only option available can anyone suggest some workaround over this

 

Thank You So Much

 

Like 0

Like

5 comments
Best reply

Hello Braj,

 

I'll share here the answer that I provided regarding the approvals case so the community has access to this information as well.



In order to be able to use approvals in the mobile app you would need to follow these steps:



1) You need to run the 3 scripts that will be at the end of the message. This will enable some features needed for this functionality.



2) Then you need to flush (clear) the cache of the Redis server and restart the pool application of the site. 



3) Before adding the approval detail to a section in the Mobile application wizard, you need to make sure that approvals are enabled for this section in the main Creatio site. In order to do that, you need to open the Section wizard at the desired section, and you will see the possibility to enable approvals for this section.



4) Then you can open the Mobile application wizard and open the desired workplace. There you can open the desired section,  select "Details setup" and click on "New detail". There you will be able to select the Type, and here is where you can select the approval that you desire.



After that you can log out and log in at the mobile app, and verify the changes.

 

DECLARE @featureCode varchar(max) = 'UseMobileApprovals',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

DECLARE @featureCode varchar(max) = 'UseMobileApprovalPushNotifications',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

DECLARE @featureCode varchar(max) = 'UseMobileFlutterApprovals',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

Best regards,

Dariy

 

 

Hello,

 

We have already a corresponding case from you for our support team. 

 

We will update you there.

 

Best regards,

Bogdan

Bogdan,

Hi Bogdan,

 

It has been 20 days.

Please do check over this as client is escalating this

 

Thank You

Braj Raj singh Kushwaha,

 

hope this finds you well.

 

Unfortunately, we are unable to investigate this issue without having access to the instance. We have requested external access from you but never heard back. Kindly get back to us with the external access provided so that we could look into this.

 

Best regards,

Anastasiia

Hello Braj,

 

the notifications weren't working because the feature UseMobilePushNotifications wasn't enabled. After activating it, I have tested the business process and I could succesfully receive a push notification.

 

Best regards,

Dariy

Hello Braj,

 

I'll share here the answer that I provided regarding the approvals case so the community has access to this information as well.



In order to be able to use approvals in the mobile app you would need to follow these steps:



1) You need to run the 3 scripts that will be at the end of the message. This will enable some features needed for this functionality.



2) Then you need to flush (clear) the cache of the Redis server and restart the pool application of the site. 



3) Before adding the approval detail to a section in the Mobile application wizard, you need to make sure that approvals are enabled for this section in the main Creatio site. In order to do that, you need to open the Section wizard at the desired section, and you will see the possibility to enable approvals for this section.



4) Then you can open the Mobile application wizard and open the desired workplace. There you can open the desired section,  select "Details setup" and click on "New detail". There you will be able to select the Type, and here is where you can select the approval that you desire.



After that you can log out and log in at the mobile app, and verify the changes.

 

DECLARE @featureCode varchar(max) = 'UseMobileApprovals',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

DECLARE @featureCode varchar(max) = 'UseMobileApprovalPushNotifications',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

DECLARE @featureCode varchar(max) = 'UseMobileFlutterApprovals',

 @featureId uniqueidentifier;

set @featureId = (select top 1 Id from Feature where Code = @featureCode);

IF @featureId is null

BEGIN

 insert into Feature

  (Name, Code)

 values

  (@featureCode, @featureCode);

 set @featureId = (select top 1 Id from Feature where Code = @featureCode);

END;

delete from AdminUnitFeatureState where FeatureId = @featureId;

insert into AdminUnitFeatureState

 (SysAdminUnitId, FeatureState, FeatureId)

values

 ('A29A3BA5-4B0D-DE11-9A51-005056C00008', 1, @featureId);

 

Best regards,

Dariy

 

 

Show all comments

Hi All, 

I have a requirement to restrict the user from uploading or deleting attachments once a particular date is reached. I have tried to remove access rights for attachment object in a business process but still the user is able to upload attachments.

Like 1

Like

3 comments

Hello Balaka,

 

could you please let us know where exactly are you trying to prevent the user from uploading/deleting attachments?

 

Thank you.

Hi,

 

You can create a sub-process on the correspondent object to restrict adding new records or deleting records based on some conditions. For example here is the code I created for the AccountFile records:

 

1) Created a sub-process:

2) Specified the following code in the "Methods" tab of the subprocess:

namespace Terrasoft.Configuration
{
 
	using DataContract = Terrasoft.Nui.ServiceModel.DataContract;
	using Newtonsoft.Json;
	using Newtonsoft.Json.Linq;
	using System;
	using System.Collections.Generic;
	using System.Collections.ObjectModel;
	using System.Data;
	using System.Drawing;
	using System.Globalization;
	using System.IO;
	using System.Linq;
	using Terrasoft.Common;
	using Terrasoft.Common.Json;
	using Terrasoft.Configuration;
	using Terrasoft.Core;
	using Terrasoft.Core.Configuration;
	using Terrasoft.Core.DB;
	using Terrasoft.Core.DcmProcess;
	using Terrasoft.Core.Entities;
	using Terrasoft.Core.Factories;
	using Terrasoft.Core.Process;
	using Terrasoft.Core.Process.Configuration;
	using Terrasoft.GlobalSearch.Indexing;
	using Terrasoft.UI.WebControls.Controls;
	using Terrasoft.UI.WebControls.Utilities.Json.Converters;
 
	#region Class: AccountFile_CustomEventsProcess
 
	public partial class AccountFile_CustomEventsProcess<TEntity>
	{
 
		#region Methods: Public
 
		public override void OnFileSaving()
		{
 
			DateTime currentDateTime = DateTime.Now;
			var accountId = Entity.GetTypedColumnValue<Guid>("AccountId");
			var accountResultESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
			accountResultESQ.UseAdminRights = true;
			accountResultESQ.AddColumn("Id");
			accountResultESQ.AddColumn("UsrRestrictUploadDateTime");
			accountResultESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", accountId);
			var accountResult = accountResultESQ.GetEntityCollection(UserConnection);
			var connectedAccountData = accountResult[0];
			connectedAccountData.UseAdminRights = true;
			DateTime restrictDateTime = connectedAccountData.GetTypedColumnValue<DateTime>("UsrRestrictUploadDateTime");
			int comparisonResult = DateTime.Compare(currentDateTime, restrictDateTime);
			if (comparisonResult < 0)
			{
				base.OnFileSaving();
			}
			else
			{
				throw new Exception("Restricted!");
			}
		}
 
		public virtual void OnFileDeleting()
		{
			DateTime currentDateTime = DateTime.Now;
			var accountId = Entity.GetTypedColumnValue<Guid>("AccountId");
			var accountResultESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Account");
			accountResultESQ.UseAdminRights = true;
			accountResultESQ.AddColumn("Id");
			accountResultESQ.AddColumn("UsrRestrictUploadDateTime");
			accountResultESQ.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", accountId);
			var accountResult = accountResultESQ.GetEntityCollection(UserConnection);
			var connectedAccountData = accountResult[0];
			connectedAccountData.UseAdminRights = true;
			DateTime restrictDateTime = connectedAccountData.GetTypedColumnValue<DateTime>("UsrRestrictUploadDateTime");
			int comparisonResult = DateTime.Compare(currentDateTime, restrictDateTime);
			if (comparisonResult < 0)
			{
				base.DeleteFileUsingFileApi();
			}
			else
			{
				throw new Exception("Restricted!");
			}
		} 
 
		#endregion
 
	}
 
	#endregion
 
}

The logic in the code will compare the date\time value specified in the UsrRestrictUploadDateTime column of the main account record where the "Account attachments" detail is located, and it the current date and time is greater than the UsrRestrictUploadDateTime column value then the save and delete will fail:

As for deleting the file: custom exception doesn't work here and the standard message is returned:

Didn't figure out why, but it won't let deleting a record anyway. Also if this logic should be applied to specific users then you will also need to create an additional logic of checking if the current user (information on the user can be received from UserConnection) can or cannot add\delete files.

 

Hope it helps.

 

Best regards,

Oscar

Oleg Drobina,

 

Hi Oscar,

 

Have you found any solution? on custom, the exception doesn't work on the deletion scenario above and the standard message is returned.

Let me know if you have any solutions.

 

Regards.

Show all comments
Kanban
Studio_Creatio

We really need some help.

 

We were previously able to double click the card to enter the record we can no longer do this.

 

This is causing major issues for us. 

I have reached out the developer a.technologies.foundation@gmail.com a  number of times but noone is coming back to me.

I understand there was an update some months back and it stopped working since then.

Like 0

Like

2 comments

Hello Nicola,

 

Thank you for your message. 

 

Unfortunately, the Kanban view was developed by Advanced Technologies Foundation and this application is supported via GitHub:

https://github.com/Advance-Technologies-Foundation

If you have questions or encounter any issues while using the add-on, the developers of the application should be addressed.

 

Thank you for your understanding.

 

Best regards,

Anastasiia

Hello Nicola,

 

I am encountering the same issue. Did you find a solution to the problem ?

 

I would really appreciate it, thanks !

 

Best regards,

Jonathan

 

EDIT : I found a solution to the problem :

 

You must activate the mini page visualisation in the section wizard. Then, you can edit the mini page to display the important fields that you want. You should now be able to double click on the object box in the kanban view and jump to the related object !

Show all comments

Hi All,

 

I am trying to lock all the fields on a page. So I have followed the following article:

"https://academy.creatio.com/docs/developer/interface_elements/interface_control_tools/locking_edit_page_fields/overview"

I have set the value of IsModelItemsEnabled to false in methods of the edit page in following ways,

  1. setCardLockoutStatus: function() {

                    this.set("IsModelItemsEnabled", false);

                },
  2. onEntityInitialized: function(){

                    this.callParent(arguments);

                    this.set("IsModelItemsEnabled", false);

                },

But still all the fields are editable. Can anyone suggest what am I doing wrong?

Like 0

Like

2 comments
Best reply

Hi,

 

Tested on the AccountPageV2 schema and it worked properly:

 

1) Enable the feature via the database:

DECLARE @allEmpoyeeGroupName nvarchar(max) = 'All employees';
DECLARE @featureName nvarchar(max) = 'CompleteCardLockout'
DECLARE @featureStatus bit = 1;
 
IF (NOT EXISTS (SELECT NULL FROM Feature WHERE Code = @featureName))
BEGIN
  INSERT INTO Feature (Name, Description, Code, ProcessListeners) 
  VALUES (@featureName, @featureName, @featureName, 0)
END
IF(EXISTS (SELECT NULL FROM AdminUnitFeatureState 
         WHERE FeatureId = (SELECT Id FROM Feature WHERE Code = @featureName) AND
           SysAdminUnitId = (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName)) )
BEGIN
  UPDATE AdminUnitFeatureState SET FeatureState = @featureStatus WHERE FeatureId = (SELECT Id FROM Feature WHERE Code = @featureName) AND
                              SysAdminUnitId = (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName)
END
ELSE
BEGIN
  INSERT INTO AdminUnitFeatureState (ProcessListeners, SysAdminUnitId, FeatureState, FeatureId) VALUES 
                    (
                    0,
                    (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName),
                    @featureStatus, 
                    (SELECT Id FROM Feature WHERE Code = @featureName)
                     )
END

2) In the AccountPageV2 added the following code to the diff array:

{
				"operation": "merge",
				"name": "CardContentWrapper",
				"values": {
					"generator": "DisableControlsGenerator.generatePartial"
				}
			},

3) In the AccountPageV2 added the following attribute:

"IsModelItemsEnabled": {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				value: false
			},

4) Relogin to the app

5) Open account edit page

6) All the fields are locked

 

Best regards,

Oscar

Hi,

 

Tested on the AccountPageV2 schema and it worked properly:

 

1) Enable the feature via the database:

DECLARE @allEmpoyeeGroupName nvarchar(max) = 'All employees';
DECLARE @featureName nvarchar(max) = 'CompleteCardLockout'
DECLARE @featureStatus bit = 1;
 
IF (NOT EXISTS (SELECT NULL FROM Feature WHERE Code = @featureName))
BEGIN
  INSERT INTO Feature (Name, Description, Code, ProcessListeners) 
  VALUES (@featureName, @featureName, @featureName, 0)
END
IF(EXISTS (SELECT NULL FROM AdminUnitFeatureState 
         WHERE FeatureId = (SELECT Id FROM Feature WHERE Code = @featureName) AND
           SysAdminUnitId = (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName)) )
BEGIN
  UPDATE AdminUnitFeatureState SET FeatureState = @featureStatus WHERE FeatureId = (SELECT Id FROM Feature WHERE Code = @featureName) AND
                              SysAdminUnitId = (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName)
END
ELSE
BEGIN
  INSERT INTO AdminUnitFeatureState (ProcessListeners, SysAdminUnitId, FeatureState, FeatureId) VALUES 
                    (
                    0,
                    (SELECT Id FROM SysAdminUnit WHERE Name = @allEmpoyeeGroupName),
                    @featureStatus, 
                    (SELECT Id FROM Feature WHERE Code = @featureName)
                     )
END

2) In the AccountPageV2 added the following code to the diff array:

{
				"operation": "merge",
				"name": "CardContentWrapper",
				"values": {
					"generator": "DisableControlsGenerator.generatePartial"
				}
			},

3) In the AccountPageV2 added the following attribute:

"IsModelItemsEnabled": {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				value: false
			},

4) Relogin to the app

5) Open account edit page

6) All the fields are locked

 

Best regards,

Oscar

Oscar Dylan,

 

I have tried this and able achieve my objective. Apparently what I was missing was, I have not added the code in diff array. Thank you so much for your time & effort.

 

Regards,

Sourav Kumar Samal

Show all comments
S3
Studio_Creatio
7.18

Hi  

we have Creatio Installed in our environment and confined to saving files in S3 instead of the database, now how I can get a stream of files saved in S3 inside the process script 

I used the below code when I saved the file in the Database :

ar userConnection = Get<UserConnection>("UserConnection");
Guid contactId = new Guid("4177bc0a-8cb1-4895-aacf-5932ed6b4cb5");
string base64String = "";
Select selectEmail = new Select(userConnection)
            .Top(1)
                .Column("Data")
            .From("ContactFile")
            .Where("ContactId").IsEqual(Column.Parameter(contactId)) as Select;
using (var dbExecutor = userConnection.EnsureDBConnection()) {
    using (IDataReader dataReader = selectEmail.ExecuteReader(dbExecutor)) {
        if (dataReader.Read()) {
            byte[] imageBytes = dataReader.GetColumnValue("Data") as byte[];
            base64String = Convert.ToBase64String(imageBytes);
        }
    }
}

can anyone help on how to get the image stream saved in S3?

 

Like 0

Like

1 comments

Hi,

 

You need to try approaches described in Stack Overflow here or in the AWS forum here.

 

Best regards,

Oscar

Show all comments

Hi, 

I'm trying to compile the code below from a package set as a a separate assembly but I'm getting the error attached even though the object mentioned on the error is part of the package. 

 

What am I missing?

 

Thanks,

Jose

 

Error:

Object exists on package

Code generating the error:

using System;

using System.Collections.Generic;

using System.Linq;

using Terrasoft.Core;

using Terrasoft.Core.Entities;

using Terrasoft.Configuration;    



public class UsrPPDRCorrespondenceHelper

{

    private UserConnection UserConnection { get; }

    

    public UsrPPDRCorrespondenceHelper(UserConnection userConnection) {

        UserConnection = userConnection;

    }

    

    public Guid GetStatus(Guid corrId) {        

        var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "UsrPPDRCorrespondence");

        esq.AddAllSchemaColumns();

        Entity queryResult = esq.GetEntity(UserConnection, corrId);

        if (!(queryResult is UsrPPDRCorrespondence corr)) {

            throw new Exception($"Unable to get Correspondence status for ID {corrId}");

        }

        if (corr.UsrStatus == null) {

            throw new Exception($"Correspondence status for ID {corrId} is empty");

        }

        return corr.UsrStatus.Id;

    }

 }

Like 0

Like

1 comments

Hi,

 

According to the error UsrPPDRCorrespondence is not located at the same folder (directory to which assembly files were exported) as the source code that is being compiled.

 

Best regards,

Oscar

Show all comments
Studio_Creatio
7.18

I have list on section,

may i know how to filter data based on specific condition ?

lets say, i want to show the data where the status is "cancel" and the role is "admin"

 

thankyou

 

 

 

File attachments
Like 0

Like

1 comments

Hello Anton,

 

Thank you for your question!

 

Please, go to the section needed and click on Filters/Folders - Switch to advanced mode:

After that, click on Add condition and specify the condidions for the search:

 

Click 'Apply'.

 

More information on this can be found here:

https://academy.creatio.com/docs/user/platform_basics/business_data/fil…

 

Best regards,

Anastasiia

Show all comments
Studio_Creatio
7.18

Hi community,

is it possible to align to the right a currency field value ?

Like 0

Like

3 comments

Hi Stefano,

 

Thank you for your question!

 

Unfortunately, it's not possible to align columns to the right in a tile view - all the fields are located to the left. 

 

We have already registered the idea for our R&D team to implement this functionality in further releases. I will assign your case to this project in order to increase its priority.

 

Best regards,

Anastasiia

Anastasiia Lazurenko,

I am having the same issue to align the field value to the right. Have the team implemented this Functionality ? Or there is any other way to do it ?

Greetings, 

 

Unfortunately, this feature is not yet implemented, but it is being considered by our R&D team. 



Best regards, 

Orkhan

Show all comments
LookupSection
filter
Studio_Creatio
7.18

Hello,

 

I have a lookup with certain columns. One of the column is a lookup and I need to filter this column based on certain conditions.

 

Is there an example of how to do this?

 

Thanks

Like 0

Like

3 comments

Hello Shivani,

 

If I understand your business task correctly, you would like to apply the filtration for lookup columns on some record page.

This can be achieved with a help of business rules functionality. 

More detailed information about it can be found in the below and related articles:

https://academy.creatio.com/docs/user/no_code_customization/ui_and_busi…



Should you have any questions, please let us know!

 

Best regards, 

Anastasiia

Anastasiia Zhuravel,

 

That was not my requirement. Apologies if I was not clear before. Let me try to state the use case again.

In the lookup section, I have a Lookup table as follows

The highlighted column is a Lookup pointing to SysModule table. I need to filter out certain sections and not show all the sections that comes in the pick list by default. Since the lookup section is different from other sections like Contact or Leads, I cannot use the solution you provided. 



I believe I need to create a client module to override BaseLookupConfigurationSection. It would be great if you could give me an example.



Thanks

Hi Shivani,

 

unfortunately this functionality is not possible at the moment. We will create a request for the  R&D department so they can develop this functionality in future releases.

 

Best regards,

Dariy

 

 

Show all comments

Hi, 

 

I have successfully locked a page using this article: https://academy.creatio.com/docs/developer/interface_elements/interface…

However, the stage bar is still enabled when the attribute IsModelItemsEnabled is set to false. 

How can I disable the stage bar based on that attribute?

 

Thanks,

Jose

Jose

Like 0

Like

4 comments

Hi Jose,

 

You need to override the setActionsEnabled method in you section SectionActionsDashboard schema in the following manner:

setActionsEnabled: function(actions) {
				const isFeatureEnabled = Terrasoft.Features.getIsEnabled("YourFeatureCodeHere");
				if (isFeatureEnabled) {
					this.iterateActions(actions, function(action) {
					action.set("Enabled", false);
				}, this);
					return;
				}
				this.callParent(arguments);
			}

As a result no one will be able to change the stage from the UI.

 

Best regards,

Oscar

Oscar Dylan,

Hi Oscar,

 

I'm not sure where to add that code as I cannot make changes or replace the SectionActionsDashboard. Also, I need to unable or disable the bar based on the schema page IsModelItemsEnabled attribute that is set true or false on the onEntityInitialized function based on conditions on the page (e.g. Locked by field populated and equal to current user, status != 'Processed', etc. )

 

Thanks,

Jose

Jose Hernandez,

 

Hi,

 

You can replace the SectionActionsDashboard module for your section and you can put the code in the replaced module (every OOB section with actions dashboard has its own SectionActionsDashboard, like OpportunityActionsDashboard or CaseSectionActionsDashboard, take a look at the app configurations please). In case you have a custom section and you need some additional logic in the action dashboard of this section your can create your section actions dashboard based on the SectionActionsDashboard (selected as a parent) and then this custom actions dashboard can be connected to the page (see how it's developed for the LeadSectionActionsDashboard and added to the BaseLeadPage).

 

Secondly, you can create a logic of sending sandbox messages between modules as described in this example (in your case it should be SectionActionsDashboard module and your record page module) or you can see that a message is used in the base LeadSectionActionsDashboard.

 

Best regards,

Oscar

Oscar Dylan,

Thanks Oscar. I was able to disable the bar based on the attribute following your suggestions.

Show all comments