They are working for me. One thing I did initially was add it to the control in the viewConfigDiff. You're actually supposed to add the validator to the attribute in the viewModelConfig - not to the control in the diff. Once I moved it there it worked. Your column is likely in the viewModelConfig already (if it's been added to the page). Look for it there and just add the validator to that existing attribute in the model.
Hmm. Not sure about that. I've only used validators where I need the control's value only (which is provided in the params passed in). I had assumed you could pass in other values in the validator params, but that doesn't seem to be the case (or at least I can't figure out how that works). Hopefully we'll see more documentation soon.
Hello,
Unfortunately, it is currently not available to enable Multiple selections of lookup values in Freedom UI.
We've registered it in our R&D team backlog for consideration and implementation in future application releases. Thank you for helping us to improve our product.
I tried a redirect inside the method crt.HandleViewModelInitRequest for the list page it works but it has a strange behavior in some cases (window.location). I tried something similar than this.sandbox.publish("PushHistoryState", {hash: "ProcessCardModuleV2/AutoGeneratedPageV2/377caef9-d9ed-48ee-8458-3106e61dfdc6"}); but I didn't find the equivalent.
You can try another approach: the column that is responsible for the section list page that will be opened when going to the section is SectionSchemaUId (in the SysModule table). This column represents data from the UId column of the SysSchema table. What can be done to force custom page to be opened when opening the section is modifying the current SectionSchemaUId column value for the proper SysModule table record to the desired value. So you need to find the SysModule record responsible for your current section (for example using the query like:
select * from "SysModule" where "SectionSchemaUId" in (select "UId" from "SysSchema" where "Name" = 'UsrTest_ListPage')
), use an Id of the record found and then use it in the query like:
update "SysModule" set "SectionSchemaUId" = 'desired UId of the UsrPage_ebkv9e8 schema' where "Id" = 'Id found previously'
and relogin to the app after that. I recently tested it and the Services_ListPage was opened for my custom Freedom UI section:
You can try another approach: the column that is responsible for the section list page that will be opened when going to the section is SectionSchemaUId (in the SysModule table). This column represents data from the UId column of the SysSchema table. What can be done to force custom page to be opened when opening the section is modifying the current SectionSchemaUId column value for the proper SysModule table record to the desired value. So you need to find the SysModule record responsible for your current section (for example using the query like:
select * from "SysModule" where "SectionSchemaUId" in (select "UId" from "SysSchema" where "Name" = 'UsrTest_ListPage')
), use an Id of the record found and then use it in the query like:
update "SysModule" set "SectionSchemaUId" = 'desired UId of the UsrPage_ebkv9e8 schema' where "Id" = 'Id found previously'
and relogin to the app after that. I recently tested it and the Services_ListPage was opened for my custom Freedom UI section:
Oleg Drobina, thank you so much! I tried this approach before and it doesn't work probably because I had a mistake with the IDs. Now it is working. Appreciate your help. Regards
In the new Freedom UI, I need that in the dropdown field 'Responsible' (contact object) appear only the data that are of 'Type = Employee' (contact attribute).
I know how to do it in the previous versions but not in the new one.
In the new one I can't find the way to make this filter, can you help me?
Hello Everyone,
I am working on a scenario where I need to get Records (With Id and Name) from another object.
In Model class, we can get one record but how to get a Collection of records with a filter/Parameter "Name" it should get all the records with the same Name.
There is an issue in current versions of Creatio with the filter classes, such as FilterGroup etc, being applied to model load/queries. I've been reporting this issue since 8.0.6 (#SR-01182879) but it's still not yet fixed in 8.0.9, very frustrating (I've been told it will be fixed in 8.1 #SR-01198668 🤞🏻). However you can still use them with a small workaround. The example below will get all Accounts that have Type = Customer:
// make sure to add "@creatio-devkit/common" as sdkconst accountModel = await sdk.Model.create("Account");const customerFilter =new sdk.FilterGroup();
await customerFilter.addSchemaColumnFilterWithParameter(sdk.ComparisonType.Equal, "Type.Name", "Customer");// This is the workaround you have to do for the filters to work.// Shallow copy to a new object and then reassign the items collection.const newCustomerFilter = Object.assign({}, customerFilter);
newCustomerFilter.items= customerFilter.items;// now use new shallow copied filters in the queryconst customers = await accountModel.load({
attributes:["Id", "Name", "Type"],
parameters:[{
type: sdk.ModelParameterType.Filter,
value: newCustomerFilter
}]});// the customers variable is now an array of accounts with Id, Name, and Type columns
console.log(customers);
The whole issue with the FilterGroup is that the items collection doesn't get unrolled from a collection to an array - the copy forces the object to flatten out how it's expected by the underlying DataService call.
handler: async (request, next) => {
// Get the selected date values
var dateFrom = new Date(await request.$context.DateTimeAttribute_6jtq65k);
var dateTo = new Date(await request.$context.DateTimeAttribute_vg9eydm);
var datesBetween = [];
var currentDate = new Date(dateFrom);
while (currentDate <= dateTo) {
datesBetween.push(new Date(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
// Convert dates to integers without the time component
var datesAsIntegers = datesBetween.map(date => {
return parseInt(date.toISOString().slice(0, 10).replace(/-/g, ""), 10);
});
const accountModel = await sdk.Model.create("UsrEntity_a6e9b72");
// Load the accounts based on the filter.
const accounts = await accountModel.load({
attributes: ["DateTimeAttribute_x2whel6"],
});
console.log(accounts);
for (const value of accounts)
{
for (const value1 of datesAsIntegers)
{
const integerValue = parseInt(value1);
value.NumberAttribute_ejh4wbq === integerValue;
}
console.log("1");
}
return next?.handle(request);
}
Here we are trying to get value of "NumberAttribute_ejh4wbq" but we are only getting "Id" .
Can you help us with this?
Verify that the column name is correct. In the accountModel.load your passing the attributes array with "DateTimeAttribute_x2whel6", this needs to be the column name in the object/table (which will likely start with a Usr)
For example, account types: we have 2 inactive values in our Account Type lookup: Our company & Contractor
In classic UI, when you work on list & form pages, these 2 values will not show up, but in Freedom UI yes (see screenshots below). Same scenario for inactive contacts, inactive accounts, inactive fields in other lookups, etc....
Indeed sorry, we call it "inactive" but it's deactivated records.
You activate the feature for any object by creating a replacing object, here for accounttype, and you click the OOTB feature "Allow records deactivation"
I have a custom entity A, that has a relation with a Contact entity.
I would like to edit the related contact in the context of the entity A. Is this possible in Freedom UI?
Could I open a dialog with the Edit form of the Contact?
If it's not possible, I believe I have to navigate to the Contact to edit it.
Thank you Bogdan. That could work in case of a multi instance list, like the list of Contacts. What If I have only one contact related to a custom entity, like the example described?
Good day, Colleagues!
Does anyone possibly have a code example on the new Freedom page showing how to calculate the difference of values of two page fields and write it into a third field? For example: payment balance = Amount-PaymentAmount Maybe there's also a code example on how to get the exchange rate on the date specified in the Date field according to the Currency field or an example of how to refer to another object to get a value from it.