Two Multi Enum Field with Conditional options
Collapse
X
-
Hi folks,
telecastg made the amazing tutorial of how to affect link fields. It pushes me toward my old desire to create a tutorial of how to create the described in this topic dynamic logic on the code layer. As you may noticed the UI dynamic logic is a pretty complicated to managing, fixing errors and rewriting. Making the dynamic logic with coding needs some code skills but it allows you to fix and make changes very easily. So let's start.
1. Create or open the file /custom/Espo/Custom/Resources/metadata/clientDefs/Your-entity.json and add this link:
Code:{ [COLOR=#c0392b]"dynamicHandler": "custom:basic-dynamic-handler"[/COLOR] }
Code:define('custom:basic-dynamic-handler', ['dynamic-handler'], function (Dep) { return Dep.extend({ init: function () { this.controlFields(); this.recordView.listenTo( this.model, 'change:continent', this.controlFields.bind(this), ); }, controlFields: function () { var continent = this.recordView.model.get('continent'); if (continent.includes('Africa') && continent.includes('Asia') && continent.includes('Oceania')) { this.recordView.setFieldOptionList('tradeLane', [ 'India', 'Pakistan', 'Nigeria', 'Ethiopia', 'Australia', 'Papua New Guinea' ]); } else if (continent.includes('Africa') && continent.includes('Asia')) { this.recordView.setFieldOptionList('tradeLane', [ 'India', 'Pakistan', 'Nigeria', 'Ethiopia' ]); } else if (continent.includes('Africa') && continent.includes('Oceania')) { this.recordView.setFieldOptionList('tradeLane', [ 'Nigeria', 'Ethiopia', 'Australia', 'Papua New Guinea' ]); } else if (continent.includes('Asia') && continent.includes('Oceania')) { this.recordView.setFieldOptionList('tradeLane', [ 'India', 'Pakistan', 'Australia', 'Papua New Guinea' ]); } else if (continent.includes('Africa')) { this.recordView.setFieldOptionList('tradeLane', [ 'Nigeria', 'Ethiopia' ]); } else if (continent.includes('Asia')) { this.recordView.setFieldOptionList('tradeLane', [ 'India', 'Pakistan' ]); } else if (continent.includes('Oceania')) { this.recordView.setFieldOptionList('tradeLane', [ 'Australia', 'Papua New Guinea' ]); } } }); });
4. Refresh a webpage
Documentation is here https://docs.espocrm.com/development/dynamic-handler/.Leave a comment:
-
This tutorial shows how you can use the selections of one multilink field to control the options for a second multilink field. https://forum.espocrm.com/forum/deve...-multiple-link
If you define "continent" as an entity and "tradeLane" as another entity, you could accomplish what you are trying to do this way and you won't be forced to change the multienum field options manually each time that a new trade lane might be added or deleted and do some very long manual definitions.Last edited by telecastg; 07-22-2020, 05:42 PM.Leave a comment:
-
Maximus written it more beautifully. That the only way I could think of with the current available GUI.
I had tried a couple of AND, OR and NOT contain but all fail to work properly. Only the above setup work well but it get messy once you have even more messy once you add all 7 Continent and Trade Route.Last edited by esforim; 06-30-2020, 08:00 AM.Leave a comment:
-
Hi Nishan Perera,
espcrm is right. You need to define a logic for all possible options. Please investigate my screenshot to see how it should be configured to make what you want. Note that condition should be set in the same order as it shown in my example (from big to small).Leave a comment:
-
espcrm, I actually tried that way. But will try again this. there should be a easy way. will see. -
Nishan Perera Hi,
Since I was pinged I decide to give it a couple test on how to make it work. Can't seem to find any that make it simple though. From my method you will need to create option for each type of Option.
For example:
Continent1 - Trade1
Continent2 - Trade2
Continent3 - Trade3
Continent4 - Trade4
Your conditional option will need to look like this, which is very tiring once you get lots of option.
Field=Continent1
AND
Field=Continent2
Trade1, Trade2
---
Field=Continent1
Trade1
---
Field=Continent2
Trade2
--
Field=Continent1
AND
Field=Continent3
Trade1, Trade3
--
Field=Continent1
AND
Field=Continent4
Trade1, Trade4
---
etc, etc until you have all "filter" option considered for.
But if you allow for 3 Continent to be selected, that even worse. There may be a better way to do it, but I don't think it is possible with the current default coding.Last edited by esforim; 06-25-2020, 06:22 AM.Leave a comment:
-
Maximus Can I have your input for above request with two Multi-Enum ? Im still stuck with that.Leave a comment:
-
Wow I finally manage to get around to playing with this feature today. Did not even know it existed! That + button at the very button is rather hidden, all I see was the 3 first button with 3 conditions but there is this "4th" condition available.
I played with it using just enum (single) and it work great (after refreshing browser to make sure). I only start using it for the Account (Industry > Type) at this stage. Will begin to explore updating for other field and eventually try Multi-Enum to see if I can figure out how to make it work for you. -
I never knew you can do Conditional Formatting like that. Will need to play with it, but from a brief look at your Conditioning it seem like you have 3 separates condition?
I think for this to work you need to find out how to use the "OR" and "IF" statement.
Will need time to explore this, I haven't use this so can't give any advice.Leave a comment:
-
Two Multi Enum Field with Conditional options
Hi,
I have faced an issue with Two multi enum fields with conditional options. Please refer attached screenshots so you will have better understand what i was going to do. Simply I want that is,
From continent field if I chose two continent from trade lane field it will only has to be show trade lanes from each continent.
What I need to be done
Ex:
Continent = Asia, Oceania
Trade Lane = India, Pakistan, Australia, Papua New Guinea
But i'm getting only data from single continent according to Conditional options order
Conditional Order Asia,Africa,Oceania
Data i'm getting is with the current
Continent = Asia, Oceania
Trade Lane = India, Pakistan
Continent = Asia, Africa
Trade Lane = India, Pakistan
Continent = Africa, Oceania
Trade Lane = Nigeria, Ethiopia
Tags: None
Leave a comment: