Willkommen, Gast
Home › Foren › Nuclos Konfiguration › Businessprozesse › Quellobjekt mit Zielobjekt verknüpfen
Hallo!
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ß
Hugo
Hallo 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,
nuclosian
Danke 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
Hä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.
Die 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?
Hallo 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
tsc
Danke 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ß
Hugo
Das 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äsentationswert
Bitte 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
tsc
Funktioniert, 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
Du musst angemeldet sein, um auf dieses Thema antworten zu können.