Ältere Plattform

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.

Zum Erstellen von angepassten Anzeigen müssen die folgenden JavaScript -Dateien vorhanden sein, die die JavaScript -Anzeigendefinition enthalten.
  • <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 die mashuprefs -Details enthält, die für eine Aktion oder ein Verhalten in der Anzeige aufgerufen werden
  • <Screen name>InitController.js -JS-Datei mit den mashuprefs -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 scDefine anstelle von defineverwenden.
  • Sie können den importierten JavaScript -Modulen die Zeichenfolge scbase/loader! voranstellen. Die Zeichenfolge scbase/loader ist ein Dojo-Loader-Plug-in, das von der Anwendung bereitgestellt wird. Stellen Sie einem HTML-Dateipfad eine dojo/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.

Hinweis: Um eine untergeordnete Anzeige zu erstellen, verwenden Sie 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);
		}
	});
});
Die Methode 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.

Tabelle 1. Bildschirm-Attribute
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>
Hinweis:
  • 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.CheckBox
  • idx.form.CheckBoxList
  • idx.form.DateTextBox
  • idx.form.FilteringSelect
  • idx.form.NumberTextBox
  • idx.form.RadioButtonSet
  • idx.form.Textarea
  • idx.form.TextBox
  • idx.form.CurrencyTextBox
Hinweis: In der mobilen Version der Anwendung können Sie keine bearbeitbaren Widgets zu Listenfeldern wie dem Feld "Meine laufenden Aufgaben" auf der Startseite und den darin enthaltenen Feldern hinzufügen. Wenn Sie jedoch im Rahmen der Anpassung bearbeitbare Widgets zu einem Panel hinzufügen möchten, müssen Sie den von der Anwendung bereitgestellten Abonnenten für das Ereignis 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.Button
  • sc.plat.dojo.widgets.DataLabel
  • dijit.form.TextBox (als verdecktes Widget verwenden)
  • sc.plat.dojo.widgets.Image
  • sc.plat.dojo.widgets.Link
  • sc.plat.dojo.widgets.Label

Container

  • idx.layout.ContentPane
  • idx.layout.MoveableTabContainer
  • idx.layout.TitlePane

Spezielle Widgets

  • sc.plat.dojo.widgets.Screen -das Basisanzeigenwidget
  • sc.plat.dojo.widgets.ControllerWidget -wird zum Halten von Anzeigen in einer Anzeige verwendet
  • sc.plat.dojo.widgets.IdentifierControllerWidget -wird zum Halten von Anzeigen in einer Anzeige verwendet
  • gridx.Grid -Raster
  • sc.plat.dojo.widgets.IdentifierScreen -wird für Address -Anzeigen verwendet
  • sc.plat.dojo.widgets.IFrame -I-Frame-Widget
  • sc.plat.dojo.widgets.Editor -Editor-Widget
  • sc.plat.dojo.widgets.Wizard -Assistent
Bei angepassten Anzeigen werden die folgenden Ereignisse von einem Assistenten ausgelöst:
  • 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 der handleTabClose -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

Sie können die Anzeige "Zugehörige Tasks" auf eine der folgenden Arten 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 showRelatedTask für die Anzeige, die im angepassten Editor geöffnet wird, auf true . Weitere Informationen zum showRelatedTask -Attribut finden Sie in der Beispieldatei MyOrderScreen ".
    • Fügen Sie in der Anzeige, die im Editor geöffnet ist, einen Subskribenten zum Ereignis afterScreenLoad hinzu. 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 Attributs showRelatedTask basiert, wird die Anzeige "Zugehörige Task" dynamisch erstellt, indem die Methode showOrHideRelatedTaskScreen von EditorRelatedTaskUtilsaufgerufen wird.
    • Fügen Sie in der Anzeige "Verwandte Task" einen Abonnenten zum Ereignis afterParentScreenStartup hinzu. 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 Methode showRelatedTaskScreenHolder von EditorRelatedTaskUtilsaufrufen. Übergeben Sie die Editorinstanz als Argument. Beispiel: iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).

    Bei einem von der Anwendung bereitgestellten Editor löst der Ereignishandler des Ereignisses afterScreenLoad das Ereignis showOrHideRelatedTask über die im Editor geöffnete Anzeige aus. Lösen Sie in der Anzeige "Zugehörige Task" das Ereignis afterRTScreenStartup im Ereignishandler des Ereignisses afterParentScreenStartup aus.

  • 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 showRelatedTaskInWizard im Assistenten auf true . Weitere Informationen zum Attribut showRelatedTaskInWizard finden Sie unter Beispieldatei CustomWizard.js .
    • Fügen Sie im Assistenten einen Subskribenten zum Ereignis start hinzu. 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 showRelatedTaskInWizard basiert, wird die Anzeige "Zugehörige Task" dynamisch erstellt, indem die Methode showOrHideRelatedTaskScreen von EditorRelatedTaskUtilsaufgerufen wird.
    • Fügen Sie in der Anzeige "Verwandte Task" einen Abonnenten zum Ereignis afterParentScreenStartup hinzu. 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 Methode showRelatedTaskScreenHolder von EditorRelatedTaskUtilsaufrufen. Übergeben Sie die Editorinstanz als Argument. Beispiel: iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).

    Bei einem von der Anwendung bereitgestellten Editor lösen Sie im Ereignishandler des Ereignisses start das Ereignis showOrHideRelatedTask über den im Editor geöffneten Assistenten aus. Lösen Sie in der Anzeige "Zugehörige Task" das Ereignis afterRTScreenStartup im Ereignishandler des Ereignisses afterParentScreenStartup aus.

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 ".
Gehen Sie wie folgt vor, um die Liste der Mashup-Aufrufe in einem vorhandenen Editor zu ermitteln:
  1. Navigieren Sie zu <INSTALL_DIR>/WSC/editors.
  2. Ö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 .