Home › Forum › Nuclos Konfiguration › Businessprozesse › Quellobjekt mit Zielobjekt verknüpfen
- Dieses Thema hat 8 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Jahren, 9 Monaten von
Markus Glitzner.
-
AutorBeiträge
-
29 Februar 2012 um 11:10 Uhr #5106
Markus Glitzner
TeilnehmerHallo!
Bei einem Arbeitsschritt kann ja das Zielobjekt mit dem Quellobjekt verknüpft werden. Ich bräuchte es genau umgekehrt, also das Quellobjekt mit dem Zielobjekt verknüpfen.
Mit anderen Worten: Wie kann ich die Id des Zielobjektes in das Referenzfeld des Quellobjektes setzen bzw. geht das überhaupt?
Hintergrund:
Ich bekomme Bestellungen aus einem Shopsystem und möchte daraus mittels Arbeitsschritt einen (neuen) Kunden erstellen. Das funktioniert auch, nur muss der Kunde danach im LOV der Bestellung manuell eingetragen werden.Gruß
Hugo29 Februar 2012 um 15:09 Uhr #5107Ramin Goettlich
TeilnehmerHallo Hugo,
das einfachste wird sein, an den Arbeitsschritt eine Regel zu hängen, die genau das tut.
Aufs Quellobjekt kann man in so einer Regel zugreifen mittels:
org.nuclos.server.ruleengine.valueobject.RuleObjectContainerCVO sourceObject = server.getSourceObjectContainerCVO();
Grüsse,
nuclosian29 Februar 2012 um 17:40 Uhr #5108Markus Glitzner
TeilnehmerDanke für dne Tipp, geht aber nicht.
Sobald ich Werte vom Sourceobject auslesen oder speichern will, kommt ein NullPointerException.
server.getSourceObjectContainerCVO();
MasterDataVO mdvo = sourceObject.getMasterData();
Integer i = mdvo.getIntId();org.nuclos.common.NuclosFatalException: rule.execution.error {Shop Bestellung (Kunde)} {5} {}
at org.nuclos.client.genericobject.GeneratorDelegate.generateGenericObject(GeneratorDelegate.java:115)
at org.nuclos.client.genericobject.GenerationController$6$1.run(GenerationController.java:410)
at org.nuclos.client.ui.collect.InvokeWithInputRequiredSupport.invoke(InvokeWithInputRequiredSupport.java:39)
at org.nuclos.client.genericobject.GenerationController$6.run(GenerationController.java:407)
at org.nuclos.common2.CommonRunnableAdapter.run(CommonRunnableAdapter.java:38)
at org.nuclos.client.ui.UIUtils.runCommand(UIUtils.java:795)
at org.nuclos.client.ui.UIUtils.runCommand(UIUtils.java:770)
at org.nuclos.client.ui.UIUtils$2.run(UIUtils.java:829)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.nuclos.server.ruleengine.NuclosFatalRuleException: rule.execution.error {Shop Bestellung (Kunde)} {5} {}
at org.nuclos.server.ruleengine.ejb3.RuleEngineFacadeBean.executeBusinessRules(RuleEngineFacadeBean.java:339)
at org.nuclos.server.ruleengine.ejb3.RuleEngineFacadeBean.fireGenerationRules(RuleEngineFacadeBean.java:245)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.nuclos.server.spring.FacadeLocalProxyFactoryBean$1.invoke(FacadeLocalProxyFactoryBean.java:76)
at $Proxy42.fireGenerationRules(Unknown Source)
at org.nuclos.server.genericobject.ejb3.GeneratorFacadeBean.executeGenerationRules(GeneratorFacadeBean.java:770)
at org.nuclos.server.genericobject.ejb3.GeneratorFacadeBean.generateGenericObject(GeneratorFacadeBean.java:443)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy68.generateGenericObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.remoting.support.RemoteInvocation.invoke(RemoteInvocation.java:205)
at org.nuclos.server.common.NuclosRemoteInvocationExecutor.invoke(NuclosRemoteInvocationExecutor.java:125)
at org.springframework.remoting.support.RemoteInvocationBasedExporter.invoke(RemoteInvocationBasedExporter.java:78)
at org.springframework.remoting.support.RemoteInvocationBasedExporter.invokeAndCreateResult(RemoteInvocationBasedExporter.java:114)
at org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter.handleRequest(HttpInvokerServiceExporter.java:73)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.nuclos.server.security.SessionInvalidationFilter.doFilter(SessionInvalidationFilter.java:76)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at org.springframework.remoting.support.RemoteInvocationUtils.fillInClientStackTraceIfPossible(RemoteInvocationUtils.java:47)
at org.springframework.remoting.support.RemoteInvocationResult.recreate(RemoteInvocationResult.java:115)
at org.springframework.remoting.support.RemoteInvocationBasedAccessor.recreateRemoteInvocationResult(RemoteInvocationBasedAccessor.java:85)
at org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:148)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy41.generateGenericObject(Unknown Source)
at org.nuclos.client.genericobject.GeneratorDelegate.generateGenericObject(GeneratorDelegate.java:113)
... 21 more
Caused by: java.lang.NullPointerException
at Rule_41766542.rule(Rule_41766542.java:29)
at org.nuclos.server.ruleengine.ejb3.RuleEngineFacadeBean.executeBusinessRules(RuleEngineFacadeBean.java:309)
... 106 more
1 März 2012 um 12:47 Uhr #5111Ramin Goettlich
TeilnehmerHängt die Regel am Arbeitsschritt? Der Zugriff auf das Sourceobject funktioniert nicht, wenn die Regel z.B. am Speichern oder an einem anderen Ereignis hängt.
1 März 2012 um 13:18 Uhr #5112Markus Glitzner
TeilnehmerDie Regel hängt am Arbeitschritt und es ist keine Verwendung bei der Regel selbst angegeben und wird auch sonst niergends verwendet. Ausführen im Anschluss bringt den selben Fehler.
Das Zielobjekt hat kein Statusmodell. Macht das einen Unterschied?
5 März 2012 um 12:40 Uhr #5121Thomas Schiffmann
TeilnehmerHallo hugo,
wenn das Quellentität ein Statusmodell hat, muss zum Ermitteln der Quellobjekt-Id folgender Code verwendet werden:
GenericObjectVO go = server.getSourceObjectContainerCVO().getGenericObject();
Integer i = go.getId();Viele Grüße
tsc5 März 2012 um 14:37 Uhr #5124Markus Glitzner
TeilnehmerDanke für den Tipp, allerdings komm ich trotzdem nicht weiter.
Ich komme so zwar auf die Id des Quellobjektes und mit server.getObjectId() auf die Id des Zielobjektes, aber ich finde keine Möglichkeit, diese in ein Feld des Quellobjektes zu speichern.
So sollte es dann aussehen, nur funktioniert das setFieldValue eben nicht
/* Zielobjekt */
Integer intid = (Integer)server.getObjectId();/* Quellobjekt */
org.nuclos.server.ruleengine.valueobject.RuleObjectContainerCVO sourceObject = server.getSourceObjectContainerCVO();GenericObjectVO govo = sourceObject.getGenericObject();
Integer srcid = govo.getId();MasterDataVO mdvo = sourceObject.getMasterData();
mdvo.setField("kunde"+"Id", intid);Gruß
Hugo5 März 2012 um 15:29 Uhr #5126Thomas Schiffmann
TeilnehmerDas Quellobjekt wird in einem Arbeitsschritt auch nicht gespeichert. Um direkt einen Wert eines Objekts außerhalb des Kontexts zu setzen, müssen Sie folgende Methode verwenden:
server.setField(String sEntityName, Integer iObjectId, String sFieldName, Integer iValueId, Object oValue)
sEntityName: Entitätsname der Quellentität
iObjectId: Id des Quellobjekts
sFieldName: Feldname der Quellentität
iValueId: Fremdschlüsselwert
oValue: Wert bzw. RepräsentationswertBitte achten Sie auch darauf, dass die Regel im Anschluss ausgeführt wird, da sonst die Id des Zielobjekts noch nicht zur Verfügung steht und der Datensatz auch noch nicht in die Datenbank geschrieben wurde.
Viele Grüße
tsc5 März 2012 um 15:43 Uhr #5127Markus Glitzner
TeilnehmerFunktioniert, Danke!
falls es jemand benötigt, so sieht der fertige Zweizeiler aus:
GenericObjectVO govo = server.getSourceObjectContainerCVO().getGenericObject();
server.setField("Shop Bestellung", govo.getId(), "kunde", server.getObjectId(), null);Gruß
Hego -
AutorBeiträge