genexusextensions |
| Enrique Almeida | |
Me interesaria poder agregar una parte a los dominios, para almacenar en ellos un conjunto de datos . La idea es tener asociado a cada dominio, un conjunto de datos a ser usados en las pruebas unitarias, cada vez que se tenga un atributo / variable con dicho dominio. Por ejemplo, si tengo el atributo CountryID con el dominio Country - char(2) , me interesa guardar { UY, AR } Para el atributo InvoiceDate , con dominio DocumentDate - DATE , me interesa almacenar { #2018-01-01# , #2018-07-01# } Me interesaria que esa parte fuera opcional, de forma que si alguien me manda un export sin esa parte, no cancele el import. Tambien me interesa que si alguien exporta un dominio CON la parte y en la instalacion no tengo la extension instalada, se pueda importar sin dar error (perdiendo los datos). Alguien tiene un ejemplo de como podria agregar una nueva part a un tipo de objeto? |
|
|
| | |
fazzato | |
Hola Enrique
Para agregar una parte a un objeto, por un lado debes tener la clase que
implementa la nueva parte, la cual debe heredar de KBObjectPart, y en un
package de BL registrar la definición de la parte. Por ejemplo supongamos
la clase de la parte se llama DomainTestInfoPart.
En algún fuente del package de BL debes agregar declarar el tipo de parte,
por ejemplo en AssemblyInfo.cs
[assembly:KBObjectPartDeclaration(typeof(DomainTestInfoPart))]
Luego desde el método Initialize del package de BL hay que registrar la
definición de la parte en el udm, y asociar dicha parte a la composición
del objeto que quieras. ej:
public override void Initialize(IGxServiceProvider services)
{
....
AddPart();
KBObjectDescriptor domainDescriptor = KBObjectDescriptor.Get();
domainDescriptor.AddPart(typeof(DomainTestInfoPart).GUID);
}
Respecto a si no viene la parte en un import, el comportamiento actual es
que no falla el import, y tampoco se limpia el contenido que eventualmente
tuviese salvado. En cuanto a ignorar la parte que viene en el xpz si no
tengo la extensión instalada, actualmente no es posible hacerlo. Si en un
export viene la definición de una parte de la cual no tengo la extensión
que la define (o tengo una versión vieja de la extensión que no definía esa
parte), va a fallar la carga del xpz, y no se va a permitir hacer el import.
Un detalle respecto a esto, es que como proveedor de la extensión puedes
tener cierto control respecto a cuándo se comienza a salvar la nueva parte
asociada al objeto al que la agregaste. En un comienzo cada vez que se
definía una parte para un objeto, al salvar una revisión del objeto se
salvaba también la parte, aunque se hubiese dejado la parte en blanco. Eso
luego presentaba problemas si por ejemplo tenía una KB en donde no estaba
usando la funcionalidad de dicha parte, y quería enviar un export a alguien
que no tiene la extensión instalada, ahí la parte en blanco también se
exporta y hace que ocurra un error de import en la KB destino.
Actualmente existe la interfaz IOptionalPart en
Artech.Architecture.Common.Objects, que puede ser implementada por la clase
de tu parte (DomainTestInfoPart). En dicha interfaz se tiene el método
ShouldIgnorePart, el cual es invocado antes de salvar una nueva revisión
del objeto que la contiene, o al exportar el objeto, a modo de determinar
si se debe salvar una revisión de la parte, o incluirla en el export.
Lamentablemente en dicho método no tienes forma de saber en qué situación
estás. El objetivo del mismo es no agregar dependencias en el export a
partes que realmente no se están utilizando, de modo que no se requiera
tener la extensión instalada en la KB destino donde vayas a importar el xpz.
Espero algo de esto sirva para comenzar el desarrollo de la extensión. De
repente con lo de IOptionalPart puedes llegar a definir algún comando de
export particular, en donde definas alguna configuración global que puedas
consultar en el ShouldIgnorePart, para realmente no exportar la parte en
ese comando.
saludos
Federico Azzato
Development & Research
GeneXus™
*+598 2601 2082* <+598-2601-2082>
Av Italia 6201, Ed Los Pinos, P1
Montevideo, Uruguay
www.genexus.com
[image: GeneXus™]
On Thu, Apr 25, 2019 at 3:05 PM Enrique Almeida |
|
|
|
|
Back to genexusextensions |
|