Home Forum Nuclos Konfiguration Businessprozesse Quellobjekt mit Zielobjekt verknüpfen

Ansicht von 9 Beiträgen - 1 bis 9 (von insgesamt 9)
  • Autor
    Beiträge
  • #5106
    Markus Glitzner
    Teilnehmer

    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

    #5107
    Ramin Goettlich
    Teilnehmer

    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

    #5108
    Markus Glitzner
    Teilnehmer

    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

    #5111
    Ramin Goettlich
    Teilnehmer

    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.

    #5112
    Markus Glitzner
    Teilnehmer

    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?

    #5121
    Thomas Schiffmann
    Teilnehmer

    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

    #5124
    Markus Glitzner
    Teilnehmer

    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

    #5126
    Thomas Schiffmann
    Teilnehmer

    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

    #5127
    Markus Glitzner
    Teilnehmer

    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

Ansicht von 9 Beiträgen - 1 bis 9 (von insgesamt 9)