Я пытаюсь написать компонент Lightning для раздела «Элементы для утверждения» на домашней странице Lightning, столкнувшись с проблемой отображения данных в компоненте, здесь, под моим контроллером и кодами компонентов.

Контроллер вершины:

public class Lex_ItemsToApproveController{


public class item_wrapper {

       @AuraEnabled public String DateSubmited { get; set; }
       @AuraEnabled public id approvalid { get; set; }
       @AuraEnabled public id recordId {get;set;}
       @AuraEnabled public String CreatedByName {get;set;}
       @AuraEnabled public String recordName {get;set;}


        public item_wrapper( String DateSubmited,id approvalid, id recordId, String CreatedByName,String recordName ) {

            this.DateSubmited = DateSubmited;
            this.approvalid =approvalid ;
            this.recordId =recordId;
            this.CreatedByName =CreatedByName ;
            this.recordName=recordName;
        }

    }
        @AuraEnabled
Public static List<item_wrapper> getAllItemWrappers(){
    list<item_wrapper> items_to_approve = new List<item_wrapper>();
    map<id,processInstanceWorkItem>pwMap=new Map<id,processInstanceWorkItem>();
    list<processInstanceWorkItem>pwList=new List<processInstanceWorkItem>();

    List<Group>grpList=[select id, name, type from group where RelatedId =: userInfo.getUserRoleId()];
    List<ID>userorGroupid=new List<ID>();
        userorGroupid.add(userInfo.getUserid());
    System.debug('grpList ==>'+grpList);

    for(Group item:grpList){
        userorGroupid.add(item.id);   
    }


    Set<id> queueUserQueueIds=setOfIdFromListOfSObject([Select GroupId FROM GroupMember WHERE UserOrGroupId IN: userorGroupid], 'GroupId' );
    system.debug('Queues==>'+queueUserQueueIds.size());

    pwList=[SELECT  Id,OriginalActorId,OriginalActor.Name,ProcessInstance.TargetObject.Name,ProcessInstance.TargetObject.type, ActorId, CreatedById,
                                                     CreatedBy.id,CreatedBy.Name, ProcessInstance.TargetObjectId,Actor.Name,SystemModstamp,CreatedDate
                                               FROM ProcessInstanceWorkItem
                                              WHERE (ActorId in :queueUserQueueIds OR  actorid = :userinfo.getuserid())
                                                ORDER BY CreatedDate  DESC  LIMIT 1000];

    system.debug('pwList -->'+pwList.size());
    if(!pwList.isEmpty()){
        for(processInstanceWorkItem item:pwList){
        pwMap.put(item.id,item);

        }    
    }



    if(!pwMap.isEmpty()){
        for(processInstanceWorkItem item:pwMap.values()){

            String sObjName = item.processinstance.targetobjectid.getSObjectType().getDescribe().getLabel();                
            String dateTimeValue = item.CreatedDate.format('MM/dd/yyyy hh:mm a');  

            items_to_approve.add(new item_wrapper(dateTimeValue,item.id,item.processInstance.targetObjectID,item.CreatedBy.Name,item.ProcessInstance.targetObject.name));

        } 
    }  
    system.debug('ItemsToAPprove size==>'+items_to_approve.size());
    system.debug('List size==>'+items_to_approve.size());
    system.debug('List 4==>'+items_to_approve);

    return items_to_approve;

}



     private static Set<Id> setOfIdFromListOfSObject( List<SObject> oList, String oName ) {
        Set<Id> Ids = new Set<Id> {};
        for (SObject o : oList) {
            Ids.add( String.valueof(o.get(oName)) );
        }
        return Ids;
    }
}

Составная часть :

<aura:component implements="flexipage:availableForAllPageTypes" access="global" controller="Lex_ItemsToApproveController">
      <aura:handler name="init" action="{!c.item_to_approve}" value="{!this}" />  
    <aura:attribute name="items_to_approve" type="List" />
          test
            <aura:iteration items="{!v.items_to_approve}" var="item">
               {!item.CreatedByName}

            </aura:iteration>

</aura:component>

JS-контроллер:

({

         item_to_approve  : function(component, event, helper) {
                helper.fetchItemsToApprove(component, event, helper);

    }
})

Помощник: ({ fetchItemsToApprove : function(component,Event,Helper) { var action = component.get("c.getAllItemWrappers");

      action.setCallback(this, function(response) {
        var state = response.getState();
        console.log('debug connsole state'+state);  
        if(state === 'SUCCESS') {
            var itemsToApprpove = response.getReturnValue();
            console.log('debug connsole1'+itemsToApprpove);
            component.set("v.itemstoApprove",itemsToApprpove);
        }
        else {
            alert('Error in getting data');
        }
    });
    $A.enqueueAction(action);
    }  

})

Ошибка, которую я получаю: На этой странице обнаружена ошибка. Возможно, вам просто нужно обновить его. Не удалось найти действие «items_to_approve» в контроллере c:LEX_ItemsToApproveComponent. Неверный дескриптор: {c:LEX_ItemsToApproveComponent}

Любая помощь приветствуется, чтобы найти проблему, спасибо заранее.

0
prasad nagamalli 25 Сен 2018 в 14:14

2 ответа

Лучший ответ

Похоже, вы хотите вызвать метод вершины из внешнего контроллера молнии. Чего вам не хватает, так это метода вершины, просто имея геттер и сеттер, вы не сможете получить информацию, необходимую для внешнего интерфейса. Итак, в вашем контроллере вершины есть следующий метод:

@AuraEnabled
public static List<item_wrapper> getAllItemWrappers() {
 //here you need to implement what you have done inside your constructor.
 // and return the item wrappers
}

Затем в вашем интерфейсном контроллере молнии. Где вы настраиваете действие, сделайте

var action = component.get("c.getAllItemWrappers"); 

Вместо того,

var action = component.get("c.items_to_approve"); 
1
Ranga 21 Сен 2018 в 10:58

Вы не можете получить доступ к такой переменной. Это способ вызвать метод Apex. Вместо того, чтобы делать все в конструкторе, создайте метод @AuraEnabled и переместите свой код в этот метод. Этот метод вернет объект-оболочку, и вы можете установить атрибут компонента с возвращаемым результатом в обратном вызове.

Обратитесь за помощью к следующему сообщению в блоге —

http://sfdcmonkey.com/2017/07/06/use-wrapper-class-lightning-component/

2
Naval Sharma 21 Сен 2018 в 10:55
Это сработало, большое спасибо!! Позже я получаю эту ошибку в консоли. У вас есть какие-нибудь идеи, друзья? "Отказано в подключении к 'west-uni--owsp1809.cs71.my.salesforce.com/services/data/v36.0/…", потому что это нарушает следующую директиву Content Security Policy: "connect -src 'self' api.bluetail.salesforce.com staging.bluetail.salesforce.com предварительный .bluetail.salesforce.com *.visualforce.com"."
 – 
prasad nagamalli
25 Сен 2018 в 13:47
Также обновил код
 – 
prasad nagamalli
25 Сен 2018 в 14:14