anonymous Log in
Search
Recents:
v3.0
genexusextensions
Agregar una parte a Dominios
25/04/19 15:05

Enrique Almeida

Replies: 2

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?
Replies

fazzato

25/04/19 16:52
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

gmilano

26/04/19 00:30
Creo que en este caso quizás sería más adecuado y evitaría algunos problemas el tener un nuevo KBObject que tenga esta información . Con esto agregar datos allí no tocaría el Dominio, este KBObject podría guardar una Weak reference a el o los dominios de los que tiene info. Podría tener sus propias propiedades y partes. Podría ser visible o no su edición o su visualización en el KB Explorer. Saludos El El jue, 25 de abr. de 2019 a las 15:05, Enrique Almeida < ealmeida@concepto.com.uy>


Back to genexusextensions