Differences
This shows you the differences between two versions of the page.
— |
tutorial:improve_customer_detail [2020/04/16 10:56] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | File <wrap adicode>$projectDirectory/resources/xml/model/film/CustomerDIGENERATED.xml</wrap> describes the layout of <wrap adicode>Customer</wrap> entity. | ||
+ | |||
+ | **Following XML elements:** | ||
+ | <sxh xml; first-line: 1; title: excerpt from 'CustomerDIGENERATED.axml' file.> | ||
+ | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||
+ | <includeTree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance" coreClassName="org.adichatz.engine.core.ASectionCore" entityURI="adi:/entityURI="adi://myproject/model.customer/CustomerMM" xsi:noNamespaceSchemaLocation="http://www.adichatz.org/xsd/v0.8.7/generator/includeTree.xsd"> | ||
+ | <section text="#MSG(customer, detailContainerText)" style="Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED" id="detailContainer"> | ||
+ | <layout layoutConstraints="wrap 4" columnConstraints="[fill, align right]10[fill,grow]25[align right]10[fill,grow]"/> | ||
+ | <include adiResourceURI="getToolBarURI((String) #PARAM(TOOL_BAR_TYPE))" id="detailToolbarMenu"> | ||
+ | <params> | ||
+ | <param value="#CONTROLLER(detailContainer)" id="CONTROLLER"/> | ||
+ | <param optional="true" value="#PARAM(TOOL_BAR_TYPE)" id="TOOL_BAR_TYPE"/> | ||
+ | </params> | ||
+ | </include> | ||
+ | <formattedText editPattern="######" format="Short" property="customerId" enabled="false" id="customerId"/> | ||
+ | <refText property="address" mandatory="true" style="SWT.BORDER | AdiSWT.FIND_BUTTON | AdiSWT.EDITOR_BUTTON" id="address"> | ||
+ | <convertModelToTarget>return null==value ? "" : #FV().address + " " + #FV().city.city + " - " + #FV().city.country.country;</convertModelToTarget> | ||
+ | </refText> | ||
+ | <refText property="store" lazyFetches="store" mandatory="true" style="SWT.BORDER | AdiSWT.FIND_BUTTON | AdiSWT.EDITOR_BUTTON" id="store"> | ||
+ | <convertModelToTarget>return null==value ? "" : String.valueOf(#FV().getStoreId());</convertModelToTarget> | ||
+ | </refText> | ||
+ | <text textLimit="45" property="firstName" mandatory="true" id="firstName"/> | ||
+ | <text textLimit="45" property="lastName" mandatory="true" id="lastName"/> | ||
+ | <text textLimit="50" property="email" id="email"/> | ||
+ | <checkBox property="active" mandatory="true" style="SWT.CHECK" id="active"/> | ||
+ | <dateText property="createDate" mandatory="true" style="SWT.BORDER | SWT.TIME" id="createDate"/> | ||
+ | <dateText property="lastUpdate" mandatory="true" style="SWT.BORDER | SWT.TIME" id="lastUpdate"/> | ||
+ | </section> | ||
+ | </includeTree></sxh>\\ | ||
+ | **renders the following layout:**\\ | ||
+ | {{ customer_detail_generated.png | Customer detail (brute)}} | ||
+ | \\ \\ \\ | ||
+ | **Change XML elements** | ||
+ | * Copy <wrap adicode>CustomerDIGENERATED.axml</wrap> file to <wrap adicode>CustomerDI.axml</wrap> which will become the reference for generated code. | ||
+ | * Replace above XML lines with the following ones: | ||
+ | <sxh xml; first-line: 1; title: excerpt from 'CustomerDI.axml' file (new version).> | ||
+ | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||
+ | <includeTree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" XMLSchema-instance" coreClassName="org.adichatz.engine.core.ASectionCore" entityURI="adi:/entityURI="adi://myproject/model.customer/CustomerMM" xsi:noNamespaceSchemaLocation="http://www.adichatz.org/xsd/v0.8.7/generator/includeTree.xsd"> | ||
+ | <section text="#MSG(customer, detailContainerText)" style="Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED" id="detailContainer"> | ||
+ | <layout layoutConstraints="wrap 4" columnConstraints="[fill, align right]10[fill,grow]25[align right]10[fill,grow]"/> | ||
+ | <include adiResourceURI="getToolBarURI((String) #PARAM(TOOL_BAR_TYPE))" id="detailToolbarMenu"> | ||
+ | <params> | ||
+ | <param value="#CONTROLLER(detailContainer)" id="CONTROLLER"/> | ||
+ | <param optional="true" value="#PARAM(TOOL_BAR_TYPE)" id="TOOL_BAR_TYPE"/> | ||
+ | </params> | ||
+ | </include> | ||
+ | <formattedText editPattern="######" format="Short" property="customerId" enabled="false" id="customerId"/> | ||
+ | <refText property="address" mandatory="true" style="SWT.BORDER | AdiSWT.FIND_BUTTON | AdiSWT.EDITOR_BUTTON" id="address"> | ||
+ | <convertModelToTarget>return null==value ? "" : #FV().address + " " + #FV().city.city + " - " + #FV().city.country.country;</convertModelToTarget> | ||
+ | <params> | ||
+ | <param id="CONTEXT_MENU" value="adi://org.adichatz.jpa/common.contextMenu/RefTextDialogPlusCM"/> | ||
+ | <param id="POPUP_SIZE " value="600,400"/> | ||
+ | <param xsi:type="customizationsType" id="NEW_ENTITY_POPUP_CUSTOMIZATION"> | ||
+ | <text layoutData="wmin 400" id="detailINC:name"/> | ||
+ | </param> | ||
+ | </params> | ||
+ | </refText> | ||
+ | <refText property="store" lazyFetches="store" mandatory="true" style="SWT.BORDER | AdiSWT.FIND_BUTTON | AdiSWT.EDITOR_BUTTON" id="store"> | ||
+ | <convertModelToTarget>return null==value ? "" : String.valueOf(#FV().getStoreId());</convertModelToTarget> | ||
+ | </refText> | ||
+ | <text textLimit="45" property="firstName" mandatory="true" id="firstName"/> | ||
+ | <text textLimit="45" property="lastName" mandatory="true" id="lastName"/> | ||
+ | <text textLimit="50" property="email" id="email"/> | ||
+ | <checkBox property="active" mandatory="true" style="SWT.CHECK" id="active"/> | ||
+ | <dateText property="createDate" mandatory="true" style="SWT.BORDER | SWT.TIME" id="createDate"/> | ||
+ | <dateText property="lastUpdate" mandatory="true" style="SWT.BORDER | SWT.TIME" id="lastUpdate"/> | ||
+ | </section> | ||
+ | </includeTree> | ||
+ | </sxh> | ||
+ | |||
+ | Create editor file for Customer as shown:\\ | ||
+ | <sxh xml; first-line: 1; title: excerpt from 'CustomerEDITOR.axml' file (new version).> | ||
+ | <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||
+ | <partTree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" bindingServiceClassName="org.adichatz.engine.e4.resource.PartBindingService" entityURI="adi://myproject/model.customer/CustomerMM" image="#PARAM(IMAGE)" outlinePageClassName="org.adichatz.jpa.editor.EditorOutlinePage" title="#PARAM(TITLE)" toolTipText="#PARAM(TOOL_TIP_TEXT)" xsi:noNamespaceSchemaLocation="http://www.adichatz.org/xsd/v0.8.7/generator/partTree.xsd"> | ||
+ | <config> | ||
+ | <customizations> | ||
+ | <tableColumn id="rentalsTSI:customerTC" valid="false"/> | ||
+ | <tabular refreshAtStart="true" id="rentalsTSI:table"> | ||
+ | <listeners> | ||
+ | <listener id="rentalsTSIDCLsnr" listenerTypes="DOUBLE_CLICK"> | ||
+ | <code>org.adichatz.jpa.extra.JPAUtil.openForm(getFromRegister("rentalsTSI:table"));</code> | ||
+ | </listener> | ||
+ | <listener id="rentalsTSISCLsnr" listenerTypes="SELECTION_CHANGED"> | ||
+ | <code>#CONTROLLER(dependenciesCompositeBag).showChildController(#CONTROLLER(), #CONTROLLER(rentalsDIPart:detailContainer));</code> | ||
+ | </listener> | ||
+ | </listeners> | ||
+ | <include adiResourceURI="adi://org.adichatz.jpa/common.contextMenu/ChildCM" id="rentalsCM"/> | ||
+ | <contentProvider xsi:type="entitySetContentProviderType" fieldName="rentals" adiResourceURI="adi://myproject/model.rental/RentalQUERY" id="rentalsCP"/> | ||
+ | </tabular> | ||
+ | <section id="rentalsDIPart:detailContainer"> | ||
+ | <layout layoutConstraints="wrap 2" columnConstraints="[fill, align right]10[fill,grow]"/> | ||
+ | </section> | ||
+ | <controlField id="rentalsDIPart:customer" valid="false"/> | ||
+ | <tableColumn id="paymentsTSI:customerTC" valid="false"/> | ||
+ | <tabular refreshAtStart="true" id="paymentsTSI:table"> | ||
+ | <listeners> | ||
+ | <listener id="paymentsTSIDCLsnr" listenerTypes="DOUBLE_CLICK"> | ||
+ | <code>org.adichatz.jpa.extra.JPAUtil.openForm(getFromRegister("paymentsTSI:table"));</code> | ||
+ | </listener> | ||
+ | <listener id="paymentsTSISCLsnr" listenerTypes="SELECTION_CHANGED"> | ||
+ | <code>#CONTROLLER(dependenciesCompositeBag).showChildController(#CONTROLLER(), #CONTROLLER(paymentsDIPart:detailContainer));</code> | ||
+ | </listener> | ||
+ | </listeners> | ||
+ | <include adiResourceURI="adi://org.adichatz.jpa/common.contextMenu/ChildCM" id="paymentsCM"/> | ||
+ | <contentProvider xsi:type="entitySetContentProviderType" fieldName="payments" adiResourceURI="adi://myproject/model.payment/PaymentQUERY" id="paymentsCP"/> | ||
+ | </tabular> | ||
+ | <section id="paymentsDIPart:detailContainer"> | ||
+ | <layout layoutConstraints="wrap 2" columnConstraints="[fill, align right]10[fill,grow]"/> | ||
+ | </section> | ||
+ | <controlField id="paymentsDIPart:customer" valid="false"/> | ||
+ | </customizations> | ||
+ | <navigationPaths> | ||
+ | <navigationPath name="#MSG(customer, editFormTitle)" path="Page1"/> | ||
+ | <navigationPath name="#MSG(customer, rentals)" path="Page1, DependenciesTabFolder, rentalsItem"/> | ||
+ | <navigationPath name="#MSG(customer, payments)" path="Page1, DependenciesTabFolder, paymentsItem"/> | ||
+ | </navigationPaths> | ||
+ | </config> | ||
+ | <formPage formText="#MSG(customer, editFormText)" image="#IMG(adi://org.adichatz.engine/./IMG_DETAIL.png)" title="#MSG(customer, editFormText)" id="Page1"> | ||
+ | <include adiResourceURI="adi://org.adichatz.jpa/common.toolBar/OnePageMasterDetailTBM" id="masterDetailTBM"/> | ||
+ | <sashForm weights="3,2" id="firstSashForm"> | ||
+ | <layout layoutConstraints="wrap 2, ins 0" columnConstraints="[grow,fill][grow,fill]" rowConstraints="grow,fill"/> | ||
+ | <sashForm orientation="SWT.HORIZONTAL" weights="1,1" id="secondSashForm"> | ||
+ | <scrolledComposite id="detailComposite"> | ||
+ | <listeners> | ||
+ | <listener listenerTypes="AFTER_SYNCHRONIZE | AFTER_PROPERTY_CHANGE | POST_REFRESH"> | ||
+ | <code>displayGMap();</code> | ||
+ | </listener> | ||
+ | </listeners> | ||
+ | <additionalCode>import org.adichatz.engine.widgets.gmaps.GMap; | ||
+ | private boolean doit = true; | ||
+ | private void displayGMap() { | ||
+ | if (doit) { | ||
+ | doit = false; | ||
+ | GMap gmapControl = #CONTROL(map); | ||
+ | Customer customer = #BEAN(); | ||
+ | if (null != customer.getAddress()) { | ||
+ | StringBuffer addresSB = new StringBuffer(); | ||
+ | addresSB.append(customer.getAddress()).append(" "); | ||
+ | addresSB.append(customer.getAddress().getCity().getCity()).append(" "); | ||
+ | addresSB.append(customer.getAddress().getCity().getCountry().getCountry()); | ||
+ | gmapControl.setValue(addresSB.toString().trim()); | ||
+ | } else | ||
+ | gmapControl.setValue(null); | ||
+ | doit = true; | ||
+ | } | ||
+ | }</additionalCode> | ||
+ | <layout layoutConstraints="wrap 1, ins 0" columnConstraints="[grow,fill]" rowConstraints="grow,fill"/> | ||
+ | <include adiResourceURI="adi://model.customer/CustomerDI" id="customerDetail"> | ||
+ | <params> | ||
+ | <param id="TOOL_BAR" value="adi://org.adichatz.jpa/common.toolBar/DetailTBM"/> | ||
+ | </params> | ||
+ | </include> | ||
+ | </scrolledComposite> | ||
+ | <composite id="gmapComposite"> | ||
+ | <layout layoutConstraints="wrap 1, ins 0" columnConstraints="grow,fill" rowConstraints="grow,fill"/> | ||
+ | <gMap editable="false" toolBarStyle="AdiSWT.EXPANDABLE" zoom="14" id="map"/> | ||
+ | </composite> | ||
+ | </sashForm> | ||
+ | <sashForm orientation="SWT.HORIZONTAL" weights="1,1" id="dependenciesSashForm"> | ||
+ | <composite id="tableComposite"> | ||
+ | <layout layoutConstraints="wrap 1, ins 0" columnConstraints="[grow,fill]" rowConstraints="grow,fill"/> | ||
+ | <cTabFolder delayed="true" selection="0" id="DependenciesTabFolder"> | ||
+ | <listeners> | ||
+ | <listener id="DependenciesTabFolderWSLsnr" listenerTypes="WIDGET_SELECTED"> | ||
+ | <code>#CONTROLLER(dependenciesCompositeBag).showChildController(getSelectedController());</code> | ||
+ | </listener> | ||
+ | </listeners> | ||
+ | <cTabItem text="#MSG(customer, rentals)" entityURI="adi://myproject/model.rental/RentalMM" id="rentalsItem"> | ||
+ | <include adiResourceURI="adi://model.rental/RentalTI" id="rentalsTSI"/> | ||
+ | </cTabItem> | ||
+ | <cTabItem text="#MSG(customer, payments)" entityURI="adi://myproject/model.payment/PaymentMM" id="paymentsItem"> | ||
+ | <include adiResourceURI="adi://model.payment/PaymentTI" id="paymentsTSI"/> | ||
+ | </cTabItem> | ||
+ | </cTabFolder> | ||
+ | </composite> | ||
+ | <compositeBag id="dependenciesCompositeBag"> | ||
+ | <include adiResourceURI="adi://model.rental/RentalDI" id="rentalsDIPart"> | ||
+ | <params> | ||
+ | <param id="TOOL_BAR" value="adi://org.adichatz.jpa/common.toolBar/ChildDetailTBM"/> | ||
+ | </params> | ||
+ | </include> | ||
+ | <include adiResourceURI="adi://model.payment/PaymentDI" id="paymentsDIPart"> | ||
+ | <params> | ||
+ | <param id="TOOL_BAR" value="adi://org.adichatz.jpa/common.toolBar/ChildDetailTBM"/> | ||
+ | </params> | ||
+ | </include> | ||
+ | </compositeBag> | ||
+ | </sashForm> | ||
+ | </sashForm> | ||
+ | </formPage> | ||
+ | </partTree> | ||
+ | </sxh> | ||
+ | |||
+ | ** renders the new layout:**\\ | ||
+ | {{ customer_editor.png | Editor and detail from Customer (improved)}} | ||
+ | <html><br clear="all"></html> | ||
+ | <WRAP indic> | ||
+ | <wrap adititle>Remark</wrap>:\\ | ||
+ | File <wrap adicode>CustomerDIGENERATED.axml</wrap> is copied as file <wrap adicode>CustomerDI.axml</wrap> and File <wrap adicode>CustomerEDITORGENERATED.axml</wrap> is copied as file <wrap adicode>CustomerEDITOR.axml</wrap>. So that, if a generation process occurs, changes will not be affected. | ||
+ | \\ | ||
+ | Change completely layouts is made easy. | ||
+ | </WRAP> | ||