Crea schermate personalizzate
Uno schermo è un widget contenitore Dojo speciale utilizzato nell'applicazione. Gestisce l'interazione dei dati tra l'interfaccia utente e il livello di mashup che contiene sia l'interfaccia utente che la logica di comportamento.
<Screen name>.js- Il file JS corrispondente allo schermo. È possibile definire tutta la logica di comportamento in questo file.templates/<Screen name>.html- Il file HTML che contiene tutte le informazioni UI.<Screen name>BehaviorController.js- Il file JS che contiene i dettaglimashuprefsrichiamati su alcune azioni o comportamenti sullo schermo.<Screen name>InitController.js- Il file JS che contiene i dettaglimashuprefsche vengono chiamati quando si apre una schermata.
Oltre ai file JavaScript, assicurati che anche i <Screen
name>BehaviorController.xml file XML e <Screen
name>InitController.xml Controller siano presenti nella <INSTALL_DIR>/extensions/wsc/webpages/controller/default directory. Per ulteriori informazioni sulla creazione di <Screen
name>BehaviorController.js, <Screen name>InitController.js, <Screen name>BehaviorController.xml, e <Screen
name>InitController.xml, consultare la sezione Personalizzazione dei controller.
Crea il file < Nome schermo> .js
Accertarsi che la sintassi del file <Screen name>.js sia conforme agli standard Dojo versione 1.8 . Lo schermo personalizzato deve estendere sc/plat/dojo/widgets/Screen. Inoltre, è possibile utilizzare i seguenti standard forniti dall'applicazione:
- È possibile utilizzare
scDefineinvece didefine. - È possibile far precedere i moduli JavaScript importati dalla stringa
scbase/loader!. La stringascbase/loaderè un plug-in del programma di caricamento Dojo fornito dall'applicazione. Far precedere un percorso file html da una stringadojo/text!in base alla sintassi Dojo.
Assicurarsi di creare tutti i file di schermo personalizzati nella cartella <INSTALL_DIR>/extensions/wsc/webpages . In WAR, poiché i file sono presenti nella cartella extn , anteporre al package extn.
BehaviorController invece di InitController. Per eseguire i mashup di BehaviorController, utilizzare i sottoscrittori di evento afterScreenInit . Per visualizzare i dati sullo schermo, richiamare il metodo setModel per uno schermo.Esempio di file MyOrderScreen.js
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 è definito nel file ScreenUtils.js . Può essere richiamato prima di getTargetModel in qualsiasi schermata, se non si desidera visualizzare i dati da alcuni bind statici. Ad esempio, questo metodo può essere richiamato dall'evento afterScreenInit all'interno di qualsiasi schermata che consente l'acquisizione dell'indirizzo.ignoreStaticBindingsForAddressCapture:function(){
var ignoreList = [{
sourceBinding: {
path: 'PersonInfo.AddressLine3',
namespace: 'screenInput'
},
n targetBinding: {
path: 'PersonInfo.AddressLine3',
namespace: 'verifyAddress_input'
}
}];
scScreenUtils.ignoreStaticBindings(this,ignoreList)
}Questo metodo ignora i collegamenti statici per il campo AddressLine3 .La seguente tabella descrive alcuni attributi importanti di uno schermo.
| Attributi schermata | Descrizione |
|---|---|
| templateString | Obbligatorio. Il percorso del file di modello html che fornisce l'interfaccia utente per lo schermo. |
| uId | Obbligatorio. L'identificativo univoco per lo schermo. |
| packageName | Obbligatorio. Nome del pacchetto della schermata. |
| className | Obbligatorio. Nome classe dello schermo. |
| Namespace | L'oggetto che contiene tutti gli spazi dei nomi di origine e di destinazione utilizzati sullo schermo. Questo attributo è obbligatorio se si utilizzano gli spazi dei nomi sullo schermo. |
| staticBindings | L'oggetto che elenca tutti i percorsi e gli spazi dei nomi dei collegamenti statici di destinazione e di origine utilizzati sullo schermo. Questo attributo è obbligatorio se si utilizzano i bind statici sullo schermo. |
| eventi | Elenco di eventi pubblicati dallo schermo. Questo attributo è obbligatorio, se la schermata pubblica alcuni eventi. |
| Sottoscrittori | Elenco di eventi globali e locali su cui è in attesa la schermata. Questo attributo è obbligatorio, se lo schermo è in ascolto di eventuali eventi. |
Crea il file template / < nome schermo> .html
Il file templates/<Screen
name>.html esegue il rendering della UI per una schermata. Contiene tutti i widget presenti nello schermo e aderisce alla sintassi Dojo 1.8 . Viene utilizzato per creare i widget in modo dichiarativo utilizzando un file HTML.
Assicurarsi di creare il file HTML di schermo nella cartella templates relativo al file JS di schermo personalizzato.
Esempio di file MyOrderScreen.html
<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>- È possibile utilizzare qualsiasi altro widget supportato da Dojo nella schermata. Tuttavia, il bind e il framework eventi fornito dall'applicazione non è supportato per questi widget.
- Se una variabile di schermo è una schiera, non viene reinizializzata al momento della reinizializzazione di una schermata. Pertanto, se si desidera reinizializzare la variabile, è possibile eseguire l'evento
afterScreenInitreinizializzando l'array o svuotando l'array.
In base allo standard dell'applicazione, data-dojo-props contiene l'attributo della funzione scParamDataFn . Questo attributo restituisce un oggetto JSON con qualsiasi valore valutato dinamicamente come etichetta, titolo o bindingData per il widget.
Poiché i seguenti widget vengono utilizzati nell'applicazione, supportano i bind e il framework di evento fornito dall'applicazione:
Widget modificabili
idx.form.CheckBoxidx.form.CheckBoxListidx.form.DateTextBoxidx.form.FilteringSelectidx.form.NumberTextBoxidx.form.RadioButtonSetidx.form.Textareaidx.form.TextBoxidx.form.CurrencyTextBox
onClick del pannello. Per ulteriori informazioni sull'arresto del sottoscrittore di un evento fornito dall'applicazione, vedere Eventi e sottoscrittori.Widget non modificabili
dijit.form.Buttonsc.plat.dojo.widgets.DataLabeldijit.form.TextBox(utilizzare come widget nascosto)sc.plat.dojo.widgets.Imagesc.plat.dojo.widgets.Linksc.plat.dojo.widgets.Label
Container
idx.layout.ContentPaneidx.layout.MoveableTabContaineridx.layout.TitlePane
Widget speciali
sc.plat.dojo.widgets.Screen- il widget della schermata di basesc.plat.dojo.widgets.ControllerWidget- utilizzato per conservare gli schermi all'interno di uno schermosc.plat.dojo.widgets.IdentifierControllerWidget- utilizzato per conservare gli schermi all'interno di uno schermogridx.Grid- grigliasc.plat.dojo.widgets.IdentifierScreen- utilizzato per i pannelli Addresssc.plat.dojo.widgets.IFrame- Widget IFramesc.plat.dojo.widgets.Editor- Widget Editorsc.plat.dojo.widgets.Wizard- procedura guidata
saveCurrentPage- Questo evento viene emesso per salvare i dati non salvati nella pagina della procedura guidata corrente.reloadScreen- Questo evento viene emesso facendo clic su Indietro per ricaricare la pagina precedente nella procedura guidata.handleTabClose- Questo evento viene generato quando un editor viene chiuso. Prima di chiudere la procedura guidata, viene visualizzato un messaggio di avvertenza che richiede all'utente di salvare i dati non salvati nella pagina. Accertarsi di definire il sottoscrittore eventihandleTabCloseper le nuove procedure guidate, in modo che all'utente venga chiesto di salvare i dati alla chiusura dell'editor.
Integra la schermata delle attività correlate
- Se l'editor personalizzato non dispone di una procedura guidata, aggiungere la schermata delle attività correlate nell'editor seguendo queste istruzioni:
- Impostare il valore dell'attributo
showRelatedTasksutrueper lo schermo aperto nell'editor personalizzato. Per ulteriori informazioni sull'attributoshowRelatedTask, vedere il file di esempio MyOrderScreen.js. - Nella schermata aperta nell'editor, aggiungere un sottoscrittore all'evento
afterScreenLoad. Nel gestore eventi, generare un evento per il parent, che è l'editor. Nel gestore eventi corrispondente dell'editor, basato sul valore dell'attributoshowRelatedTask, la schermata Attività correlata viene creata dinamicamente richiamando il metodoshowOrHideRelatedTaskScreendiEditorRelatedTaskUtils. - Nella schermata Attività correlate, aggiungere un sottoscrittore all'evento
afterParentScreenStartup. Nel gestore eventi, generare un evento per il parent, che è l'editor. Nel gestore eventi corrispondente dell'editor, visualizzare l'attività correlata richiamando il metodoshowRelatedTaskScreenHolderdiEditorRelatedTaskUtils. Passare l'istanza dell'editor come argomento. Ad esempio,iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).
Per un editor fornito dall'applicazione, nel gestore eventi dell'evento
afterScreenLoad, generare l'eventoshowOrHideRelatedTaskdalla schermata aperta nell'editor. Nella schermata Attività correlate, generare l'eventoafterRTScreenStartupnel gestore eventi dell'eventoafterParentScreenStartup. - Impostare il valore dell'attributo
- Se l'editor personalizzato dispone di una procedura guidata, aggiungere la schermata delle attività correlate nell'editor nel modo seguente:
- Impostare il valore dell'attributo
showRelatedTaskInWizardsutruenella procedura guidata. Per ulteriori informazioni sull'attributoshowRelatedTaskInWizard, consultare il file Esempio CustomWizard.js . - Nella procedura guidata, aggiungere un sottoscrittore all'evento
start. Nel gestore eventi, generare un evento per l'editor come mostrato nel seguente codice di esempio.var eventDefn = null; eventDefn = _scBaseUtils.getNewBeanInstance(); _scEventUtils.fireEventToParent(this, "showOrHideRelatedTask", eventDefn); - Nel gestore eventi corrispondente dell'editor, basato sul valore dell'attributo
showRelatedTaskInWizard, la schermata Attività correlata viene creata dinamicamente richiamando il metodoshowOrHideRelatedTaskScreendiEditorRelatedTaskUtils. - Nella schermata Attività correlate, aggiungere un sottoscrittore all'evento
afterParentScreenStartup. Nel gestore eventi, generare un evento per il parent, che è l'editor. Nel gestore eventi corrispondente dell'editor, visualizzare l'attività correlata richiamando il metodoshowRelatedTaskScreenHolderdiEditorRelatedTaskUtils. Passare l'istanza dell'editor come argomento. Ad esempio,iaseditorRelatedTaskUtils.showRelatedTaskScreenHolder(this).
Per un editor fornito dall'applicazione, nel gestore eventi dell'evento
start, generare l'eventoshowOrHideRelatedTaskdalla procedura guidata aperta nell'editor. Nella schermata Attività correlate, generare l'eventoafterRTScreenStartupnel gestore eventi dell'eventoafterParentScreenStartup. - Impostare il valore dell'attributo
La procedura per creare la schermata delle attività correlate è uguale alla creazione di una schermata personalizzata. Integrare la schermata delle attività correlate nel corrispondente file HTML dell'editor.
Dopo aver incorporato la schermata delle attività correlate, è possibile nascondere o visualizzare le attività correlate. Per nascondere o visualizzare le attività correlate, nelle schermate personalizzate aggiungere un sottoscrittore e un gestore per l'evento afterScreenLoad . Ad esempio, nella schermata personalizzata, il gestore eventi updateEditorHeader contiene il metodo updateTitle che consente di nascondere o visualizzare le attività correlate.
Aggiungere e visualizzare la schermata personalizzata nell'applicazione
È possibile aggiungere e visualizzare lo schermo personalizzato nell'applicazione in un editor, in una procedura guidata, in una finestra a comparsa e in altri. Di solito, i programmi di utilità utilizzati per aggiungere e visualizzare le schermate personalizzate sono ControllerUtils, BaseUtilse WizardUtils. Ad esempio, per aprire le schermate in un editor, utilizzare i metodi forniti in ControllerUtils. Per aprire le procedure guidate in un editor, utilizzare WizardUtilse per aprire una finestra a comparsa, utilizzare BaseUtils. I metodi più comunemente utilizzati sono openScreenInEditor, openWizardInEditor, continueOpeningInEditore UIUtils.openSimplePopup. Per ulteriori informazioni sull'utilizzo di altri metodi, consultare la documentazione JavaScript .
Riutilizza un editor
Per riutilizzare un editor, selezionare l'editor appropriato dalla cartella<war_dir>/WSC/editors e inoltrare gli attributi di confronto come input all'editor. Ad esempio, nel file OrderEditorUI.js , Order.OrderHeaderKey è l'attributo di confronto. Passare OrderHeaderKey come input all'editor Ordine. Per ulteriori informazioni sull'attributo comparison, vedere il file di esempio MyOrderEditor.js.- Passare a
<INSTALL_DIR>/WSC/editors. - Aprire il file BehaviorController.js appropriato. Ad esempio, per determinare l'elenco di mashup applicabili per l'editor Ricerca articolo, aprire il fileItemSearchBehaviorController.js . Tutti i mashup sono presenti nell'oggetto
mashupRefs.