Hi Team,

We have a scenario, where a lead is approved by two users. But just before they approve the lead, we want to create a optional task for those 2 users to ensure all the necessary details are verified. We want to show the tasks only to the approvers so that only they can edit or complete the task.

 

We have created both the task in DCM and dynamically giving access to those tasks to the 2 users through business process (removing view/edit access to all users and giving the same only to the owner of the task). We face issues on following points in following regards:

1. when someone other than the approver views the record, we get 2 empty tasks being displayed- NonApprover.png

2. approvers can see or edit their task but get another empty task (task that has to be done by other approver) - Approver.png

can you help us out resolving the issue.

Thanks,

Gokul

 

 

File attachments
Like 0

Like

1 comments

Hi,

 

Could you please write to us at support@creatio.com so we could better analyze the issue with external access?

 

Best regards,

Max.

Show all comments

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
Question

Hi Team,

 

I have a use case where our customers have more than 3000 records having profile photos linked with records. We have to migrate those photos to new Creatio production instances.

 

What we are trying is in below steps : 



Step 1: uploading the photos/Images in Attachment table.

Step 2: Adding a record in SysImage Table using business process from Attachment Table(step1).

Step 3: Updating the created record Id of SysImage in "PhotoId" of Contact section.



Issue : All the steps are working fine but Image is not reflecting against the contact using this approach.



Can anyone please tell us the reason for it? 

 

Support team suggestion https://community.creatio.com/questions/import-photo-image-imageapiservice



I have gone through this link, but didn't understand Ryan's suggestion correctly. 



My questions related to Ryan's code  is below : 



1. "var url = "https://somewebsite/someimage.png" -- What is this url supposed to be? 



2.  Do I need to write the give code in source code schema and then use it ?



3.  Since the customers have 3000 photos of contacts then how this code will find correct photo of correct contact? Actually what modifications is required before using this piece of code ?

 

 

 

 

Like 1

Like

1 comments

Hi Akshit,

 

Answers to questions related to Ryan's code:

 

1) This is the URL to a separate resource where an image is located (direct link to an image)

2) You can do it either in the source code inside the app or create an integration that will connect to the Creatio app and perform an update of the image

3) You have to create a logic that will go through 3000 records (a cycle I guess or an array and execute the logic for each item of this array using standard C# approaches of processing several records)  and execute the logic for these records.

 

Best regards,

Oscar

Show all comments

Hi Community,

 

I have this situation where I need to create a filter for the lookup Group (Fig. 2) based on my custom field that I've created on SysAdminUnit object (Fig.1).

 

Fig. 1

 

 

Fig. 2

 

I've managed to add the custom field to the SysAdminUnitPage (Fig.3). However, the custom field is not "connected" to the object field, because this page is different from the others and does not have entitySchemaName attribute (Fig. 4).

 

Fig.3

 

Fig.4

 

I would like to know:

  1. How can I "connect" the field that I've created on my SysAdminUnitPage to the field I've created on the SysAdminUnit object?
  2. How can I create a filter for the lookup Group inside CasePage using my custom field?

Any suggestion on how to achieve this? Thank you.

 

Best Regards,

Pedro Pinheiro

Like 0

Like

5 comments

Hi Pedro,

 

If you need to create a filter of the Group lookup on the case page then why do you replace the SysAdminUnitPageV2? And which case and account do you expect to see on the SysAdminUnitPageV2 for some role (for example for "System administrators")? Also I cannot see any filtration logic on the SysAdminUnitPageV2 module code you've shared.

 

You need to create a filter on the CasePage using an example provided here.

 

Best regards,

Oscar

Hi Oscar,

 

Thank you for the response.

 

My question consists of two parts:

 

1) I've created a replacing page of the "SysAdminUnitPageV2", so I could add my custom boolean field "Case" and the pre-built lookup field "Account". Since the "Account" field is not custom, I only added the field on my "SysAdminUnitPageV2" page through the “diff” array (image below). Every time I change and save my "Account" value, it will automatically update the value in the database for my specific record. However, the same does not happen to my custom field "Case".

I’ve created the “Case” field the same way "Account" field was created, but I think I'm missing some page logic that is responsible to store my “Case” values in the database.

 

 

2) The lookup filter that I want to add is for the "Group" lookup field inside the "CasePage". This filter should use the "Case" field, previously added to the "SysAdminUnit" object. With the example you provided I was able to complete this second part.

 

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

 

In the Fig.4 modify the "bindTo": "Case" to "bindTo": "UsrCase", save the schema and refresh the "role" page after that. Try saving some value and let me know about the result.

 

Best regards,

Oscar

Oscar Dylan,

 

I've made the changes, but my page cannot find the UsrCase column. I think it's because this page does not have the "entitySchemaName" attribute. But even if I try to add the "entitySchemaName" attribute the page will throw an exception.

 

 

Error Translation: "It was not possible to find the column through the following configuration."

 

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

 

To achieve your first result you need to:

 

1) Create a replacing object selecting the VwSysAdminUnit object as a parent

2) Create the lookup column with the "UsrCase" code and "Case" title inside the object from step 1.

3) Save and publish the object from step 1.

 

As a result here you should get this result:

4) Execute the following query in the database (please note that if you already have customizations in the VwSysAdminUnit table (new columns inside it) then the query that should be executed in your case can differ (all the columns of the already existing replacement should be mentioned in the query, study it before running)):

IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[VwSysAdminUnit]'))
DROP VIEW [dbo].[VwSysAdminUnit]
GO
CREATE VIEW [dbo].[VwSysAdminUnit]
AS
SELECT [SysAdminUnit].[Id]
	,[SysAdminUnit].[CreatedOn]
	,[SysAdminUnit].[CreatedById]
	,[SysAdminUnit].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById]
	,[SysAdminUnit].[Name]
	,[SysAdminUnit].[Email]
	,[SysAdminUnit].[Description]
	,[SysAdminUnit].[ParentRoleId]
	,[SysAdminUnit].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry]
	,[TimeZone].[Id] AS [TimeZoneId]
	,[SysAdminUnit].[UserPassword]
	,[SysAdminUnitType].[Id] AS [SysAdminUnitTypeId]
	,[SysAdminUnit].[AccountId]
	,[SysAdminUnit].[Active]
	,[SysAdminUnit].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP]
	,[LDAPElement].[Name] as [LDAPEntry]
	,[LDAPElement].[LDAPEntryId]
	,[LDAPElement].[LDAPEntryDN]
	,[SysAdminUnit].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId]
	,[SysAdminUnit].[ConnectionType]
	,[ConnectionType].[Id] AS [UserConnectionTypeId]
	,[SysAdminUnit].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId]
	,[SysAdminUnit].[DateTimeFormatId]
	,[SysAdminUnit].[Id] as [SysAdminUnitId]
	,[SysAdminUnit].[SessionTimeout] as [SessionTimeout]
	,[SysAdminUnit].[UsrCaseId] as [UsrCaseId]
FROM [SysAdminUnit]
INNER JOIN [SysAdminUnitType] ON [SysAdminUnitType].[Value] = [SysAdminUnit].[SysAdminUnitTypeValue]
LEFT JOIN [ConnectionType] AS [ConnectionType] ON [ConnectionType].[Value] = [SysAdminUnit].[ConnectionType]
LEFT JOIN [TimeZone] AS [TimeZone] ON [TimeZone].[Code] = [SysAdminUnit].[TimeZoneId]
LEFT JOIN [LDAPElement] ON [LDAPElement].[Id] = [SysAdminUnit].[LDAPElementId]
GO
CREATE TRIGGER [dbo].[ITR_VwSysAdminUnit_I]
ON [dbo].[VwSysAdminUnit]
	INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [SysAdminUnit](
	[Id]
	,[CreatedOn]
	,[CreatedById]
	,[ModifiedOn]
	,[ModifiedById]
	,[Name]
	,[Email]
	,[Description]
	,[ParentRoleId]
	,[ContactId]
	,[IsDirectoryEntry]
	,[TimeZoneId]
	,[UserPassword]
	,[SysAdminUnitTypeValue]
	,[AccountId]
	,[Active]
	,[LoggedIn]
	,[SynchronizeWithLDAP]
	,[LDAPEntry]
	,[LDAPEntryId]
	,[LDAPEntryDN]
	,[SysCultureId]
	,[ProcessListeners]
	,[PasswordExpireDate]
	,[HomePageId]
	,[ConnectionType]
	,[ForceChangePassword]
	,[LDAPElementId]
	,[DateTimeFormatId]
	,[SessionTimeout]
	,[UsrCaseId])
SELECT [Id]
	,[CreatedOn]
	,[CreatedById]
	,[ModifiedOn]
	,[ModifiedById]
	,[Name]
	,[Email]
	,[Description]
	,[ParentRoleId]
	,[ContactId]
	,[IsDirectoryEntry]
	,(SELECT COALESCE(
		(SELECT [TimeZone].[Code] FROM [TimeZone]
			WHERE [TimeZone].[Id] = [INSERTED].[TimeZoneId]), ''))
	,[UserPassword]
	,ISNULL((SELECT [SysAdminUnitType].[Value] FROM [SysAdminUnitType]
		WHERE [SysAdminUnitType].[Id] = [INSERTED].[SysAdminUnitTypeId]), 4)
	,[AccountId]
	,[Active]
	,ISNULL([LoggedIn], 0)
	,[SynchronizeWithLDAP]
	,(SELECT COALESCE(
		(SELECT [LDAPElement].[Name] FROM [LDAPElement]
			WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId]), ''))
	,(SELECT COALESCE(
		(SELECT [LDAPElement].[LDAPEntryId] FROM [LDAPElement]
			WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId]), ''))
	,(SELECT COALESCE(
		(SELECT [LDAPElement].[LDAPEntryDN] FROM [LDAPElement]
			WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId]), ''))
	,[SysCultureId]
	,[ProcessListeners]
	,[PasswordExpireDate]
	,[HomePageId]
	,COALESCE([INSERTED].[ConnectionType],
		(SELECT [ConnectionType].[Value] FROM [ConnectionType]
		WHERE [ConnectionType].[Id] = [INSERTED].[UserConnectionTypeId]), 0)
	,ISNULL([ForceChangePassword], 0)
	,[LDAPElementId]
	,[DateTimeFormatId]
	,[SessionTimeout]
	,[UsrCaseId]
FROM [INSERTED]
END
GO
CREATE TRIGGER [dbo].[ITR_VwSysAdminUnit_U]
ON [dbo].[VwSysAdminUnit]
	INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE [SysAdminUnit]
SET [SysAdminUnit].[CreatedOn] = [INSERTED].[CreatedOn]
	,[SysAdminUnit].[CreatedById] = [INSERTED].[CreatedById]
	,[SysAdminUnit].[ModifiedOn] =[INSERTED].[ModifiedOn]
	,[SysAdminUnit].[ModifiedById] = [INSERTED].[ModifiedById]
	,[SysAdminUnit].[Name] = [INSERTED].[Name]
	,[SysAdminUnit].[Email] = [INSERTED].[Email]
	,[SysAdminUnit].[Description] = [INSERTED].[Description]
	,[SysAdminUnit].[ParentRoleId] = [INSERTED].[ParentRoleId]
	,[SysAdminUnit].[ContactId] = [INSERTED].[ContactId]
	,[SysAdminUnit].[IsDirectoryEntry] = [INSERTED].[IsDirectoryEntry]
	,[SysAdminUnit].[TimeZoneId] =
		(SELECT COALESCE(
			(SELECT [TimeZone].[Code] FROM [TimeZone]
				WHERE [TimeZone].[Id] = [INSERTED].[TimeZoneId]), ''))
	,[SysAdminUnit].[UserPassword] = [INSERTED].[UserPassword]
	,[SysAdminUnit].[SysAdminUnitTypeValue] =
		(SELECT [SysAdminUnitType].[Value] FROM [SysAdminUnitType]
			WHERE [SysAdminUnitType].[Id] = [INSERTED].[SysAdminUnitTypeId])
	,[SysAdminUnit].[AccountId] = [INSERTED].[AccountId]
	,[SysAdminUnit].[Active] = [INSERTED].[Active]
	,[SysAdminUnit].[LoggedIn] = [INSERTED].[LoggedIn]
	,[SysAdminUnit].[SynchronizeWithLDAP] = [INSERTED].[SynchronizeWithLDAP]
	,[SysAdminUnit].[LDAPEntry] =
		CASE
			WHEN (UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 1 AND [INSERTED].[LDAPElementId] is not null)
					OR (UPDATE(LDAPElementId) AND [INSERTED].[LDAPElementId] is not null)
				THEN (SELECT [LDAPElement].[Name] FROM [LDAPElement] WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId])
			WHEN UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 0
				THEN ''
			ELSE [SysAdminUnit].[LDAPEntry]
		END
	,[SysAdminUnit].[LDAPEntryId] = 
		CASE
			WHEN (UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 1 AND [INSERTED].[LDAPElementId] is not null)
					OR (UPDATE(LDAPElementId) AND [INSERTED].[LDAPElementId] is not null)
				THEN (SELECT [LDAPElement].[LDAPEntryId] FROM [LDAPElement] WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId])
			WHEN UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 0
				THEN ''
			ELSE [SysAdminUnit].[LDAPEntryId]
		END
	,[SysAdminUnit].[LDAPEntryDN] = 
		CASE
			WHEN (UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 1 AND [INSERTED].[LDAPElementId] is not null)
					OR (UPDATE(LDAPElementId) AND [INSERTED].[LDAPElementId] is not null)
				THEN (SELECT [LDAPElement].[LDAPEntryDN] FROM [LDAPElement] WHERE [LDAPElement].[Id] = [INSERTED].[LDAPElementId])
			WHEN UPDATE(SynchronizeWithLDAP) AND [INSERTED].[SynchronizeWithLDAP] = 0
				THEN ''
			ELSE [SysAdminUnit].[LDAPEntryDN]
		END
	,[SysAdminUnit].[SysCultureId] = [INSERTED].[SysCultureId]
	,[SysAdminUnit].[ProcessListeners] = [INSERTED].[ProcessListeners]
	,[SysAdminUnit].[PasswordExpireDate] = [INSERTED].[PasswordExpireDate]
	,[SysAdminUnit].[HomePageId] = [INSERTED].[HomePageId]
	,[SysAdminUnit].[ConnectionType] = COALESCE([INSERTED].[ConnectionType],
		(SELECT [ConnectionType].[Value] FROM [ConnectionType]
		WHERE [ConnectionType].[Id] = [INSERTED].[UserConnectionTypeId]), 0)
	,[SysAdminUnit].[ForceChangePassword] = [INSERTED].[ForceChangePassword]
	,[SysAdminUnit].[LDAPElementId] = [INSERTED].[LDAPElementId]
	,[SysAdminUnit].[DateTimeFormatId] = [INSERTED].[DateTimeFormatId]
	,[SysAdminUnit].[SessionTimeout] = [INSERTED].[SessionTimeout]
	,[SysAdminUnit].[UsrCaseId] = [INSERTED].[UsrCaseId]
FROM [SysAdminUnit]
INNER JOIN [INSERTED] ON [SysAdminUnit].[Id] = [INSERTED].[Id]
END
GO
CREATE TRIGGER [dbo].[ITR_VwSysAdminUnit_D]
ON [dbo].[VwSysAdminUnit]
	INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [SysAdminUnit]
WHERE EXISTS(SELECT * FROM [DELETED] WHERE [SysAdminUnit].[Id] = [DELETED].[Id])
END
GO

This query is for MS SQL, if your application is hosted using the PostgreSQL database then your query should be written using PostgreSQL syntax (you can copy the OOB VwSysAdminUnitPostgreSql SQL-script from the LDAP package, add your custom columns inside the ready script and execute it after that).

 

5) In the replaced SysAdminUnitPageV2 module add the following code to the diff array of the module:

{
					"operation": "insert",
					"parentName": "Header",
					"propertyName": "items",
					"name": "UsrCase",
					"values": {
						"bindTo": "UsrCase",
						"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
						"layout": {
							"column": 0,
							"row": 1,
							"colSpan": 24
						}
					},
				}

6) Add the entitySchemaName: "VwSysAdminUnit", part to the replaced SysAdminUnitPageV2 module (below you can find an example of the correctly replaced module):

define("SysAdminUnitPageV2", [],
	function() {
		return {
			entitySchemaName: "VwSysAdminUnit",
			details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
			diff: /**SCHEMA_DIFF*/[
				{
					"operation": "insert",
					"parentName": "Header",
					"propertyName": "items",
					"name": "UsrCase",
					"values": {
						"bindTo": "UsrCase",
						"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
						"layout": {
							"column": 0,
							"row": 1,
							"colSpan": 24
						}
					},
				}
			]/**SCHEMA_DIFF*/,
			attributes: {},
			methods: {}
		};
});

7) Save the module and refresh the page

 

As a result you will get a working lookup that references the "Case" object:

and

PS: also please share code itself, but not its screenshots, sometimes copying some ready code can save the time:)

 

Best regards,

Oscar

Show all comments

Hi Creatio Community

 

I need help in applying red asterisk (*) with the required field values using CSS.

Can you suggest some me method for the same. 

I tried using the below given code in the span tag of the field label in CSS client module of the section but it didn't work.

 

  .required:after {
    content:" *";
    color: red;
  }

 

Provide some method of applying the asterisk sign with the required field labels.

 

Thanks in advance

 

Sarika

Like 0

Like

2 comments

Hi Sarika,

 

This is the question regarding CSS formation, feel free to reach out to official forums and websites (here is a couple of websites:

https://developer.mozilla.org/en-US/docs/Web/CSS

https://www.w3schools.com/css/

) related to CSS functionality.

 

Best regards,

Oscar

Hi Sarika,



Since It's OOTB.

You can mark your field required in the section wizard of the corresponding section.



Please provide your scenario if it couldn't be achieved via section wizard.



BR,

BHoobalan Palanivelu.

 

Show all comments

Hello Creatio Community,

 

How can we fix custom filters for detail records. For instance, there is a month lookup in the detail record. I don't want to repeatedly navigate to the options to apply filter and then select the month column followed by selecting the month name from the lookup.

 

I want a custom filter readily available on the top of the detail records wherein I only have to select the month name from the filter. How can I achieve this?

 

 

Like 1

Like

1 comments

Hello Sarika, 



Your business task can be achieved only via development. 

 

You can take an example of the filter from the Timeline detail. The example can be found in TimelineFiltersSchema detail.

 

This article could be also useful for you:

https://academy.creatio.com/documents/technic-sdk/7-13/adding-quick-fil…



Best regards,

Bogdan

Show all comments

Hello Creatio Community,

When a Detail is saved dhe DetailPage is automatically closed. Is it possible to save the Detail without closing the Page?

Like 0

Like

2 comments
Best reply

Hi Petrika,



Have you tried Silentsave method?

onSaveButtonClick: function() {
   if (this.get("IsProcessMode")) {
      this.save({ isSilent: true });
   } else {
      this.save();
   }
} 

Refer the articles here & here



Best regards,

Bhoobalan Palanivelu.

Hi Petrika,



Have you tried Silentsave method?

onSaveButtonClick: function() {
   if (this.get("IsProcessMode")) {
      this.save({ isSilent: true });
   } else {
      this.save();
   }
} 

Refer the articles here & here



Best regards,

Bhoobalan Palanivelu.

Bhoobalan Palanivelu,

Thanks very much !

Show all comments

Hi Team,

 

I want to hide or restrict the Select Fields to Display option from specific users on Second Records Page.

 

Kindly help me achieve this.

 

Thanks in advance

 

Sarika

Like 0

Like

1 comments

Hi Sarika,

 

Thank you for your question!

 

At the moment, there is no standard tool that allows restricting columns setup (Select fields to display) for separate users or roles, and our R&D team is aware of this functionality implementation need. I have also informed them about your request so to raise the priority of this problem. As a workaround you can try to use development tools as far as the visibility of this button is bound to the attribute, which is set as "True" by default; the value of this attribute can be changed only by the means of development (adding the custom code). 



There is already exists a quite similar task on the Creatio Community here. In case this functional request will be in high demand it can be implemented into OOTB logic in future releases as well.

 

Best regards,

Anastasiia

Show all comments

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

Our business process prompts the user to create a follow up calendar event if the current call event is listed as 'call later.'  Currently the process creates a new call task which OOTB opens a new call task screen. This isn't intuitive because the user cannot see their own calendar availability. I want to set the process to open their calendar view first where the user can confirm time/availability and manually add the task from there. I cannot find a way to open to the calendar view directly from the business process. Is there a way to do this?

 

Like 0

Like

2 comments

Dear Susan, 

we are currently investigating this case in order to find a possible ways of implementing this functionality. As soon as possible we will let you know with the update.

Pre-configured page cannot open the section, so you will need to create a logic with the script task that will send a socket message to the client (using MsgChannelUtilities.PostMessage method and the ClientMessageBridge (as described here)). Since the message should be received on any page you will need to replace the BasePageV2 module and add the message and the handler for the message there.

 

The handler should use the code similar to the one below:

this.sandbox.publish("PushHistoryState",{
                    hash:"SectionModuleV2/ActivitySectionV2/"
                });

so that the handler could open the ActivitySectionV2. But there is a problem with this: the activity section will be opened either in the schedule or grid view (depending on the last active view selected by the user for which the activity section will be opened). In this case you will also need to create some additional logic that will set the schedule view as an active view when opening the section from the message handler. The methods to override are initDataViews and loadActiveViewData.

 

Best regards,

Oscar

Show all comments