defect
minor
#29461
CommandDispatcher soll Gültigkeit des Ziel-Modells des Kommandos prüfen
Der CommandDispatcher wird u.a. benutzt um die Ausführbarkeit eines Kommandos zu bestimmen.
Hierzu wird überprüft, ob das Modell der Komponente valide ist.
Wenn das Kommando allerdings z.B. auf der Selektion der Komponente operiert und diese invalide ist, kann es zu einem Fehler kommen:
Caused by: com.top_logic.knowledge.service.db2.DeletedObjectAccess: Object (ID: Invitation:38003; Wrapper class: com.top_logic.security.selfservice.model.impl.InvitationImpl) was deleted before or created after access revision 755. at com.top_logic.knowledge.service.db2.DBKnowledgeItem.checkAlive(DBKnowledgeItem.java:965) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.getAttributeValue(DBKnowledgeItem.java:245) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.getAttributeValue(DBKnowledgeItem.java:239) at com.top_logic.knowledge.service.db2.DynamicKnowledgeItem.getAttributeValue(DynamicKnowledgeItem.java:102) at com.top_logic.knowledge.service.db2.DBKnowledgeItem.getAttributeValue(DBKnowledgeItem.java:195) at com.top_logic.knowledge.service.db2.AbstractDBKnowledgeItem.getAttributeValue(AbstractDBKnowledgeItem.java:304) at com.top_logic.model.TLObject.tGetData(TLObject.java:605) at com.top_logic.model.TLObject.tGetDataReference(TLObject.java:768) at com.top_logic.element.meta.kbbased.PersistentObjectImpl.tType(PersistentObjectImpl.java:62) at com.top_logic.element.meta.kbbased.AttributedWrapper.tType(AttributedWrapper.java:46) at com.top_logic.element.meta.kbbased.AttributedWrapper.tType(AttributedWrapper.java:1) at com.top_logic.tool.execution.service.ConfiguredCommandApprovalService.checkModel(ConfiguredCommandApprovalService.java:157) at com.top_logic.tool.execution.service.ConfiguredCommandApprovalService.isExecutable(ConfiguredCommandApprovalService.java:139) at com.top_logic.mig.html.layout.CommandDispatcher.resolveExecutableState(CommandDispatcher.java:343) at com.top_logic.layout.basic.ComponentCommand.calculateExecutability(ComponentCommand.java:151) at com.top_logic.layout.form.model.AbstractExecutabilityModel.updateExecutabilityState(AbstractExecutabilityModel.java:44) at com.top_logic.layout.basic.DynamicCommandModel.updateExecutabilityState(DynamicCommandModel.java:91) at com.top_logic.layout.basic.ComponentCommandModel.updateExecutabilityState(ComponentCommandModel.java:123) ... 52 more
Dies passiert z.B. wenn in einem Dialog eine Grid angezeigt wird, es eine Buttonbar mit dem Edit-Knopf gibt, das selektierte Objekt gelöscht wird und hierbei der Dialog geschlossen wird.
Lösung
Der CommandDispatcher überprüft nicht nur das Modell der Komponente sondern auch das Ziel-Modell des Kommandos.