Salesforce 为什么选择列表不使用lightning填充自定义相关选择列表字段的数据:在lightning组件中选择

Salesforce 为什么选择列表不使用lightning填充自定义相关选择列表字段的数据:在lightning组件中选择,salesforce,apex,apex-code,salesforce-lightning,sfdc,Salesforce,Apex,Apex Code,Salesforce Lightning,Sfdc,我正在尝试使用lightning复制自定义相关拾取列表字段的以下功能:在lightning组件中选择自定义对象引用:- 这里唯一的区别是我使用的是自定义对象ERT\U Case\U Type\U Data\uuuu c及其2个拾取列表级别\u 1\uu c和级别\u 2\uu c,而不是本文中的标准对象联系人引用 以下是ERT案例类型数据详细信息 以下是ERT案例类型数据c数据详细信息 下面是使用此组件的TestApp,不幸的是,我在下拉选择列表中没有看到数据 请帮助我知道我在这里做错了什么

我正在尝试使用lightning复制自定义相关拾取列表字段的以下功能:在lightning组件中选择自定义对象引用:-

这里唯一的区别是我使用的是自定义对象ERT\U Case\U Type\U Data\uuuu c及其2个拾取列表级别\u 1\uu c和级别\u 2\uu c,而不是本文中的标准对象联系人引用

以下是ERT案例类型数据详细信息

以下是ERT案例类型数据c数据详细信息

下面是使用此组件的TestApp,不幸的是,我在下拉选择列表中没有看到数据

请帮助我知道我在这里做错了什么

下面是Apex类dependentPicklist_updatetrl.apxc

            public class dependentPicklist_UpdateCtrl {
                @AuraEnabled 
                public static Map<String, List<String>> getDependentMap(sObject objDetail, string contrfieldApiName,string depfieldApiName) {
                    String controllingField = contrfieldApiName.toLowerCase();
                    String dependentField = depfieldApiName.toLowerCase();
                    
                    Map<String,List<String>> objResults = new Map<String,List<String>>();
                    
                    Schema.sObjectType objType = objDetail.getSObjectType();
                    if (objType==null){
                        return objResults;
                    }
                    
                    Map<String, Schema.SObjectField> objFieldMap = objType.getDescribe().fields.getMap();
                    
                    if (!objFieldMap.containsKey(controllingField) || !objFieldMap.containsKey(dependentField)){
                        return objResults;     
                    }
                    
                    Schema.SObjectField theField = objFieldMap.get(dependentField);
                    Schema.SObjectField ctrlField = objFieldMap.get(controllingField);
                    
                    List<Schema.PicklistEntry> contrEntries = ctrlField.getDescribe().getPicklistValues();
                    List<PicklistEntryWrapper> depEntries = wrapPicklistEntries(theField.getDescribe().getPicklistValues());
                    List<String> controllingValues = new List<String>();
                    
                    for (Schema.PicklistEntry ple : contrEntries) {
                        String label = ple.getLabel();
                        objResults.put(label, new List<String>());
                        controllingValues.add(label);
                    }
                    
                    for (PicklistEntryWrapper plew : depEntries) {
                        String label = plew.label;
                        String validForBits = base64ToBits(plew.validFor);
                        for (Integer i = 0; i < validForBits.length(); i++) {
                            String bit = validForBits.mid(i, 1);
                            if (bit == '1') {
                                objResults.get(controllingValues.get(i)).add(label);
                            }
                        }
                    }
                    return objResults;
                }
                
                public static String decimalToBinary(Integer val) {
                    String bits = '';
                    while (val > 0) {
                        Integer remainder = Math.mod(val, 2);
                        val = Integer.valueOf(Math.floor(val / 2));
                        bits = String.valueOf(remainder) + bits;
                    }
                    return bits;
                }
                
                public static String base64ToBits(String validFor) {
                    if (String.isEmpty(validFor)) return '';
                    
                    String validForBits = '';
                    
                    for (Integer i = 0; i < validFor.length(); i++) {
                        String thisChar = validFor.mid(i, 1);
                        Integer val = base64Chars.indexOf(thisChar);
                        String bits = decimalToBinary(val).leftPad(6, '0');
                        validForBits += bits;
                    }
                    
                    return validForBits;
                }
                
                private static final String base64Chars = '' +
                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
                    'abcdefghijklmnopqrstuvwxyz' +
                    '0123456789+/';
                
                
                private static List<PicklistEntryWrapper> wrapPicklistEntries(List<Schema.PicklistEntry> PLEs) {
                    return (List<PicklistEntryWrapper>)
                        JSON.deserialize(JSON.serialize(PLEs), List<PicklistEntryWrapper>.class);
                }
                
                public class PicklistEntryWrapper{
                    public String active {get;set;}
                    public String defaultValue {get;set;}
                    public String label {get;set;}
                    public String value {get;set;}
                    public String validFor {get;set;}
                    public PicklistEntryWrapper(){            
                    }
                    
                }
            }
            
下面是dependentPicklist_UpdateCtrlControllerHelper.js的帮助程序代码

            ({
                fetchPicklistValues: function(component,objDetails,controllerField, dependentField) {
                    // call the server side function  
                    var action = component.get("c.getDependentMap");
                    // pass paramerters [object definition , contrller field name ,dependent field name] -
                    // to server side function 
                    action.setParams({
                        'objDetail' : objDetails,
                        'contrfieldApiName': controllerField,
                        'depfieldApiName': dependentField 
                    });
                    //set callback   
                    action.setCallback(this, function(response) {
                        if (response.getState() == "SUCCESS") {
                            //store the return response from server (map<string,List<string>>)  
                            var StoreResponse = response.getReturnValue();
                            
                            // once set #StoreResponse to depnedentFieldMap attribute 
                            component.set("v.depnedentFieldMap",StoreResponse);
                            
                            // create a empty array for store map keys(@@--->which is controller picklist values) 
                            var listOfkeys = []; // for store all map keys (controller picklist values)
                            var ControllerField = []; // for store controller picklist value to set on lightning:select. 
                            
                            // play a for loop on Return map 
                            // and fill the all map key on listOfkeys variable.
                            for (var singlekey in StoreResponse) {
                                listOfkeys.push(singlekey);
                            }
                            
                            //set the controller field value for lightning:select
                            if (listOfkeys != undefined && listOfkeys.length > 0) {
                                ControllerField.push('--- None ---');
                            }
                            
                            for (var i = 0; i < listOfkeys.length; i++) {
                                ControllerField.push(listOfkeys[i]);
                            }  
                            // set the ControllerField variable values to country(controller picklist field)
                            component.set("v.listControllingValues", ControllerField);
                        }else{
                            alert('Something went wrong..');
                        }
                    });
                    $A.enqueueAction(action);
                },
                
                fetchDepValues: function(component, ListOfDependentFields) {
                    // create a empty array var for store dependent picklist values for controller field  
                    var dependentFields = [];
                    dependentFields.push('--- None ---');
                    for (var i = 0; i < ListOfDependentFields.length; i++) {
                        dependentFields.push(ListOfDependentFields[i]);
                    }
                    // set the dependentFields variable values to store(dependent picklist field) on lightning:select
                    component.set("v.listDependingValues", dependentFields);
                    
                },
                
            })
            
感谢和问候

卡罗琳

            ({
                doInit : function(component, event, helper) { 
                    // get the fields API name and pass it to helper function  
                    var controllingFieldAPI = component.get("v.controllingFieldAPI");
                    var dependingFieldAPI = component.get("v.dependingFieldAPI");
                    var objDetails = component.get("v.objDetail");
                    // call the helper function
                    helper.fetchPicklistValues(component,objDetails,controllingFieldAPI, dependingFieldAPI);
                },
                
                onControllerFieldChange: function(component, event, helper) {     
                    var controllerValueKey = event.getSource().get("v.value"); // get selected controller field value
                    var depnedentFieldMap = component.get("v.depnedentFieldMap");
                    
                    if (controllerValueKey != '--- None ---') {
                        var ListOfDependentFields = depnedentFieldMap[controllerValueKey];
                        
                        if(ListOfDependentFields.length > 0){
                            component.set("v.bDisabledDependentFld" , false);  
                            helper.fetchDepValues(component, ListOfDependentFields);    
                        }else{
                            component.set("v.bDisabledDependentFld" , true); 
                            component.set("v.listDependingValues", ['--- None ---']);
                        }  
                        
                    } else {
                        component.set("v.listDependingValues", ['--- None ---']);
                        component.set("v.bDisabledDependentFld" , true);
                    }
                },
            })
            
            ({
                fetchPicklistValues: function(component,objDetails,controllerField, dependentField) {
                    // call the server side function  
                    var action = component.get("c.getDependentMap");
                    // pass paramerters [object definition , contrller field name ,dependent field name] -
                    // to server side function 
                    action.setParams({
                        'objDetail' : objDetails,
                        'contrfieldApiName': controllerField,
                        'depfieldApiName': dependentField 
                    });
                    //set callback   
                    action.setCallback(this, function(response) {
                        if (response.getState() == "SUCCESS") {
                            //store the return response from server (map<string,List<string>>)  
                            var StoreResponse = response.getReturnValue();
                            
                            // once set #StoreResponse to depnedentFieldMap attribute 
                            component.set("v.depnedentFieldMap",StoreResponse);
                            
                            // create a empty array for store map keys(@@--->which is controller picklist values) 
                            var listOfkeys = []; // for store all map keys (controller picklist values)
                            var ControllerField = []; // for store controller picklist value to set on lightning:select. 
                            
                            // play a for loop on Return map 
                            // and fill the all map key on listOfkeys variable.
                            for (var singlekey in StoreResponse) {
                                listOfkeys.push(singlekey);
                            }
                            
                            //set the controller field value for lightning:select
                            if (listOfkeys != undefined && listOfkeys.length > 0) {
                                ControllerField.push('--- None ---');
                            }
                            
                            for (var i = 0; i < listOfkeys.length; i++) {
                                ControllerField.push(listOfkeys[i]);
                            }  
                            // set the ControllerField variable values to country(controller picklist field)
                            component.set("v.listControllingValues", ControllerField);
                        }else{
                            alert('Something went wrong..');
                        }
                    });
                    $A.enqueueAction(action);
                },
                
                fetchDepValues: function(component, ListOfDependentFields) {
                    // create a empty array var for store dependent picklist values for controller field  
                    var dependentFields = [];
                    dependentFields.push('--- None ---');
                    for (var i = 0; i < ListOfDependentFields.length; i++) {
                        dependentFields.push(ListOfDependentFields[i]);
                    }
                    // set the dependentFields variable values to store(dependent picklist field) on lightning:select
                    component.set("v.listDependingValues", dependentFields);
                    
                },
                
            })