Emmachen / SapUi5Test02

0 stars 0 forks source link

View and controller #3

Open Emmachen opened 8 years ago

Emmachen commented 8 years ago

View and controller 程序中实例了一个JSON view. first:加载view文件: image 将view()里的参数给到oView,判断类型: image 加载对应类型view: image 与control相同,在EventProvider确定id: image 在sap-ui-core里调用_initCompositeSupport,到view文件中initViewSettings,最后是jsonView:initViewSettings.加载自己定义的view: image image image 获取view里的function: image image 将自己的view加载好后,回到view.js中,连接对应的controller: image 获取view对应的controller,加载里面的方法。 connect to view: image the 4 function: image controller已经绑定后,就可以到view里自己实现的代码中去了: image 然后加载property,aggragation,event等属性,以及modelbinding

ghost commented 8 years ago

Hi 文心,

不错。 image

从这里你已经能看到UI5支持这么多种不同类型的view了。

现在我们使用的JS view,每个控件都是我们在JS代码里手动生成的,如果一个复杂的页面,这样做的话会累死。比如我们组开发的这种view:

clipboard1

这个view是通过另一种view,叫做XML view来实现的。

下面是这个xml view的source code:

<core:View xmlns:core="sap.ui.core" xmlns:ui="sap.ui.layout"
    xmlns:layout="sap.ui.layout" xmlns:ca="sap.ca.ui" xmlns="sap.m"
    xmlns:form="sap.ui.layout.form" xmlns:crm="sap.cus.crm.lib.reuse.controls" controllerName="cus.crm.opportunity.view.S3">
    <Page id="S3_Header"
        title="{parts: [{path:'i18n>DETAIL_TITLE'} , {path:'json>/Description'}], formatter:'jQuery.sap.formatMessage'}">
        <content>
            <!-- Extension point to add additional opportunity headers -->
            <core:ExtensionPoint name="opportunityHeaderExtension">
                <ObjectHeader id="opportunityHeader" title="{json>/Description}"
                    number="{parts:[{path:'json>/ExpectedSalesVolume'},{path: 'json>/CurrencyCode'}]  , formatter: 'cus.crm.opportunity.util.Formatter.volumeFormatter'}"

                    icon="{json>/ImgSrc}"

                    numberUnit="{ path: 'json>/CurrencyCode', formatter:'cus.crm.opportunity.util.Formatter.currencycode'}">
                    <attributes>

                        <!-- Extension point to add additional header attributes at top -->
                        <core:ExtensionPoint name="opportunityHeaderAttributeTopExtension"></core:ExtensionPoint>
                        <ObjectAttribute id="opportunityProspectName"
                            text="{parts:[{path:'json>/ProspectName'}, {path:'json>/ProspectNumber'}], formatter:'cus.crm.opportunity.util.Formatter.formatProspect'}"
                            active="true" press="onEmployeeLaunch">

                            <customData>
                                <core:CustomData key="PartnerNumber" value="{json>/ProspectNumber}" />
                                <core:CustomData key="PartnerFunctionCode"
                                    value="00000021" />
                                <core:CustomData key="Image" value="{json>/ImgSrc}" />
                                <core:CustomData key="Image" value="{json>/ContactImgSrc}" />
                            </customData>
                        </ObjectAttribute>
                        <ObjectAttribute id="opportunityContactName" text="{json>/MainContactName}"
                            active="true" press="onEmployeeLaunchheader">
                            <customData>
                                <core:CustomData key="PartnerNumber" value="{json>/MainContactId}" />
                                <core:CustomData key="PartnerFunctionCode"
                                    value="00000015" />
                                <core:CustomData key="Image" value="{json>/ContactImgSrc}" />
                                <core:CustomData key="Image" value="{json>/ImgSrc}" />
                            </customData>
                        </ObjectAttribute>
                        <!-- <ObjectAttribute id="opportunityEmpResponsible" text="{json>/EmployeeResponsibleName}" 
                            active="true" press="onEmpBusCardLaunch"> <customData> <core:CustomData key="PartnerNumber" 
                            value="{json>/EmployeeResponsibleNumber}" /> <core:CustomData key="PartnerFunctionCode" 
                            value="00000015" /> <core:CustomData key="Image" value="{json>/ContactImgSrc}" 
                            /> <core:CustomData key="Image" value="{json>/ImgSrc}" /> </customData> </ObjectAttribute> -->
                        <!-- Extension point to add additional header attributes at end -->
                        <core:ExtensionPoint name="opportunityHeaderAttributeBottomExtension"></core:ExtensionPoint>
                    </attributes>

                </ObjectHeader>
            </core:ExtensionPoint>
             <ui:VerticalLayout id="icntabVLayout" class="icntabVLayout" width="100%" 
                height="100%"> <ui:HorizontalLayout id="icntabHLayout" class="icntabHLayout" 
                width="100%" height="100%"> 
            <!-- Extension point to add additional opportunity icon tab bar on left -->
            <core:ExtensionPoint name="opportunityIcnTabBarLeftExtension"></core:ExtensionPoint>
            <IconTabBar id="icntab" select="selectedTab">
                <items>
                    <!-- Extension point to add additional tab bars -->
                    <core:ExtensionPoint name="opportunityTabBarItemFirstExtension">
                    </core:ExtensionPoint>
                    <IconTabFilter id="info" text="{i18n>INFO}" key="Info"
                        icon="sap-icon://hint" iconColor="Neutral">
                        <content>
                            <!-- Extension point to add additional info tab content -->
                            <core:ExtensionPoint name="opportunityInfoTabContentTopExtension"></core:ExtensionPoint>
                            <ui:form.SimpleForm id="opportunityID_form" layout="ResponsiveGridLayout">
                                <ui:content>
                                    <Label id="opportunityType_label1" text="{i18n>TYPE}">
                                    </Label>
                                    <Text id="opportunityType_Text1" text="{json>/ProcessTypeDescriptionLong}"></Text>
                                </ui:content>
                                <ui:content>
                                    <Label id="opportunityID_label" text="{i18n>OPPOR_ID}">
                                    </Label>
                                    <Text id="opportunityID_Text" text="{json>/Id}"></Text>
                                </ui:content>
                                <ui:content>
                                    <Label id="opportunityStartDate_label" text="{i18n>START_DATE}">
                                    </Label>
                                    <Text id="opportunityStartDate_Text"
                                        text="{path:'json>/StartDate' , formatter: 'cus.crm.opportunity.util.Formatter.dateFormatter2'}"></Text>
                                    <Label id="opportunityCloseDate_label" text="{i18n>CLOSE_DATE}">
                                    </Label>
                                    <Text id="opportunityCloseDate_Text"
                                        text="{path:'json>/ClosingDate' , formatter: 'cus.crm.opportunity.util.Formatter.dateFormatter2'}"></Text>
                                </ui:content>
                            <ui:content>
                                    <Label id="opportunityStatus_Label" text="{i18n>STATUS}">
                                    </Label>
                                    <Text id="opportunityStatus_Text" text="{json>/UserStatusText}"></Text>
                                    <Label id="opportunityStage_Label" text="{i18n>STAGE}">
                                    </Label>
                                    <Text id="opportunityStage_Text" text="{json>/SalesStageText}"></Text>
                                    <Label id="opportunityCoS_Label" text="{i18n>CHANCE_OF_SUCCESS}">
                                    </Label>
                                    <Text id="opportunityCoS_Text"
                                        text="{path:'json>/ChanceOfSuccess' , formatter: 'cus.crm.opportunity.util.Formatter.infotexttonumber'}"
                                        TextAlign="Right"></Text>
                                    <Label id="opportunityPriority_Label" text="{i18n>PRIORITY}">
                                    </Label>
                                    <Text id="opportunityPriority_Text" text="{json>/PriorityText}"></Text>
                                </ui:content>
                                <ui:content>
                                    <Label id="opportunityWhtdVolume_Label" text="{i18n>WEIGHTED_VOLUME}">
                                    </Label>
                                    <Text id="opportunityWhtdVolume_Text"
                                        text="{parts:[{path:'json>/ExpectedSalesVolume'}, {path:'json>/ChanceOfSuccess'}, {path:'json>/CurrencyCode'}], formatter:'cus.crm.opportunity.util.Formatter.weightedvolume'}"></Text>

                                    <Label id="opportunityTotalNetValue_Label" text="{i18n>VOLUME}">
                                    </Label>
                                    <Text id="opportunityTotalNetValue_Text"
                                        text="{parts:[{path:'json>/TotalExpectedNetValue'}, {path:'json>/CurrencyCode'}], formatter:'cus.crm.opportunity.util.Formatter.totalexpectednetValue'}"></Text>

                                </ui:content>

                                <ui:content>
                                    <Label id="opportunityForecast_Label" text="{i18n>FORECAST}">
                                    </Label>
                                    <Text id="opportunityForecast_Switch" enabled="false"
                                        text="{path : 'json>/ForecastRelevance',formatter : 'cus.crm.opportunity.util.Formatter.formatForecastText'}">
                                    </Text> 
                                </ui:content>
                            <ui:content>
                                    <Label id="opportunityLogChange_Label" text="{i18n>LOG_CHANGE}">
                                    </Label>
                                    <Link text="{i18n>VIEW}" press="onLogChange" id="log"></Link>

                                </ui:content>

                            </ui:form.SimpleForm>
                            <!-- Extension point to add additional info tab content at bottom 
                                of Info tab -->
                            <core:ExtensionPoint name="opportunityInfoTabContentBottomExtension"></core:ExtensionPoint>
                        </content>
                    </IconTabFilter>

                    <!-- sales area Info Tab -->
                    <IconTabFilter id="tab_salesarea" icon="sap-icon://org-chart"
                        key="SalesArea" text="{i18n>SALES_AREA}" iconColor="Neutral">

                        <content>
                            <!-- Extension point to add additional sales Area tab content on top -->
                            <core:ExtensionPoint name="salesAreaInfoTabContentTopExtension"></core:ExtensionPoint>
                            <Panel>
                                <headerToolbar>
                                    <Toolbar>
                                        <Label text="{i18n>SALES_AREA}" />
                                        <ToolbarSpacer />
                                        <Button id="salesareaIcon" icon="sap-icon://edit" type="Transparent"
                                            press="showSalesAreaF4" 
                                            visible="{path: 'onlineOfflineMode>/bOffline', formatter : 'cus.crm.opportunity.util.Formatter.formatHideButtonInOfflineMode'}"/>
                                    </Toolbar>
                                </headerToolbar>
                                <content>
                                    <ui:form.SimpleForm id="opportunitysalesorganization_form" layout="ResponsiveGridLayout">
                                        <ui:content>
                                            <Label id="salesorganization_label" text="{i18n>SALES_ORGANIZATION}">
                                            </Label>
                                            <Text id="salesorganization_Text"
                                                text="{parts: [{path :'json>/SalesOrganizationDescription'},{path : 'json>/SalesOrganization'}], 
                                                                              formatter : 'cus.crm.opportunity.util.Formatter.formatSalesOrganization'}"></Text>
                                            <!-- <Label id="salesorganization_label" text="{i18n>SALES_ORGANIZATION_DESC}"> 
                                                </Label> <Text id="salesorganization_Text" text="{json>/SalesOrganizationDescription}"></Text> -->
                                        </ui:content>
                                    </ui:form.SimpleForm>

                                    <ui:form.SimpleForm id="opportunitydistributionchannel_form" layout="ResponsiveGridLayout">
                                        <ui:content>
                                            <Label id="distributionchannel_label" text="{i18n>DISTRIBUTION_CHANNEL}">
                                            </Label>
                                            <Text id="distributionchannel_Text"
                                                text="{parts: [{path :'json>/DistributionChannelDescription'},{path : 'json>/DistributionChannel'}], 
                                                                              formatter : 'cus.crm.opportunity.util.Formatter.formatDistributionChannel'}"></Text>
                                            <!-- <Label id="DistributionChannel_label" text="{i18n>DISTRIBUTION_CHANNEL_DESC}"> 
                                                </Label> <Text id="DistributionChannel_Text" text="{json>/DistributionChannelDescription}"></Text> -->
                                        </ui:content>
                                    </ui:form.SimpleForm>

                                    <ui:form.SimpleForm id="opportunitydivision_form" layout="ResponsiveGridLayout">
                                        <ui:content>
                                            <Label id="division_label" text="{i18n>DIVISION}">
                                            </Label>
                                            <Text id="division_Text"
                                                text="{parts: [{path :'json>/DivisionDescription'},{path : 'json>/Division'}], 
                                                                              formatter : 'cus.crm.opportunity.util.Formatter.formatDivision'}"></Text>
                                            <!-- <Label id="Division_label" text="{i18n>DIVISION_DESC}"> </Label> 
                                                <Text id="Division_Text" text="{json>/DivisionDescription}"></Text> -->
                                        </ui:content>
                                    </ui:form.SimpleForm>
                                    <!-- Extension point to add additional Sales Area info -->
                                    <core:ExtensionPoint name="salesAreaInfoTabContentBottomExtension"></core:ExtensionPoint>
                                </content>
                            </Panel>
                        </content>

                    </IconTabFilter>

                    <IconTabFilter id="tab_product" text="{i18n>PRODUCTS}"
                        key="Products" icon="sap-icon://cart" iconColor="Neutral">
                        <content>
                            <!-- Extension point to add additional Product tab content -->
                            <core:ExtensionPoint name="opportunityProductTabContentExtension"></core:ExtensionPoint>
                            <!-- <Label text="{i18n>PRODUCT_BASKET}"> </Label> -->
                            <Table id="Product_Tab" items="{json>/Products}"
                                noDataText="{i18n>NOPRODUCTS}">

                                <columns>
                                    <!-- Extension point to add additional Product Tab Coloum -->
                                    <core:ExtensionPoint name="opportunityProductTabColoumExtension"></core:ExtensionPoint>
                                    <Column id="product_column" width="35%">
                                        <header>

                                            <Label id="productColumnLabel_S3" text="{i18n>PRODUCT}"></Label>
                                        </header>
                                    </Column>

                                    <Column id="quanity_column" width="17.5%" hAlign="Right">
                                        <header>
                                            <Label id="productQuantity_S3" text="{i18n>QUANTITY}"></Label>
                                        </header>
                                    </Column>

                                    <Column id="price_column" width="22.5%" hAlign="Right"
                                        minScreenWidth="Tablet" demandPopin="true">
                                        <header>
                                            <Label id="productPrice_S3" text="{i18n>UNIT_PRICE}"></Label>
                                        </header>
                                    </Column>

                                    <Column id="volume_column" width="25%" hAlign="Right"
                                        minScreenWidth="Tablet" demandPopin="true">
                                        <header>
                                            <Label id="productVolume_S3" text="{i18n>VOLUME}"></Label>
                                        </header>
                                    </Column>

                                </columns>

                                <items>

                                    <ColumnListItem id="productBasketTemplate_S3">
                                        <cells>
                                            <!-- Extension point to add additional product tab cell -->
                                            <core:ExtensionPoint name="opportunityProductTabCellsExtension"></core:ExtensionPoint>
                                            <ObjectIdentifier id="productName_cell"
                                                title="{path : 'json>ProductGuid', formatter : 'cus.crm.opportunity.util.Formatter.formatProductName'}"
                                                text="{path: 'json>ProductGuid',formatter : 'cus.crm.opportunity.util.Formatter.formatProdClassification'}">
                                            </ObjectIdentifier>
                                            <ObjectNumber id="productQuantity_cell"
                                                number="{json>Quantity}"
                                                numberUnit="{json>Unit}" />
                                            <ObjectNumber id="productPrice_cell"
                                                number="{parts:[{path:'json>NetValue'},{path: 'json>CurrencyCode'}]  , formatter: 'cus.crm.opportunity.util.Formatter.volumeFormatter'}"
                                                numberUnit="{json>CurrencyCode}" />
                                            <ObjectNumber id="productVolume_cell"
                                                number="{parts:[{path:'json>TotalExpectedNetValue'},{path: 'json>CurrencyCode'}]  , formatter: 'cus.crm.opportunity.util.Formatter.volumeFormatter'}"
                                                numberUnit="{json>CurrencyCode}" />
                                        </cells>
                                    </ColumnListItem>

                                </items>
                            </Table>

                        </content>
                    </IconTabFilter>

                    <!--Notes Tab using FeedInput -->
                    <IconTabFilter id="tab_notes" icon="sap-icon://notes"
                        key="Notes" text="{i18n>NOTES}" iconColor="Neutral">
                        <FeedInput id="notesList" textMaxLength="1000" text="{json>Content}"
                            post="_handleAddNote" showIcon="true" icon="{json>icon}"
                            maxLines="3">
                        </FeedInput>
                        <List id="listItem" showSeparators="Inner" growing="true"
                            growingThreshold="4" growingScrollToLoad="false"
                            items="{json>/OpportunityNotesSet}">
                            <FeedListItem sender="{path : 'json>Creator'}"
                                senderActive="false"
                                timestamp="{path:'json>CreatedAt' , formatter: 'cus.crm.opportunity.util.Formatter.notesDateFormatter'}"
                                text="{path : 'json>Content'}" />
                        </List>
                    </IconTabFilter>

                    <!-- Multiple type note support -->
                    <IconTabFilter id="tab_notes_v2" icon="sap-icon://notes" visible="false"
                                         key="NotesV2" text="{i18n>NOTES}" iconColor="Neutral">
                        <crm:Note id="crmNote" noteTypes="/NoteTypes"
                            noteLanguages="/NoteLanguages" noteData="/NoteData" noteTypeId="TextObjectID"
                            noteTypeDescription="TextObjectDescription" noteTypeChangeType="TextEditType"
                            noteLanguageCode="TextLanguageID" noteLanguageDescription="TextLanguageDescription"
                            noteLanguageDefaultFlag="DefaultLanguage" sender="Creator" noteContent="Content"
                            timestamp="CreatedAt" noteAdded="_handleNoteAddedV2" noteUpdated="_handleNoteUpdatedV2"
                            noteDeleted="_handleNoteDeletedV2"
                            displayMode="{path: 'onlineOfflineMode>/bOffline', formatter : 'cus.crm.opportunity.util.Formatter.formatDisplayMode'}">
                        </crm:Note>
                    </IconTabFilter>

                    <IconTabFilter id="tab_attachment" icon="sap-icon://attachment"
                        key="Attachments" text="{i18n>ATTACHMENTS}" iconColor="Neutral">
                        <content>
                            <!--  
                            <ca:FileUpload id="fileupload" items="/OpportunityAttachments"
                                url="url" size="size" fileName="name" uploadedDate="uploadedDate"
                                contributor="contributor" fileId="fileId" acceptRequestHeader="application/json"
                                useMultipart="false" deleteFile="onDeleteFile" renameEnabled="true"
                                xsrfToken=""
                                uploadUrl="/sap/opu/odata/sap/CRM_OPPORTUNITY/OpportunityAttachments"
                                useEditControls="true" fileExtension="fileExtension" encodeUrl="/sap/bc/ui2/encode_file"
                                uploadEnabled="true" uploadFile="onUploadFile" renameFile="onRenameFile"
                                saveClicked="onSaveClicked" fileUploadFailed="onFileUploadFailed"></ca:FileUpload>
                            -->
                            <UploadCollection
                                id="fileupload"
                                maximumFilenameLength="40"
                                multiple="false"
                                showSeparators="All"
                                fileDeleted="onFileDeleted"
                                fileRenamed="onFileRenamed"
                                uploadComplete="onUploadComplete" 
                                filenameLengthExceed="onFilenameLengthExceed"
                                change="onAttachmentChange">
                            </UploadCollection>
                        </content>

                    </IconTabFilter>
                    <IconTabFilter id="salesTeam" key="Parties Involved"
                        icon="sap-icon://group" text="{i18n>SALES_TEAM}" iconColor="Neutral">
                        <content>
                            <!-- Extension point to add additional Sales Tab content -->
                            <core:ExtensionPoint name="opportunitysalesTabContentExtension"></core:ExtensionPoint>

                            <Table id="Sales_Team" noDataText="{i18n>NOPARTIES}" text="{i18n>TEAM}"
                                items="{json>/OpportunitySalesTeamSet}">

                                <columns>
                                    <!-- Extension point to add additional Sales Tab Columns -->
                                    <core:ExtensionPoint name="opportunitysalesTabColumnExtension"></core:ExtensionPoint>
                                    <Column id="salesTeamColumn1" width="15%" />
                                    <Column id="salesTeamColumn2" width="65%" />
                                    <Column id="salesTeamColumn3" width="10%" visible="{path: 'onlineOfflineMode>/bOffline', formatter : 'cus.crm.opportunity.util.Formatter.formatHideButtonInOfflineMode'}" />
                                    <Column id="salesTeamColumn4" width="10%" visible="{path: 'onlineOfflineMode>/bOffline', formatter : 'cus.crm.opportunity.util.Formatter.formatHideButtonInOfflineMode'}" />
                                </columns>

                                <items>

                                    <ColumnListItem id="salesTeamTemplate"
                                        items="{json>/OpportunitySalesTeamSet}">
                                        <cells>
                                            <!-- Extension point to add additional Sales Tab Cells -->
                                            <core:ExtensionPoint name="opportunitySalesTabCellsExtension">
                                            </core:ExtensionPoint>
                                            <ObjectHeader id="image"
                                                icon="{path :'json>ImgSrc',formatter : 'cus.crm.opportunity.util.Formatter.removeMarginInPhone'}">
                                            </ObjectHeader>
                                            <layout:VerticalLayout id="layout"
                                                visible="{path : 'device>/isPhone',formatter : 'cus.crm.opportunity.util.Formatter.addLayoutPadding'}">
                                                <layout:content>
                                                    <Link id="salesPartnerName"
                                                        text="{parts : [{path :'json>PartnerName'},{path : 'json>PartnerNumber'}],formatter : 'cus.crm.opportunity.util.Formatter.formatBusinessCardCaller'}"
                                                        items="{json>/OpportunitySalesTeamSet}">

                                                        <customData>
                                                            <core:CustomData key="PartnerNumber"
                                                                value="{json>PartnerNumber}" />
                                                            <core:CustomData key="PartnerFunctionCode"
                                                                value="{json>PartnerFunctionCode}" />
                                                            <core:CustomData key="Image" value="{json>ImgSrc}" />
                                                        </customData>
                                                    </Link>
                                                    <layout:HorizontalLayout id="hLayout">
                                                        <!-- <Label id="salespartnerFunction_Label" text="{i18n>PARTNER_FUNCTION}"
                                                            design="Bold"></Label> -->
                                                        <Text id="salespartnerFunction_Text"
                                                            text="{path:'json>PartnerFunctionText' , formatter: 'cus.crm.opportunity.util.Formatter.salesteamplacement'}"></Text>

                                                    </layout:HorizontalLayout>
                                                    <ObjectStatus id="salespartnerMobile_Text"
                                                        icon="sap-icon://outgoing-call" text="{json>MobileNumber}" visible="{path : 'json>MobileNumber', formatter : 'cus.crm.opportunity.util.Formatter.formatMobileIconVisibility'}"></ObjectStatus>
                                                </layout:content>
                                            </layout:VerticalLayout>
                                            <Button id="participantEditButton" type="Transparent"
                                                icon="sap-icon://edit" press="onPartnerFunctionChange"
                                                visible="{path : 'json>PartnerFunctionCode',formatter : 'cus.crm.opportunity.util.Formatter.formatParticipant'}">
                                            </Button>
                                            <Button id="participantDeleteButton" type="Transparent"
                                                icon="sap-icon://decline" press="onDeleteParticipant"
                                                visible="{path : 'json>PartnerFunctionCode',formatter : 'cus.crm.opportunity.util.Formatter.formatParticipant'}">
                                            </Button>
                                        </cells>
                                    </ColumnListItem>

                                </items>
                            </Table>

                        </content>
                    </IconTabFilter>
                    <IconTabFilter id="tab_competitor" icon="sap-icon://competitor"
                        text="{i18n>COMPETITORS}" key="Competitors" iconColor="Neutral"
                        count="">
                        <content>
                            <!-- Extension point to add additional Competitor Tab Content -->
                            <core:ExtensionPoint name="opportunityCompetitorTabContentExtension"></core:ExtensionPoint>
                            <List id="competitors" items="{json>/OpportunityCompetitors}"
                                noDataText="{i18n>NOCOMPETITORS}">
                                <!-- Extension point to add additional competitor list content -->
                                <core:ExtensionPoint name="competitorListContentExtension"></core:ExtensionPoint>
                                <ObjectListItem id="Competitors"
                                    title="{parts :[{path : 'json>PartnerName'},{path : 'json>PartnerNumber'}],formatter : 'cus.crm.opportunity.util.Formatter.formatPartnerName'}"
                                    icon="{json>ImgSrc}">
                                </ObjectListItem>
                            </List>

                        </content>
                    </IconTabFilter>

                    <IconTabFilter id="tab_transactionHistory" icon="sap-icon://work-history"
                        text="{i18n>TRANS_HISTORY}" key="TransactionHistory" iconColor="Neutral"
                        count="">
                        <content>
                            <!-- Extension point to add additional Doc History Content -->
                            <core:ExtensionPoint name="opportunityDocHistContentExtension"></core:ExtensionPoint>

                            <Table id="DocHistory_Tab" 
                                items="{json>/OpportunityDocHistory}" growing="true"
                                growingThreshold="10" growingScrollToLoad="false">
                                <columns>
                                    <!-- Extension point to add additional Doc History Tab Columns in 
                                        the beginning -->
                                    <core:ExtensionPoint
                                        name="opportunityDocHistTabColoumStartExtension"></core:ExtensionPoint>
                                    <Column minScreenWidth="Tablet" demandPopin="true"
                                        hAlign="Center">
                                        <Text text="{i18n>TRANS_ID}" />
                                    </Column>
                                    <Column minScreenWidth="Tablet" demandPopin="true"
                                        hAlign="Center">
                                        <Text text="{i18n>TRANS_TYPE}" />
                                    </Column>
                                    <Column minScreenWidth="Tablet" demandPopin="true"
                                        hAlign="Center">
                                        <Text text="{i18n>TRANS_DESC}" />
                                    </Column>
                                    <Column minScreenWidth="Tablet" demandPopin="true"
                                        hAlign="Center">
                                        <Text text="{i18n>CREATED_ON}" />
                                    </Column>
                                    <Column minScreenWidth="Tablet" demandPopin="true"
                                        hAlign="Center">
                                        <Text text="{i18n>RELATIONSHIP}" />
                                    </Column>
                                    <!-- Extension point to add additional Doc History Tab Columns at 
                                        the beginning -->
                                    <core:ExtensionPoint name="opportunityDocHistTabColoumEndExtension"></core:ExtensionPoint>
                                </columns>
                                <items>
                                    <ColumnListItem>
                                        <cells>
                                            <!-- Extension point to add additional Doc History Tab Cells at 
                                                the beginning -->
                                            <core:ExtensionPoint
                                                name="opportunityDocHistTabCellsStartExtension"></core:ExtensionPoint>
                                            <Link id="TransactionIDText" text="{json>TransactionId}"
                                                press="navigateDocHistory"
                                                enabled="{path:'json>ObjectType' , formatter: 'cus.crm.opportunity.util.Formatter.FormatDocHistory'}" />
                                            <Text id="TransactionDesText" text="{json>TransTypeDesc}" />
                                            <Text id="DescriptionText" text="{json>Description}" />
                                            <Text id="CreatedOnText"
                                                text="{path: 'json>CreatedOn', type:'sap.ca.ui.model.type.Date', formatOptions:{style:'medium'}}" />
                                            <Text id="relationship" text="{json>Relationship}" />
                                            <!-- Extension point to add additional Doc History Tab Columns 
                                                at the end -->
                                            <core:ExtensionPoint name="opportunityDocHistTabCellsEndExtension"></core:ExtensionPoint>
                                        </cells>
                                    </ColumnListItem>
                                </items>
                            </Table>

                        </content>
                    </IconTabFilter>
                    <!-- Extension point to add additional Tabs at the end -->
                    <core:ExtensionPoint name="opportunityTabBarItemLastExtension">
                    </core:ExtensionPoint>
                </items>
            </IconTabBar>
            <!-- Extension point to add additional Tabs on the Right -->
            <core:ExtensionPoint name="opportunityIcnTabBarRightExtension"></core:ExtensionPoint>
             </ui:HorizontalLayout> </ui:VerticalLayout> 
        </content>
        <footer id="footer">
        </footer>
    </Page>
</core:View>

xml view的思想和你马上要学的Spring类似: Developer通过在xml 文件里申明的方式定义target view应该显示哪些控件。之后developer的任务就完了,框架会解析xml,将里面定义的控件逐一实例化。

Best regards, Jerry