Angepasste Anzeigen erstellen
Eine Anzeige ist ein spezielles Dojo-Container-Widget, das in der Anwendung verwendet wird. Er verwaltet die Interaktion von Daten zwischen der Benutzerschnittstelle und der Mashup-Ebene, die sowohl die Benutzerschnittstelle als auch die Verhaltenslogik enthält.
<Screen name>.js-Die JS-Datei, die Ihrer Anzeige entspricht Sie können die gesamte Verhaltenslogik in dieser Datei definieren.templates/<Screen name>.html-Die HTML-Datei, die alle Benutzerschnittstelleninformationen enthält<Screen name>BehaviorController.js-Die JS-Datei, die diemashuprefs-Details enthält, die für eine Aktion oder ein Verhalten in der Anzeige aufgerufen werden<Screen name>InitController.js-JS-Datei mit denmashuprefs-Details, die aufgerufen werden, wenn Sie eine Anzeige öffnen.
Stellen Sie sicher, dass neben den „ JavaScript “-Dateien auch die <Screen
name>BehaviorController.xml und <Screen
name>InitController.xml Controller-XML-Dateien im <INSTALL_DIR>/extensions/wsc/webpages/controller/default Verzeichnis vorhanden sind. <Screen
name>InitController.xmlWeitere Informationen zum Erstellen von <Screen
name>BehaviorController.js, <Screen name>InitController.js, <Screen name>BehaviorController.xml, und finden Sie unter „Controller anpassen “.
Datei < Anzeigename> .js erstellen
Stellen Sie sicher, dass die Syntax der Datei <Screen name>.js den Standards von Dojo Version 1.8 entspricht. Die angepasste Anzeige muss sc/plat/dojo/widgets/Screenerweitern. Außerdem können Sie die folgenden von der Anwendung bereitgestellten Standards verwenden:
- Sie können
scDefineanstelle vondefineverwenden. - Sie können den importierten JavaScript -Modulen die Zeichenfolge
scbase/loader!voranstellen. Die Zeichenfolgescbase/loaderist ein Dojo-Loader-Plug-in, das von der Anwendung bereitgestellt wird. Stellen Sie einem HTML-Dateipfad einedojo/text!-Zeichenfolge entsprechend der Dojo-Syntax voran.
Stellen Sie sicher, dass alle angepassten Anzeigedateien im Ordner <INSTALL_DIR>/extensions/wsc/webpages erstellt werden. Da sich die Dateien in WAR im Ordner extn befinden, stellen Sie dem Paket das Präfix extnvoran.
BehaviorController anstelle von InitController. Zum Ausführen von Mashups von BehaviorControllerverwenden Sie die afterScreenInit -Ereignissubskribenten. Um Daten in der Anzeige anzuzeigen, rufen Sie die Methode setModel für eine Anzeige auf.Beispiel für eine MyOrderScreen Datei
scDefine([
"dojo/text!./templates/MyOrderScreen.html",
"scbase/loader!dijit/form/Button",
"scbase/loader!dojo/_base/declare",
"scbase/loader!idx/form/TextBox",
"scbase/loader!idx/layout/ContentPane",
"scbase/loader!sc/plat/dojo/utils/BaseUtils",
"scbase/loader!sc/plat/dojo/utils/EventUtils",
"scbase/loader!sc/plat/dojo/widgets/Label",
"scbase/loader!sc/plat/dojo/widgets/Link",
"scbase/loader!sc/plat/dojo/widgets/Screen"
],
function(
templateText,
_dijitButton,
_dojodeclare,
_idxTextBox,
_idxContentPane,
_scBaseUtils,
_scEventUtils,
_scLabel,
_scLink,
_scScreen
) {
return _dojodeclare("extn.customScreen.MyOrderScreen", [_scScreen], {
templateString: templateText,
uId: "customScreen",
packageName: "extn.customScreen",
className: "MyOrderScreen",
showRelatedTask: true,
namespaces: {
targetBindingNamespaces: [{
description: 'The input to the getOrderList mashup.',
value: 'getOrderList'
}],
sourceBindingNamespaces: [{
description: 'Initial input to screen',
value: 'screenInput'
}, {
description: 'The list of organizations the current user can search for orders with.',
value: 'getOrganizationList_output'
}, {
description: 'The response from the getOrderList mashup',
value: 'getOrderList_output'
}]
},
staticBindings: [{
targetBinding: {
path: 'Order.ApplyQueryTimeout',
namespace: 'getOrderList'
},
sourceBinding: {
sourceValue: 'Y',
path: 'Order.ApplyQueryTimeout'
}
}],
events: [{
name: 'onPopupConfirm'
}, {
name: 'openOrderListPage'
}],
subscribers: {
local: [{
eventId: 'saveCurrentPage',
sequence: '25',
handler: {
methodName: "save"
}
}, {
eventId: 'afterScreenLoad',
sequence: '25',
handler: {
methodName: "updateEditorHeader"
}
},
{
eventId: 'bFindOrder_onClick',
sequence: '30',
description: '',
handler: {
methodName: "orderSearchAction",
description: ""
}
}],
},
save: function() {
var eventDefinition = null;
_scEventUtils.fireEventToParent(this, "onSaveSuccess", eventDefinition);
},
updateEditorHeader: function(
event, bEvent, ctrl, args) {
_iasBaseTemplateUtils.updateCustomerMessage(
this, "CUST_ItemBrowsing", true);
_iasBaseTemplateUtils.updateTitle(
this, "blank", null);
_scScreenUtils.focusFirstEditableWidget(
this);
return true;
},
orderSearchAction: function(event, bEvent, ctrl, args) {
this.orderSearch();
},
orderSearch: function() {
var root = null;
root = _scBaseUtils.getTargetModel(this, "getOrderList", null);
var eventDefinition = null;
_scEventUtils.fireEventToParent(this, "openOrderListPage", eventDefinition);
}
});
});ignoreStaticBindings ist in der Datei ScreenUtils.js definiert. Sie kann in jeder Anzeige vor getTargetModel aufgerufen werden, wenn Sie keine Daten aus einigen statischen Bindungen anzeigen wollen. Diese Methode kann beispielsweise aus einem afterScreenInit -Ereignis innerhalb einer beliebigen Anzeige aufgerufen werden, die die Adresserfassung ermöglicht.ignoreStaticBindingsForAddressCapture:function(){
var ignoreList = [{
sourceBinding: {
path: 'PersonInfo.AddressLine3',
namespace: 'screenInput'
},
n targetBinding: {
path: 'PersonInfo.AddressLine3',
namespace: 'verifyAddress_input'
}
}];
scScreenUtils.ignoreStaticBindings(this,ignoreList)
}Diese Methode ignoriert die statischen Bindungen für das Feld AddressLine3 .In der folgenden Tabelle werden einige wichtige Attribute einer Anzeige beschrieben.
| Anzeigenattribute | Beschreibung |
|---|---|
| templateString | Obligatorisch. Der Pfad der HTML-Schablonendatei, die die Benutzerschnittstelle für die Anzeige ergänzt. |
| uId | Obligatorisch. Die eindeutige Kennung für die Anzeige. |
| packageName | Obligatorisch. Paketname der Anzeige. |
| className | Obligatorisch. Klassenname der Anzeige. |
| Namensbereiche | Das Objekt, das alle Quellen-und Zielnamensbereiche enthält, die auf dem Bildschirm verwendet werden. Dieses Attribut ist obligatorisch, wenn Sie Namensbereiche in der Anzeige verwenden. |
| staticBindings | Das Objekt, das alle Quellen-und Zielnamensbereiche und -pfade für statische Bindungen auflistet, die in der Anzeige verwendet werden. Dieses Attribut ist obligatorisch, wenn Sie statische Bindungen in der Anzeige verwenden. |
| Ereignisse | Liste der Ereignisse, die von der Anzeige veröffentlicht werden. Dieses Attribut ist obligatorisch, wenn die Anzeige einige Ereignisse veröffentlicht. |
| subscribers | Liste der globalen und lokalen Ereignisse, für die die Anzeige empfangsbereit ist Dieses Attribut ist obligatorisch, wenn die Anzeige für Ereignisse empfangsbereit ist. |
Erstellen Sie die Datei templates/< Anzeigename> .html.
Die Datei templates/<Screen
name>.html gibt die Benutzerschnittstelle für eine Anzeige wieder. Sie enthält alle in der Anzeige vorhandenen Widgets und entspricht der Dojo-Syntax 1.8 . Es wird verwendet, um Widgets deklarativ mithilfe einer HTML-Datei zu erstellen.
Stellen Sie sicher, dass die HTML-Datei der Anzeige im Ordner templates relativ zur JS-Datei der angepassten Anzeige erstellt wird.
Beispiel für MyOrderScreen
<div class="sc-platform-screen-default myorderscreen">
<div data-dojo-type="idx/layout/ContentPane" data-dojo-props="
spanLabel: true,
resourceId: 'WSCORD0001',
'class': 'wscScreen portlet',
colspan: 1,
uId: 'portletPanel',
layoutAlign: 'top',
scParamDataFn: function() {
return {
'aria-label': this.getSimpleBundleString('Order')
}
}
" role="region">
<div data-dojo-type="idx/layout/ContentPane" data-dojo-props="
spanLabel: true ,
'class': 'contentSeparator portletHeader',
uId: 'portletHeaderPanel'
">
<div data-dojo-type="sc/plat/dojo/widgets/Label" data-dojo-props="
'class': 'primaryInformation',
uId: 'portletName',
scParamDataFn: function() {
return {
value: this.getSimpleBundleString('Order')
}
}
" role='heading'></div>
</div>
<div data-dojo-type="idx/layout/ContentPane" data-dojo-props="
spanLabel: true,
'class': 'PortletContent singlecolumntable',
uId: 'findOrderPanel'
">
<div data-dojo-type="idx/form/TextBox" data-dojo-props="
uId: 'txtOrderNo',
scParamDataFn: function() {
return {
bindingData: {
targetBinding: [{
path: 'Order.OrderNo',
namespace: 'getOrderList'
}],
sourceBinding: {
path: 'Order.OrderNo',
namespace: 'screenInput'
}
},
label: this.getBundleString('OrderNo')
}
}
"></div>
<div data-dojo-type="idx/layout/ContentPane" data-dojo-props="
'class': 'portletSearchBar',
uId: 'pnlSearchBar'
">
<div data-dojo-type="dijit/form/Button" data-dojo-props="
spanLabel: true,
resourceId: 'WSCORD0001',
showLabel: true,
uId: 'bFindOrder',
scParamDataFn: function() {
return {
label: this.getSimpleBundleString('FindOrder')
}
}
"></div>
<div data-dojo-type="sc/plat/dojo/widgets/Link" data-dojo-props="
spanLabel: true,
resourceId: 'WSCRTORD0001',
'class': 'createLink',
uId: 'bCreate',
scParamDataFn: function() {
return {
value: this.getSimpleBundleString('CreateOrder')
}
}
"></div>
</div>
</div>
</div>
</div>- Sie können alle anderen von Dojo unterstützten Widgets in der Anzeige verwenden. Das von der Anwendung bereitgestellte Ereignisframework wird für diese Widgets jedoch nicht unterstützt.
- Wenn eine Anzeigevariable ein Array ist, wird sie bei der Reinitialisierung einer Anzeige nicht reinitialisiert. Wenn Sie die Variable reinitialisieren möchten, kann dies daher
afterScreenInit-Ereignis durch Reinitialisierung des Arrays oder durch Leeren des Arrays erfolgen.
Gemäß dem Anwendungsstandard enthält data-dojo-props das Funktionsattribut scParamDataFn . Dieses Attribut gibt ein JSON-Objekt mit dynamisch ausgewerteten Werten wie Beschriftung, Titel oder bindingData für das Widget zurück.
Da die folgenden Widgets in der Anwendung verwendet werden, unterstützt sie Bindungen und das von der Anwendung bereitgestellte Ereignisframework:
Bearbeitbare Widgets
idx.form.CheckBoxidx.form.CheckBoxListidx.form.DateTextBoxidx.form.FilteringSelectidx.form.NumberTextBoxidx.form.RadioButtonSetidx.form.Textareaidx.form.TextBoxidx.form.CurrencyTextBox
onClick des Panels anhalten. Weitere Informationen zum Anhalten des von der Anwendung bereitgestellten Abonnenten für ein Ereignis finden Sie unter Ereignisse und Abonnenten.Nicht bearbeitbare Widgets
dijit.form.Buttonsc.plat.dojo.widgets.DataLabeldijit.form.TextBox(als verdecktes Widget verwenden)sc.plat.dojo.widgets.Imagesc.plat.dojo.widgets.Linksc.plat.dojo.widgets.Label
Container
idx.layout.ContentPaneidx.layout.MoveableTabContaineridx.layout.TitlePane
Spezielle Widgets
sc.plat.dojo.widgets.Screen-das Basisanzeigenwidgetsc.plat.dojo.widgets.ControllerWidget-wird zum Halten von Anzeigen in einer Anzeige verwendetsc.plat.dojo.widgets.IdentifierControllerWidget-wird zum Halten von Anzeigen in einer Anzeige verwendetgridx.Grid-Rastersc.plat.dojo.widgets.IdentifierScreen-wird für Address -Anzeigen verwendetsc.plat.dojo.widgets.IFrame-I-Frame-Widgetsc.plat.dojo.widgets.Editor-Editor-Widgetsc.plat.dojo.widgets.Wizard-Assistent
saveCurrentPage-Dieses Ereignis tritt auf, um nicht gespeicherte Daten auf der aktuellen Assistentenseite zu speichern.reloadScreen-Dieses Ereignis tritt beim Klicken auf 'Zurück' auf, um die vorherige Seite im Assistenten erneut zu laden.handleTabClose-Dieses Ereignis tritt auf, wenn ein Editor geschlossen wird Vor dem Schließen des Assistenten wird eine Warnung angezeigt, in der der Benutzer aufgefordert wird, alle nicht gespeicherten Daten auf der Seite zu speichern. Stellen Sie sicher, dass derhandleTabClose-Ereignissubskribent für neue Assistenten definiert wird, damit der Benutzer beim Schließen des Editors aufgefordert wird, Daten zu speichern.
Anzeige für verwandte Tasks einbetten
- Wenn der angepasste Editor keinen Assistenten hat, fügen Sie die Anzeige für zugehörige Tasks im Editor hinzu, indem Sie die folgenden Anweisungen befolgen:
- Setzen Sie das Attribut
showRelatedTaskfür die Anzeige, die im angepassten Editor geöffnet wird, auftrue. Weitere Informationen zumshowRelatedTask-Attribut finden Sie in der Beispieldatei MyOrderScreen ". - Fügen Sie in der Anzeige, die im Editor geöffnet ist, einen Subskribenten zum Ereignis
afterScreenLoadhinzu. Lösen Sie im Ereignishandler ein Ereignis für das übergeordnete Element aus, das der Editor ist. Im entsprechenden Ereignishandler des Editors, der auf dem Wert des AttributsshowRelatedTaskbasiert, wird die Anzeige "Zugehörige Task" dynamisch erstellt, indem die MethodeshowOrHideRelatedTaskScreenvonEditorRelatedTaskUtilsaufgerufen wird. - Fügen Sie in der Anzeige "Verwandte Task" einen Abonnenten zum Ereignis
afterParentScreenStartuphinzu. Lösen Sie im Ereignishandler ein Ereignis für das übergeordnete Element aus, das der Editor ist. Zeigen Sie im entsprechenden Ereignishandler des Editors die zugehörige Task an, indem Sie die MethodeshowRelatedTaskScreenHoldervonEditorRelatedTaskUtilsaufrufen. Übergeben Sie die Editorinstanz als Argument. Beispiel:iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).
Bei einem von der Anwendung bereitgestellten Editor löst der Ereignishandler des Ereignisses
afterScreenLoaddas EreignisshowOrHideRelatedTasküber die im Editor geöffnete Anzeige aus. Lösen Sie in der Anzeige "Zugehörige Task" das EreignisafterRTScreenStartupim Ereignishandler des EreignissesafterParentScreenStartupaus. - Setzen Sie das Attribut
- Wenn der angepasste Editor über einen Assistenten verfügt, fügen Sie die Anzeige für zugehörige Tasks wie folgt im Editor hinzu:
- Setzen Sie das Attribut
showRelatedTaskInWizardim Assistenten auftrue. Weitere Informationen zum AttributshowRelatedTaskInWizardfinden Sie unter Beispieldatei CustomWizard.js . - Fügen Sie im Assistenten einen Subskribenten zum Ereignis
starthinzu. Lösen Sie im Ereignishandler ein Ereignis für den Editor aus, wie im folgenden Beispielcode dargestellt.var eventDefn = null; eventDefn = _scBaseUtils.getNewBeanInstance(); _scEventUtils.fireEventToParent(this, "showOrHideRelatedTask", eventDefn); - Im entsprechenden Ereignishandler des Editors, der auf dem Wert des Attributs
showRelatedTaskInWizardbasiert, wird die Anzeige "Zugehörige Task" dynamisch erstellt, indem die MethodeshowOrHideRelatedTaskScreenvonEditorRelatedTaskUtilsaufgerufen wird. - Fügen Sie in der Anzeige "Verwandte Task" einen Abonnenten zum Ereignis
afterParentScreenStartuphinzu. Lösen Sie im Ereignishandler ein Ereignis für das übergeordnete Element aus, das der Editor ist. Zeigen Sie im entsprechenden Ereignishandler des Editors die zugehörige Task an, indem Sie die MethodeshowRelatedTaskScreenHoldervonEditorRelatedTaskUtilsaufrufen. Übergeben Sie die Editorinstanz als Argument. Beispiel:iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).
Bei einem von der Anwendung bereitgestellten Editor lösen Sie im Ereignishandler des Ereignisses
startdas EreignisshowOrHideRelatedTasküber den im Editor geöffneten Assistenten aus. Lösen Sie in der Anzeige "Zugehörige Task" das EreignisafterRTScreenStartupim Ereignishandler des EreignissesafterParentScreenStartupaus. - Setzen Sie das Attribut
Die Prozedur zum Erstellen der Anzeige für verwandte Tasks entspricht der Prozedur zum Erstellen einer angepassten Anzeige. Integrieren Sie die Anzeige für zugehörige Tasks in die entsprechende HTML-Editordatei.
Nachdem Sie die Anzeige für verwandte Tasks eingebettet haben, können Sie die verwandten Tasks aus-oder einblenden. Um verwandte Tasks ein-oder auszublenden, fügen Sie in den angepassten Anzeigen einen Subskribenten und einen Handler für das Ereignis afterScreenLoad hinzu. In der angepassten Anzeige enthält der Ereignishandler updateEditorHeader beispielsweise die Methode updateTitle , mit der zusammengehörige Tasks ein-oder ausgeblendet werden können.
Angepasste Anzeige in der Anwendung hinzufügen und anzeigen
Sie können die angepasste Anzeige in der Anwendung in einem Editor, einem Assistenten, einem Popup-Fenster usw. hinzufügen und anzeigen. Normalerweise werden zum Hinzufügen und Anzeigen der angepassten Anzeigen die Dienstprogramme ControllerUtils, BaseUtilsund WizardUtilsverwendet. Verwenden Sie beispielsweise zum Öffnen von Anzeigen in einem Editor die Methoden, die in ControllerUtilsbereitgestellt werden. Verwenden Sie zum Öffnen von Assistenten in einem Editor WizardUtilsund zum Öffnen einer Anzeige in einem Popup-Fenster BaseUtils. Die am häufigsten verwendeten Methoden sind openScreenInEditor, openWizardInEditor, continueOpeningInEditorund UIUtils.openSimplePopup. Weitere Informationen zur Verwendung anderer Methoden finden Sie in der JavaScript -Dokumentation.
Editor wiederverwenden
Um einen Editor wiederzuverwenden, wählen Sie den entsprechenden Editor im Ordner<war_dir>/WSC/editors aus und übergeben Sie die Vergleichsattribute als Eingabe an den Editor. In der Datei OrderEditorUI.js ist Order.OrderHeaderKey beispielsweise das Vergleichsattribut. Übergeben Sie OrderHeaderKey als Eingabe an den Bestelleditor. Weitere Informationen zum Vergleichsattribut finden Sie in der Beispieldatei MyOrderEditor ".- Navigieren Sie zu
<INSTALL_DIR>/WSC/editors. - Öffnen Sie die entsprechende Datei BehaviorController.js . Um beispielsweise die Liste der Mashups zu ermitteln, die für den Elementsucheditor anwendbar sind, öffnen Sie die DateiItemSearchBehaviorController.js . Alle Mashups befinden sich unter dem Objekt
mashupRefs.