簡體   English   中英

自定義 Salesforce Lightning 應用程序提供“您無權訪問此記錄”

[英]Custom Salesforce Lightning App giving "You dont have access to this record"

名為“堆棧”的自定義 Lightning 應用程序提供“您無權訪問此記錄聯系人” 嘗試按照如何使用 Salesforce 在案例類型中實施完整搜索中的步驟進行操作?

在此處輸入圖片說明

這是自定義對象 ERT 案例類型數據的組織范圍默認值在此處輸入圖片說明

這是stack.aspx的Apex代碼

                public class Stack {
                      @AuraEnabled(cacheable=true)
                    public static List<LookupSearchResult> search(String searchTerm, List<String> selectedIds){
                        if(String.isBlank(searchTerm) || searchTerm.length() < 2){
                            return null;
                        }
                        String t = '%' + searchTerm + '%'; // decide how you want to search, "starts with", "includes" or what
                        
                        List<ERT_Case_Type_Data__c> records = [SELECT Id, Name, Level_1__c, Level_2__c, Level_3__c
                            FROM ERT_Case_Type_Data__c
                            WHERE Level_1__c LIKE :t OR Level_2__c LIKE :t OR Level_3__c LIKE :t
                            ORDER BY Level_1__c, Level_2__c, Level_3__c
                            LIMIT 20];
                        
                        /* You could also experiment with SOSL?
                        records =  [FIND :('*' + searchTerm + '*') IN ALL FIELDS 
                            RETURNING Case_Type_Data__c(Id, Name, Level_1__c, Level_2__c, Level_3__c)][0];
                        */
                        
                        List<LookupSearchResult> results = new List<LookupSearchResult>();
                        for(ERT_Case_Type_Data__c ctd : records){
                            results.add(new LookupSearchResult(ctd.Id, 'ERT_Case_Type_Data__c', 'standard:case_wrap_up', ctd.Name,
                                String.join(new List<String>{ctd.Level_1__c , ctd.Level_2__c, ctd.Level_3__c}, '; ')
                            ));
                        }
                        return results;
                    } 

                }

這是Aura 組件(html 部分)

                <aura:component implements="force:hasRecordId,force:appHostable,flexipage:availableForAllPageTypes,force:lightningQuickAction" access="global" controller="Stack">
                    <aura:attribute access="global" type="List" name="selection" default="[]"/>
                    <aura:attribute access="global" type="List" name="errors" default="[]"/>

                    <lightning:card title="New Case Type">
                        
                        <lightning:recordEditForm aura:id="myForm" objectApiName="ERT_Case_Type__c" onsubmit="{!c.onSubmit}" onsuccess="{!c.onSuccess}">
                        <lightning:messages />
                        <c:Lookup selection="{!v.selection}" onSearch="{!c.lookupSearch}" onSelection="{!c.useSelected}" errors="{!v.errors}" label="Search" placeholder="Search Case Types Data"/>
                        <lightning:inputField aura:id="Level_1__c" fieldName="Level_1__c" />
                        <lightning:inputField aura:id="Level_2__c" fieldName="Level_2__c" />
                        <lightning:inputField aura:id="Level_3__c" fieldName="Level_3__c" />
                        <lightning:button class="slds-m-top_small" variant="brand" type="submit" name="save" label="Save" />
                    </lightning:recordEditForm>
                    </lightning:card>
                </aura:component>

這是Aura 組件 - JS 控制器部分

({
    lookupSearch : function(component, event, helper) {
    // Get the lookup component that fired the search event
    const lookupComponent = event.getSource();
    const serverSearchAction = component.get('c.search');
    lookupComponent.search(serverSearchAction);
},

useSelected: function(component, event, helper) {
    const selection = component.get('v.selection');
    const errors = component.get('v.errors');
    
    if (selection.length) {
        if(errors.length){  // Clear errors, if any
            component.set('v.errors', []);
        }
        let levels = selection[0].subtitle.split('; ');
        component.find('Level_1__c').set('v.value', levels[0]);
        component.find('Level_2__c').set('v.value', levels[1]);
        component.find('Level_3__c').set('v.value', levels[2]);
    }
},
onSubmit: function(component, event, helper) {
    debugger;
    event.preventDefault();       // stop the form from submitting
    var fields = event.getParam('fields');
    fields.Case__c = component.get('v.recordId'); // link to "this" Case
    component.find('myForm').submit(fields);
},
onSuccess: function(component, event, helper){
    var toastEvent = $A.get("e.force:showToast");
    toastEvent.setParams({
        "title": "Success!",
        "message": "Case Type saved OK, refreshing",
        "type": "success"
    });
    toastEvent.fire();
    $A.get('e.force:refreshView').fire(); // reload page
   }
})

請幫助我消除此訪問錯誤

問候, 卡羅琳

我懷疑它與共享相關(所以不是組織范圍的設置)。 如果它是共享的,它只會總是返回 0 結果,但沒有大的紅色錯誤。

如果刪除帶有<c:Lookup selection="{!v.selection}" onSearch="{!c.lookupSearch}" onSelection="{!c.useSelected}" errors="{!v.errors}" label="Search" placeholder="Search Case Types Data"/>錯誤是否消失? 如果它仍然存在 - 自定義代碼或Case_Type_Data__c周圍的權限有問題)。 如果它消失了 - 這是創建ERT_Case_Type__c的事情)

檢查配置文件(或權限集,如果您使用它們)權限以:

  • 讀取源對象( Case_Type_Data__c )和所有引用的字段( Level_1__c ...)
  • 創建目標對象( ERT_Case_Type__c )並讀取/編輯所有引用的字段( Level1__c ... 還有Case__c
  • 閱讀Case對象和Case.CaseNumber , Case.Subject字段
  • 執行 Apex 類的權限(重命名為Stack ,對嗎?)。 也可能添加運行LookupSearchResult權限。

我懷疑您啟用了一些關鍵更新(設置 -> 關鍵更新或設置 -> 發布更新),例如“根據用戶配置文件限制對經過身份驗證的用戶的 @AuraEnabled Apex 方法的訪問”或“需要在查找字段中查看記錄名稱的權限”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM