CPQ 注意事项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang44429824/article/details/82688551

1.经常.id取不到值,最好要大写I,如图写;

Application Event 事件获取不到问题:错误信息:Cannot read property 'setParams' of undefined

之前代码如图:

onRefresh 事件一直是undefined,因为baseSvc是自定义的一个service,主要是调用后台,并callback,里面采用了ES6的语法,导致Application Event无法获取(目前不确定官方的callback方法会不会出现此类问题,但是自定义或者调用jQuery会出现),但是Component Event可以获取,于是通过下面的方法解决这种问题:

将application event 获取定义到invoke(callback)方法外面,即能获取到。

另外Application在handle的时候,是没有name属性的,一定要注意(component event必须有name属性):如图:

遇到一个问题,在使用attribute往子component传递属性的时候,子companies获取不到:

父component::

<aura:component description="LtngSPSalesBargainingScopeCmp" controller="LtngSPCustomerBargainingScopeCtrl">
    <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
    <aura:attribute name="salesMessages" type="List" access="public"/>
    <aura:attribute name="salesMessage" type="Object"/>
    <aura:attribute name="areas" type="List" access="public"/>
    <aura:attribute name="countries" type="List" access="public"/>
    <aura:attribute name="showList" type="Boolean" default="true"/>

    <aura:handler name="deleteSalesItem" event="c:LtngSPAreaMaterialsEvt" action="{!c.handleDeleteSales}"/>
    <aura:handler name="editCustomerItem" event="c:LtngSPAreaMaterialsEvt" action="{!c.handleEditSales}"/>
    <aura:handler name="onCancel" event="c:LtngSPAreaMaterialsEvt" action="{!c.doCancel}"/>
    <c:LtngBaseService aura:id="baseService"/>
    <aura:if isTrue="{!v.showList}">
        <lightning:layout multipleRows="true">
            <lightning:layoutItem padding="around-small" size="12">
                <lightning:layout>
                    <lightning:layoutItem largeDeviceSize="3" mediumDeviceSize="3" smallDeviceSize="3"
                                          flexibility="grow"
                                          size="3">
                        <lightning:button label="Submit" variant="destructive" onclick="{!c.doSubmit}"/>
                        <lightning:button label="Add" variant="destructive" onclick="{!c.doAdd}"/>
                        <lightning:button label="Export" variant="destructive" onclick="{!c.doExport}"/>
                    </lightning:layoutItem>
                    <lightning:layoutItem largeDeviceSize="1" mediumDeviceSize="1" smallDeviceSize="1"
                                          flexibility="grow"
                                          size="1">
                        <lightning:select label="Areas" aura:id="chooseAreas"
                                          name="chooseAreas" variant="label-hidden" class="slds-size_xx-small">
                            <option value="All Areas" selected="selected">All Areas</option>
                            <aura:iteration items="{!v.areas}" var="item">
                                <option value="{!item.name}">{!item.name}</option>
                            </aura:iteration>
                        </lightning:select>
                    </lightning:layoutItem>
                    <lightning:layoutItem largeDeviceSize="1" mediumDeviceSize="1" smallDeviceSize="1"
                                          flexibility="grow"
                                          size="1">
                        <lightning:select label="Countries" aura:id="chooseCountries"
                                          name="chooseCountries" variant="label-hidden" class="slds-size_x-small">
                            <option value="All Countries" selected="selected">All Countries</option>
                            <aura:iteration items="{!v.countries}" var="item">
                                <option value="{!item.name}">{!item.name}</option>
                            </aura:iteration>
                        </lightning:select>
                    </lightning:layoutItem>
                    <lightning:layoutItem largeDeviceSize="1" mediumDeviceSize="1" smallDeviceSize="1"
                                          flexibility="grow"
                                          size="1" class="Margin_left">
                        <lightning:input label="endDate" variant="label-hidden" placeholder="End Date"
                                         class="slds-size_xx-small"/>
                    </lightning:layoutItem>
                    <div style="line-height:32px;margin-right:30px;margin-left: 0px">
                        --
                    </div>
                    <lightning:layoutItem largeDeviceSize="1" flexibility="grow"
                                          size="1">
                        <lightning:input label="startDate" variant="label-hidden" placeholder="Effective Date"/>
                    </lightning:layoutItem>
                    <lightning:layoutItem smallDeviceSize="2" mediumDeviceSize="2" largeDeviceSize="2"
                                          flexibility="grow"
                                          size="2">
                        <lightning:button label="Search" variant="destructive" onclick="{!c.doSearch}"
                                          class="slds-size_xx-small"/>
                    </lightning:layoutItem>
                </lightning:layout>
            </lightning:layoutItem>
        </lightning:layout>

        <div aura:id="sales-container" class="sales-container">
            <lightning:card title="">
                <div class="h-container">
                    <lightning:layout verticalAlign="center">
                        <lightning:layoutitem size="1" padding="around-small">
                            <ui:inputCheckbox/>
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            区域
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            国家
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            项目销售工程师-中方
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            项目销售工程师-外籍
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            渠道销售工程师-中方
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            渠道销售工程师-外籍
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            国家代表
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            生效日期
                        </lightning:layoutitem>
                        <lightning:layoutitem size="1" padding="around-small">
                            截止日期
                        </lightning:layoutitem>
                        <lightning:layoutitem size="2" padding="around-small">
                            操作
                        </lightning:layoutitem>
                    </lightning:layout>
                </div>
                <aura:iteration items="{!v.salesMessages}" var="salesMessageItem">
                 
                    <c:LtngSPSalesBargainingScopeItemCmp salesMessage="{!salesMessageItem}"/> 
                </aura:iteration>
            </lightning:card>
        </div>
        <aura:set attribute="else">
           <!-- 此处传值失败,暂时通过method方法来传值 -->
            <c:LtngSPSalesBargainingScopeDetailCmp salesMessage="{!v.salesMessage}"/>
        </aura:set>
    </aura:if>
</aura:component>

父controller:

/**
 * Created by zhezhana on 9/25/2018.
 */
({
    doInit: function (component, event, helper) {
/**
        var areas = [
            {
                name: "North America",

            },
            {
                name: "West Europe",

            },
            {
                name: "East Asia",
            },
        ];
        var countries = [
            {
                name: "USA",
            },
            {
                name: "CA",
            },
            {
                name: "France",
            },
            {
                name: "Poland",
            },
        ];
        component.set("v.areas", areas);
        component.set("v.countries", countries);
        //    console.log(areas);

        var salesMessages = [
            {
                id: "1",
                area: 'West Europe',
                country: 'France',
                salesProjectCN: '5%',
                salesProjectFor: '5%',
                salesChannelCN: '15%',
                salesChannelFor: '15%',
                countryRepresent: '0%',
                effectiveDate: '20180401',
                closingDate: '0190301',

            },
            {
                id: "2",
                area: 'North America',
                country: 'USA',
                salesProjectCN: '0%',
                salesProjectFor: '0%',
                salesChannelCN: '20%',
                salesChannelFor: '10%',
                countryRepresent: '25%',
                effectiveDate: '20180301',
                closingDate: '20190101',

            },
            {
                id: "3",
                area: 'North America',
                country: 'USA',
                salesProjectCN: '0%',
                salesProjectFor: '0%',
                salesChannelCN: '20%',
                salesChannelFor: '10%',
                countryRepresent: '25%',
                effectiveDate: '20180301',
                closingDate: '20190101',

            }
        ];
        // console.log(JSON.stringify(salesMessages));
        component.set("v.salesMessages", salesMessages);

*/
        var baseSvc = component.find('baseService');
        /**get the action of apex controller**/
        var salesBargainingRangeData = component.get("c.getSalesBargainingRangeDatas");
        /**set param**/
        baseSvc.invoke(salesBargainingRangeData).then(function (result) {
            //invoked if the request succeed
            console.log('getSalesBargainingRangeDatas-result----------->' + JSON.stringify(result));
            component.set("v.salesMessages", result);
        }).catch(function (error) {
            //invoked if the request fail
            console.log("***ERROR:" + error);
        });

    },
    doSubmit: function (component, event, helper) {
        alert("doSubmit");
    },
    doAdd: function (component, event, helper) {
        alert("doAdd");
    },
    doExport: function (component, event, helper) {
        alert("doExport");
    },
    doSearch: function (component, event, helper) {
        alert("doExport");
    },
    handleDeleteSales : function (component, event, helper) {
        var messageId = event.getParam("salesId");
        console.log("handleDeleteSales"+messageId);
        var salesMessages = component.get("v.salesMessages");
        var salesTemp = salesMessages.reduce((prev, item) => {
            if (item.id != messageId) {
            prev.push(item);
        }
        return prev;
    }, []);

        component.set("v.salesMessages", salesTemp);
        console.log(salesTemp);
        console.log("salesId::" + messageId);
    },
    handleEditSales : function (component, event, helper) {
        let mes = event.getParams("message");
        component.set('v.salesMessage',mes);
        console.log("new v.salesMessage--------->"+JSON.stringify(component.get("v.salesMessage")));
        component.set("v.showList",false);
    },
    doCancel : function(component, event, helper) {
        component.set("v.showList",true);
    }
})

子component:

<!--
 - Created by zhezhana on 9/28/2018.
 -->

<aura:component description="LtngSPSalesBargainingScopeDetailCmp">
    <aura:attribute name="salesMessage" type="Object"/>
    <aura:registerEvent name="onCancel" type="c:LtngSPAreaMaterialsEvt"/>
    <lightning:card title="">
        <aura:set attribute="actions">
            <lightning:button variant="destructive" label="Cancel" onclick="{!c.doCancel}"/>
        </aura:set>

        <p>name::{!v.salesMessage.Name}</p>

    </lightning:card>
</aura:component>

子controller:

/**
 * Created by zhezhana on 9/25/2018.
 */
({
    doCancel: function (component, event, helper) {
        var cancelEvt = component.getEvent("onCancel");
        cancelEvt.fire();
    },
    getSalesMessage: function (component, event, helper) {

    },
})

父的另一个子component:

<!--
 - Created by zhezhana on 9/28/2018.
 -->

<aura:component description="LtngSPSalesBargainingScopeItemCmp">
    <aura:attribute name="salesMessage" type="Object"/>


    <aura:registerEvent name="deleteSalesItem" type="c:LtngSPAreaMaterialsEvt"/>
    <aura:registerEvent name="editCustomerItem" type="c:LtngSPAreaMaterialsEvt"/>

    <div class="item-container">
        <lightning:layout verticalAlign="center">
            <lightning:layoutitem size="1" padding="around-small">
                <ui:inputCheckbox/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:select label="Areas" aura:id="chooseAreas"
                                  name="chooseAreas" variant="label-hidden" class="slds-size_xx-small">
                    <option value="{!v.salesMessage.country}" selected="selected">{!v.salesMessage.Area__c}</option>
                </lightning:select>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:select label="Countries" aura:id="chooseCountries"
                                  name="chooseCountries" variant="label-hidden" class="slds-size_xx-small">
                    <option value="{!v.salesMessage.country}" selected="selected">{!v.salesMessage.Country__c}</option>
                </lightning:select>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:formattedNumber value="{!v.salesMessage.Project_Sales_Engineer_CN__c /100}" style="percent" maximumFractionDigits="3"/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:formattedNumber value="{!v.salesMessage.Project_Sales_Engineer_FN__c /100}" style="percent" maximumFractionDigits="3"/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:formattedNumber value="{!v.salesMessage.Channel_Sales_Engineer_CN__c /100}" style="percent" maximumFractionDigits="3"/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:formattedNumber value="{!v.salesMessage.Channel_Sales_Engineer_FN__c /100}" style="percent" maximumFractionDigits="3"/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                <lightning:formattedNumber value="{!v.salesMessage.Country_Representatives__c/100}" style="percent" maximumFractionDigits="3"/>
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                {!v.salesMessage.Valid_From__c}
            </lightning:layoutitem>
            <lightning:layoutitem size="1" padding="around-small">
                {!v.salesMessage.Valid_To__c}
            </lightning:layoutitem>
            <lightning:layoutitem size="2" padding="around-small">
                <lightning:buttonIcon iconName="utility:edit" onclick="{!c.doEdit}"/>
                <lightning:buttonIcon iconName="utility:delete" onclick="{!c.doDelete}"/>
            </lightning:layoutitem>

        </lightning:layout>
    </div>
</aura:component>

父的另一个子的controller:

/**
 * Created by zhezhana on 9/25/2018.
 */
({
    doDelete : function (component, event, helper) {
        console.log("doDelete!!");
        var salesMessage = component.get("v.salesMessage");
        var deleteSales = component.getEvent('deleteSalesItem');
        deleteSales.setParams({"salesId" : salesMessage.id});
        deleteSales.fire();
        console.log("fire!!");
    },
    doEdit : function (component, event, helper) {
        var editEvt = component.getEvent("editCustomerItem");
        editEvt.setParams({message : component.get("v.salesMessage")});
        editEvt.fire();
    }
})


SOQL查询picklist的value::

select id,toLabel(Area__c),toLabel(Country__c)
from Sales_Bargaining_Range__c

猜你喜欢

转载自blog.csdn.net/zhang44429824/article/details/82688551