miércoles, 23 de diciembre de 2009

Configurar qué se muestra en el navtree (título de los expedientes)

0 comentarios
 
Para personalizar qué información se visualiza en el navtree, simplemente tenemos que configurar, en cada schema asociado a cada patrón, un campo llamado 'navtree_title'

- Entramos a ZMI/schemas/schema_en_cuestion
- Añadir un campo string llamado 'navtree_title'
- Escribir la expresión que necesitemos en el campo 'Write : expresion', al estilo :

python: object and "%s - %s - %s" % (object.reference, object.title, object.planned_start.strftime(...)) or ''

o más complejo :

python:object and "SM.%s.%s"%(relacionados and len(relacionados)>=1 and util.relatedObjectAttribute(relacionados[0],'reference') or 'Sin Relación',serie) + ' - ' + object.title

Importante : Si utilizamos la read expression, esto se calcula cada vez, afectando al rendimiento, por eso lo usamos en la write expression, que solo se calcula cada vez que se guarda el objecto. El problema de esto segundo, es que si hacemos el cambio a posteriori (con expedientes ya creados) , hay que ejecutar un commit de cada objeto para que se actualice todo correctamente
Esto también es importante si tenemos los schemas en postgresql, ya que las read expresions NO se graban en las tablas

para ejecutar el commit tenemos la solución fácil por un lado, si hay pocos expedientes, que es editarlo uno por uno y guardarlo desde la propia aplicación

si hay muchos expedientes, no queda más remedio que ejecutar un zopectl debug y escribir esto (o crear un archivo de texto y ejecutarlo via zopectl run)

site = app.mi_site_de_km
site._p_jar.cacheGC()
site._p_jar.sync()
from AccessControl.SecurityManagement import newSecurityManager
from Testing.makerequest import makerequest
user = site.acl_users.getUser('un_usuarioa_dmin').__of__(site.acl_users)
newSecurityManager({}, user)
app = makerequest(app)
site = app.mi_site_de_km
from Products.CPSCore.EventServiceTool import getPublicEventService
from Products.AdvancedQuery import Eq,In
cat = site.portal_catalog
km = site.workspaces.kmkey
site._p_jar.cacheGC()
site._p_jar.sync()
brains = cat.evalAdvancedQuery(Eq('portal_type',el_portal_type_que_sea))

obs=[]
i=0
for brain in brains:
i=i+1
obs.append(brain.getObject())
if i%25==0:
site._p_jar.cacheGC()
site._p_jar.sync()


i=0
for proxy in obs:
ob = proxy.getContent()
dm = ob.getDataModel()
dm._commit()
proxy.reindexObject()
evtool = getPublicEventService(proxy)
evtool.notifyEvent('modify_object', proxy, {})
i=i+1
if i%5==0:
get_transaction().commit()
km._p_jar.cacheGC()
km._p_jar.sync()

Leave a Reply