Hello,
Can any one help me how to get "Description" of a lookup type field and Populate it in any Other Field via code in freedomUI ?
Like
I'm positive there is a way to register the field as an attribute for the Lookup's data source, I've just not figured out or tested how to do that yet. Likely info here https://academy.creatio.com/docs/developer/front_end_development_freedo…
As for now, you could do the following - in this example I have a lookup for ContactType and will retrieve the Description once selected. You'll ned to know the actual attribute name for the lookup which you can see in the viewDiffConfig for the control as:
control: "$SomeAttributeName" (this is the attribute name, minus the "$")
Then, add a change request handler like this:
{ request: "crt.HandleViewModelAttributeChangeRequest", handler: async (request, next) => { // listen for changes to the Lookup field attribute if (request.attributeName === "LookupAttribute_spr6dlv" && !request.silent) { // get the selected value var lookupVal = await request.$context.LookupAttribute_spr6dlv; // retrieve the description const model = await sdk.Model.create("ContactType"); const results = await model.load({ attributes: ["Description"], parameters: [{ type: sdk.ModelParameterType.PrimaryColumnValue, value: lookupVal.value }] }); const desc = results[0].Description; // set the other column's attribute with the description request.$context.SomeOtherAttribute = desc; } return next?.handle(request); } }
Ryan
Hi,
Example of retrieving description value of the lookup:
const accountCategoryModel = await sdk.Model.create("AccountCategory"); const accountCategory = await accountCategoryModel.load({ attributes: ["Id", "Name", "Description"], parameters: [{ type: sdk.ModelParameterType.PrimaryColumnValue, value: "38ea507c-55e6-df11-971b-001d60e938c6" }] }); console.log("The result: ", accountCategory);
value: "38ea507c-55e6-df11-971b-001d60e938c6" - Id here can be dynamically set as some variable that is received from the context. To set the result for the column (in this case for the UsrSubjectDetails):
request: "crt.HandleViewModelAttributeChangeRequest", handler: async (request, next) => { if (request.attributeName === 'UsrSubject') { const isFieldsShouldBeSynchronized = request.oldValue === await request.$context.UsrSubjectDetails; if (isFieldsShouldBeSynchronized) { request.$context.UsrSubjectDetails = "some value"; } }
I'm positive there is a way to register the field as an attribute for the Lookup's data source, I've just not figured out or tested how to do that yet. Likely info here https://academy.creatio.com/docs/developer/front_end_development_freedo…
As for now, you could do the following - in this example I have a lookup for ContactType and will retrieve the Description once selected. You'll ned to know the actual attribute name for the lookup which you can see in the viewDiffConfig for the control as:
control: "$SomeAttributeName" (this is the attribute name, minus the "$")
Then, add a change request handler like this:
{ request: "crt.HandleViewModelAttributeChangeRequest", handler: async (request, next) => { // listen for changes to the Lookup field attribute if (request.attributeName === "LookupAttribute_spr6dlv" && !request.silent) { // get the selected value var lookupVal = await request.$context.LookupAttribute_spr6dlv; // retrieve the description const model = await sdk.Model.create("ContactType"); const results = await model.load({ attributes: ["Description"], parameters: [{ type: sdk.ModelParameterType.PrimaryColumnValue, value: lookupVal.value }] }); const desc = results[0].Description; // set the other column's attribute with the description request.$context.SomeOtherAttribute = desc; } return next?.handle(request); } }
Ryan