Puede utilizar herramientas básicas como un editor de texto u otros editores
para crear widgets personalizados.
Antes de empezar
Para desarrollar widgets personalizados, es preciso que tenga conocimientos de lo siguiente:
Según la funcionalidad de los widgets que desarrolle,
quizá tenga que conocer lo siguiente:
- Lenguaje de programación o de scripts del widget si no utiliza JavaScript con
Dojo
- Java™ 2 Platform, Enterprise
Edition (J2EE)
- Representational State Transfer (REST)
Procedimiento
- Cree una estructura de directorios para contener los archivos del
widget personalizado.
Consejo: Los widgets comunes se hallan en la estructura siguiente: iWidget/widgets/nombre_widget.
Puede utilizar esta vía de acceso para ser coherente o puede utilizar su propia estructura.
- En el directorio nombre_widget cree el archivo de definición
de widgets y defina el widget en él. Para obtener más información sobre la definición del widget y sus partes y sobre
iContext, consulte la especificación de iWidget.
Consejo: El convenio de denominación para el archivo de definición del widget es widgetName_iWidget.xml.
En la definición del widget y sus elementos, se define lo siguiente:
- El nombre del widget y los esquemas utilizados.
Por
ejemplo:
<?xml version="1.0" encoding="UTF-8"?>
<iw:iwidget
id="HelloWorld"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:iw="http://www.ibm.com/xmlns/prod/iWidget"
supportedModes="view edit"
lang="en"
iScope="HelloWorld"
name="helloWorld">
El
id debe ser exclusivo.
- El ámbito, que es la clase envoltorio Dojo para la implementación del widget.
Por
ejemplo:
<iw:iwidget
id="HelloWorld"
...
iScope="HelloWorld"
name="helloWorld">
iScope debe coincidir con el nombre de la
clase JavaScript que define el comportamiento del widget.
- Las modalidades que el widget soporta y las definiciones para cada
modalidad.
Por ejemplo, añada las modalidades:
<iw:iwidget
id="HelloWorld"
...
supportedModes="view edit"
...
name="helloWorld">
Por ejemplo, defina las modalidades
añadidas:
<iw:content mode="view">
<![CDATA[
<div>Hello World</div>
]]>
</iw:content>
Debe definir la modalidad view de forma que tenga algo que visualizar. Si desea que los usuarios modifiquen (con el elemento de menú Editar
valores) el contenido del widget de alguna manera, añada la
modalidad edit. La modalidad edit cambia los atributos del
widget (valores) en la capa Atributo de la instancia.
Si desea que determinados usuarios (normalmente sólo los administradores) modifiquen los valores predeterminados del widget, añada la modalidad
config.
La modalidad config cambia los atributos del widget en la capa
Administración. Si desea que los usuarios personalicen la forma en que el widget visualiza
sus datos y que el cambio solo se aplique a usuarios individuales, añada la
modalidad personalize. La modalidad personalize cambia los atributos
del widget en la capa Usuario. Para obtener información sobre las capas de atributos y sobre cómo funcionan, consulte En desuso: Capas de atributos del widget y En desuso: Soporte de la personalización de widgets.
- La vía de acceso y el nombre el archivo JavaScript que declara
iScope. iScope es una clase Dojo que es un punto de entrada para una
clase iContext en tiempo de ejecución. Este punto de entrada es la parte del elemento que interacciona con el entorno a través
de la clase iContext. La clase iContext es esencial para el entorno de ejecución del widget
y proporciona todos los servicios de entorno como, por ejemplo, acceso a variables globales,
un estado compartido, almacenamiento de variables locales, comunicación entre widgets
mediante sucesos, servicios remotos, soporte de modalidad y otras muchas funciones.
Por ejemplo: <iw:resource src="helloWorld.js" id="iScopeFile"
/>. En este caso, el archivo está en el mismo directorio que la definición
del widget de manera que no hay que incluir la vía de acceso.
- Los atributos del elemento, que incluyen los valores que pueden modificar los usuarios. Estos
atributos proporcionan los valores predeterminados para
el widget. Los valores se almacenan como series, por lo que es posible que la implementación
necesite convertir estos valores. Por
ejemplo:
<iw:itemSet id="attributes" private="true">
<iw:item id="url" readOnly="false" value="http://www.ibm.com"/>
</iw:itemSet>
- Los sucesos que el widget publica y gestiona añadiendo una
definición y una descripción de cada suceso. Por
ejemplo:
<iw:event eventDescName="displayHtml" handled="true" id="Receive URL" onEvent="displayMarkup"/>
<iw:eventDescription
description="Receives and displays a URL that is sent from another widget"
id="displayHtml"
lang="en"
payloadType="url.html"
title="Receive URL">
</iw:eventDescription>
- Añada, como recursos, la vía de acceso relativa y el nombre
de cualquier otro archivo que el widget necesite. Por ejemplo, si el widget utiliza un archivo .css para
el formateo, añada la vía de acceso y el nombre de este archivo como recurso.
Sin embargo, cuando añada recursos, tenga en cuenta que tener demasiadas solicitudes
de recursos influye en el rendimiento y el código debe hacer referencia al menor número posible de archivos
JavaScript, CSS y de imagen. Tome en consideración la posibilidad de utilizar técnicas
como la creación de sprites de imágenes, la combinación y minimización de archivos JavaScript y CSS
y la carga lenta de recursos (como la espera a cargar los recursos para la
modalidad edit hasta que se produzca el suceso onEdit) al diseñar
el widget.
- Cree el archivo JavaScript que declara iScope y luego
empiece a definir el iScope identificando su interfaz. Cree la implementación del widget utilizando
JavaScript o cualquier otro lenguaje de programación o script. Siga desarrollando el iScope mientras desarrolla la implementación del widget.
Consejo: Si el widget es simple y utiliza JavaScript para su implementación,
cree la implementación del widget en el archivo de iScope en sí.
- Cree manejadores para las modalidades que ha añadido en la definición de
iWidget y los distintos sucesos definidos en la interfaz, incluidos los sucesos
predefinidos de la especificación de iWidget. Para los siguientes iEvents predefinidos (en la especificación de iWidget), hay manejadores de sucesos predeterminados, que se pueden sobrescribir si es necesario:
- onLoad, al que se llama cuando el widget se carga por primera vez
y cuando se renueva el navegador. El elemento puede inicializar la vista inicial en este manejador. No hay
carga útil de sucesos.
Puede recuperar los valores de elementos utilizando código de esta manera:
var att = this.iContext.getiWidgetAttributes();
this.name = att.getItemValue("name");
- onReload, al que se llama cuando el widget se vuelve a cargar. Este manejador de sucesos es similar a onLoad, sin embargo,
se llama bajo circunstancias distintas. Cuando un usuario está en modalidad edit y
selecciona uno de los botones de la parte inferior de la ventana de
valores, el manejador de sucesos onReload se llama
cuando se renueva la modalidad view. Es un comportamiento ligeramente diferente
del que llama la especificación de iWidget, ya que la especificación pide
que este suceso se active antes de la operación de volver a cargar, en lugar de durante la renovación
del contenido del iWidget por parte de la modalidad edit.
No hay
carga útil de sucesos.
- onUnload, al que se llama justo antes de descargar
el widget. No hay
carga útil de sucesos.
Importante: Asegúrese de que todos los widgets Dojo que ha
creado son limpiados durante este manejador de sucesos. Tiene que llamar <widget>.destroyRecursive() para
asegurarse de que se limpian todos los widgets Dojo hijos en cuanto al
uso de memoria.
- onRefreshNeeded, al que se llama cuando el iContext determina
que los datos del widget son obsoletos. Este suceso indica al iWidget
que renueve sus datos cuando sea necesario.
- Para cada modalidad especificada en el atributo supportedModes
de la definición del widget, cree un manejador de modalidad. Por ejemplo, si el widget tiene una modalidad view y una modalidad edit, cree los
métodos onView y onEdit.
El método onView puede codificarse de la manera siguiente:
onView: function(){
...
}
- Cree un manejador para el suceso onSizeChanged. El suceso tiene una carga útil que contiene valores para los atributos newWidth y newHeight.
El manejador utiliza esta información para cambiar el tamaño del widget con la anchura y altura especificadas. Si el usuario ha minimizado el widget, estos atributos tendrán un valor de 0.
El código siguiente muestra cómo utilizar el manejador
onSizeChanged:
onSizeChanged: function(iEvent) {
var data = iEvent.payload;
if (data) {
alert("new height: " + data.newHeight);
alert("new width: " + data.newWidth);
}
}
- Opcional: Si el widget accede a los datos a través de API de REST, utilice los URI (Uniform Resource
Identifier) en el código como el ejemplo siguiente:
dojo.xhrGet({
url: this.iContext.io.rewriteURI(uri),
load: handler
});
Puede utilizar un método similar para acciones HTTP como
PUT, POST y DELETE.
- Cree archivos de imagen para que sirvan de
imágenes de icono y vista previa del widget personalizado. La imagen de icono debe ser de 28 píxeles por 28 píxeles mientras que la imagen
de vista previa debe ser de 160 píxeles de ancho por 128 píxeles de alto.
- Opcional: Si el widget personalizado va a disponer de ayuda en línea, cree
uno o varios archivos HTML para proporcionar el texto de ayuda. Puede empaquetar
estos archivos con el widget o puede crear un plug-in de documentación y colocar
los archivos de ayuda en el plug-in. Consulte En desuso: Creación de un plug-in de documentación para obtener información.
- Empaquete el archivo de definición de widgets, los archivos de implementación
de widgets y los archivos de imagen en un EAR con una herramienta de empaquetado
adecuada. La herramienta debe poder empaquetar los EAR y WAR de acuerdo
con las especificaciones J2EE.
- Para registrar el widget personalizado, cree una definición
del widget en el archivo de catálogo. Puede poner la entrada en un archivo de catálogo existente
o puede crear su propio archivo de catálogo.
Consulte En desuso: Registro de widgets personalizados mediante archivos de catálogo para obtener información acerca de cómo crear un archivo de catálogo y una definición de registro de widget.
Consejo: El
convenio de denominación para el archivo de registro de widget es catalog_nombreCatálogo.xml.
- Empaquete y despliegue el widget personalizado como se describe en el apartado En desuso: Empaquetado y despliegue de widgets personalizados.
- En un navegador web, vaya al URL panel de control. El URL será algo parecido a http://localhost:9080/BusinessSpace.