BPM - correlation query.

Hi All,
I have a BPM scenario involving 3 messages types - A, B, C. Messages A and B are actually 2 files to be received from two different sources with the condition that A is received before B. Further, there is a N:1 mapping where source messages are A and B, and the target message is C.
The BPM looks like this -
Receive A --> Receive B --> Transformation (A & B are mapped to C) --> Send C.
Now I assigned message A container to first Recieve step. However, when I assigned message B container to second receive step, the 'Use Correlations' field in that step is shown up as mandatory. In this scneario, there is essentially no correlation between messages A and B. So I want to know what's to be done here and how I can avoid correlation.
Regards,
Shankar

Thanks everyone for your responses. Let me explain the scenario in more detail.
We have an asynchronous scenario involving a source system thats daily sends one XML file containing multiple records. It is then converted into a flat file and sent to receiver system. In the source message there is one field which says whether the record belongs to SAP or JDE. Thus it can have any one of these two values. However the flat file does not contain any field to have these values mapped, because the receiver system doesn't care whether the record is for SAP or JDE.
Now, later on, the receiver system returns an error file in case there is an error in processing the records sent earlier. This file of course contains some fields which are common with the source file. This will be a file sender channel to pick up the error file.
I want to segregate the records from the error file depending on whether they belong to SAP or JDE. For this I am taking help of the original source file which has this information.
Going back to the terminology,
Message A - Error File sent by receiver
Message B - Source file sent by sender
Message C - Error File with additional field populated with SAP / JDE.
Hence I designed the BPM as given above. If message A doesn't arrive, then there is no need of executing the BPM.
Raj - your trick worked. I put dummy correlation and it is not giving error.
However, I am now getting a different (may be unrelated) error. When I specified the containers (from abstract interfaces) in the transformation step, the error is shown that "the expression must return an interface of type <interface name>". Why it is so even if I have defined and activated all the abstract interfaces and all ?
Regards,
Shankar

Similar Messages

  • BPM Correlation from Dynamic Configuration not being filled

    Hey guys,
    I'm having the following problem with BPM correlation.
    In my correlation definition, I have 2 fields: one which is filled with information from the message payload, and another one which is filled with a context object (which was created with adapter metadata and filled with dynamic configuration, as refered here: /people/michal.krawczyk2/blog/2006/10/09/xi-dynamic-configuration-in-adapter-modules--one-step-further).
    All instances of BPM are with error status. And when I go into the workflow log for these processes, if I check the correlation object, it is like this:
    <?xml version="1.0" encoding="utf-8" ?>
    <CorrelationKey Version="001">
    <Field1 />
    <Field2>123456789</Field2>
    </CorrelationKey>
    Field1 is the one read from context object, and is not being filled (thus I think the error comes from here). Field2 is from payload and is being normally filled.
    Any ideas on this matter?
    Maybe the problem is not from the correlation. If not, what else could be the case? The BPM crashes on the very first step (one more reason to think that the correlation is the issue).
    Thanks in advance,
    Henrique.

    HI,
    In general Correlation , concept, whatever we configured in Correlation editor , i mean in runtime which xml element should filled with which element of which interface ..as you said you have configured the local correlation to block, in block it is the first receive step, while receiving the first message which is relevent to first recieve step , i mean if it receives the one message which is related to first receive step inteface .. the respective element data will be filled in correlation id and it will assign on giud for processing , so while assign the runtime data to correlation element ( imean filling stage) check you said two elements in correlation does the first message contains these two elements ??
    if so ok , no then check , and try to use the IM before calling the IP to fill the payload.
    Regards
    Chilla
    Oh closed!!
    Message was edited by:
            Chandra Sekhar Chilla
    Message was edited by:
            Chandra Sekhar Chilla

  • Error in evaluating correlation query

    Hi,
    I am using 10.1.3.3.1 MLR#14 Patch (upgrade from 10.1.3.1). I have created a process where in I've created correlation sets. Basically, I am placing an Order XML on JMS queue (invoking JMS adapter) and the next activity is 'Receive' activity which is polling similar JMS queue for Order response. I have set up correlation between these two activities with the Order Id as the key. The process works fine sometimes and many a times it gets stuck while polling the JMS queue for response messages. I checked the log file and got the following error
    <2008-11-28 11:38:32,467> <ERROR> <default.collaxa.cube> <BaseCubeSessionBean::logError> Error while invoking bean "delivery": [com.collaxa.cube.engine.delivery.DeliveryCorrelationException: Failed to evaluate correlation query.
    Failed to evaluate the correlationAlias query "/ns2:ServiceBusinessMessage/ns2:Info/ns2:Attribute[ns2:Name='OrderId']/ns2:Value" on the element "oracle.xml.parser.v2.XMLElement@84f299"
    Please check your BPEL/WSDL source to make sure that property alias is defined correctly.
    ORABPEL-03813
    Failed to evaluate correlation query.
    Failed to evaluate the correlationAlias query "/ns2:ServiceBusinessMessage/ns2:Info/ns2:Attribute[ns2:Name='OrderId']/ns2:Value" on the element "oracle.xml.parser.v2.XMLElement@84f299"
    Please check your BPEL/WSDL source to make sure that property alias is defined correctly.
    I am getting the above error each time my process stucks while polling for the response messages. Also, this scenario I cannot re-produce at will as the process works fine in some cases while gets stuck for the remaining. Has anybody faced similar error? Is there any resolution as I could not find any help related to this error.
    Thanks in advance.
    Edited by: user2023115 on 28-Nov-2008 07:52

    There should be. Try putting the table name in quotes - some DBMS use single quotes, some use double quotes. For example say the table name has a space in it. Try something like:
    select * from 'a funny table';
    or
    select * from "a funny table";   (Actually, I think I'd try this one first...)
    Failing this, you have two choices: change the name of the table, or dump Access and go with a real DBMS - which you will probibly want to do anyway because it will only be a matter of time before you start hitting a performance wall. Access is particularly bad if you have more than one process making a connection to it at a time. Interms of alternatives, there are a couple really good open-source products out there, as well as no-cost versions of Oracle and SQL-Server.
    Mike...
    Certified Professional Instructor
    Certified LabVIEW Architect
    LabVIEW Champion
    "... after all, He's not a tame lion..."
    Be thinking ahead and mark your dance card for NI Week 2015 now: TS 6139 - Object Oriented First Steps

  • BPM Correlation problem

    Hi All,
            I did BPM correlation scenario. According to this scenario I have to send 2 messages, if I send two messages from the sender side it is working fine. If I send one message from sender side it is waiting until second message reach. Here my problem is if the second message may not send, I want to kill the message waiting process at a specified time. Please help me how to do this process.
    Thanks ,
    Kumar.

    Hi,
    There is a 'Deadline branch' dedicated for this purpose. In a block you can introduce a deadline branch.
    Go thro the link for more details:
    http://help.sap.com/saphelp_nw04/helpdata/en/c5/582541019fa52fe10000000a155106/content.htm
    Regards,
    P.Venkat

  • CorrelationSet with JMS: "Failed to evaluate correlation query"

    Hi,
    i want to send a message over JMS to another service and then receive the correlated message back in my BPEL process.
    The only documentation i found was http://download-uk.oracle.com/docs/cd/B31017_01/integrate.1013/b28981/async.htm#CIHBIEEJ
    Here the error message:
    callbackClient (faulted)
    [2007/01/31 10:16:41] "{http://schemas.xmlsoap.org/ws/2003/03/business-process/}selectionFailure" has been thrown.less
    - <selectionFailure xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
    - <part name="summary">
    <summary>
    Failed to evaluate correlation query.
    Failed to evaluate the correlationAlias query "/ns2:Request/ns2:Header/@Nummer" on the element "oracle.xml.parser.v2.XMLElement@b0abcb"
    Please check your BPEL/WSDL source to make sure that property alias is defined correctly.
    </summary>
    </part>
    </selectionFailure>
    Here the source of invoke and receive:
    <invoke name="callbackClient" partnerLink="ControlEntrance"
    portType="ns1:Produce_Message_ptt" operation="Produce_Message"
    inputVariable="callbackClient_Produce_Message_InputVariable">
    <correlations>
    <correlation initiate="yes" set="myCorrelationSet"
    pattern="out"/>
    </correlations>
    </invoke>
    <receive name="Receive_1" partnerLink="ControlExit"
    portType="ns3:Consume_Message_ptt" operation="Consume_Message"
    variable="Receive_1_Consume_Message_InputVariable"
    createInstance="no">
    <correlations>
    <correlation initiate="no" set="myCorrelationSet"/>
    </correlations>
    </receive>
    If i change the pattern="out" to "in" (invoke-node), then the instance never completes in the BPELConsole (stops before invoke in AUDIT) but my JMS-webservice is executed....
    If pattern="in" i see in the logfile:
    ORABPEL-03813
    Failed to evaluate correlation query.
    Failed to evaluate the correlationAlias query "/ns2:Request/ns2:Header/@Nummer" on the element "oracle.xml.parser.v2.XMLElement@ccef02"
    Please check your BPEL/WSDL source to make sure that property alias is defined correctly.
    So it is the same error but my webservice is invoked and i can provide a ORABPEL-number...
    Message was edited by:
    HEWizard

    Hi,
    "The property alias was not defined correctly in the BPEL/WSDL source, or the payload is not as expected"...
    I bet on the latter... the payload is not as expected... Have you checked the payload?
    Cheers,
    Vlad

  • Failed to evaluate correlation query

    Hi,
    can anyone help me in resolving this error even after giving all the correlation properly. i am getting the following error message
    Failed to evaluate correlation query.
    Failed to evaluate the correlationAlias Query /esa:processServiceOrder/esa:ServiceOrder/esa:id" on the element "oracle.xml.parser.v2.XMLElement@29b829b8"
    Please check your BPEL/WSDL source to make sure that property alias is defined correctly.

    Hi,
    "The property alias was not defined correctly in the BPEL/WSDL source, or the payload is not as expected"...
    I bet on the latter... the payload is not as expected... Have you checked the payload?
    Cheers,
    Vlad

  • Correlated and non correlated Query

    hello
    I am confuse in correlated and non-correlated query? below query is correlated or non correlated ? why?
    SELECT FIRST_NAME,LAST_NAME FROM EMPLOYEES E WHERE department_id in
    (SELECT D.DEPARTMENT_ID FROM DEPARTMENTS D WHERE D.DEPARTMENT_ID=E.DEPARTMENT_ID)
    Thanks

    (SELECT D.DEPARTMENT_ID
       FROM DEPARTMENTS D
      WHERE D.DEPARTMENT_ID=E.DEPARTMENT_ID)is a correlated subquery. There is a correlation between this query and a table in the outer query (in this case the join condition between EMPLOYEES and DEPARTMENTS).
    Justin

  • Correlated query to find cheapest manufacturer for a product

    Hi,
    I have a SQL Query that returns me:
    - the "product code" i must purchase,
    - the "quantity" to purchase for this product
    - and if it's in "promotion or not".
    Based on this result, i must to look at "manufacturer" table and find the cheapest "price" for each product to purchase and the quantity available at the manufacturer.
    If "quantity to order" (e.g. 20) is higher than "quantity available" (e.g. 12) at "cheapest manufacturer", i must order the missing quantity (8) to the next cheapest manufacturer.
    How can i do that ?
    thx

    ​Hi
    >>correlated query to find cheapest manufacturer for a product
    I have created two table [ProdTable] , [Product Code] to get the cheapeast manufacturer  for a product  which you can refer to .
    [Product Table]
    [Prod Table]
    select [ProdTable].[S_Prod_Code],Min([ProdTable].[Prod_Cost]) as MiniCost
    from [ProdTable] inner join [Product Table] on [ProdTable].[S_Prod_Code]=[Product Table].[Product Code]
    Where [Product Table].[Promotion]<>"YES"
    group by [ProdTable].[S_Prod_Code]
    Using the above query ,you can get the cheapest  cheapeast manufacturer  for a product , which the promotion is not YES
    >>for promotional products, i must firstly check if the cheapest manufacturer has enough prod in stock. If not, i order all the prod in stock the manufacturer has, and i must order to missing ones to the next cheapest manufacturer
    Are you looking for a select query or an update to the table or form design ?Can you separate your business rules with the technolege ?  So more people could understand your issues well to give you more help.
    Thanks for your understanding
    Best Regards
    Lan
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Correlated query

    Hi
    I donnot much about about sql .I have a some questions please any one
    1)what is correlated query ?what is the difference between correlated and subquery
    example i have a table it contains 100 rows how the correlated and subquery works
    2)In which situation use "LIKE,EXIST,IN,ANY" functions use in subquery
    Regards
    Mohan

    It's because you have no WHERE clause on your update, so that means all rows will be updated.
    I don't know what your requirements are, but it's common to cut and paste your subquery into a WHERE EXISTS clause:
    update TableA x
    set (desta, destb, destc, destd) =
            (select a.fielda, a.fieldb, b.fieldc, b.fieldd
             from   pro.sty_defs a, pro.loc_defs b
             where  a.con_num = b.loc_num
             and    a.season = x.season
             and    a.sty_num = x.sty_num
             and    a.sty_qual = x.sty_qual
    where exists
            (select a.fielda, a.fieldb, b.fieldc, b.fieldd
             from   pro.sty_defs a, pro.loc_defs b
             where  a.con_num = b.loc_num
             and    a.season = x.season
             and    a.sty_num = x.sty_num
             and    a.sty_qual = x.sty_qual
            )

  • Xpath in BPM correlation. Have to pass only few characters of a field in co

    Hi All,
    Header file:
    MDk-111;1728;175;02.09.11;781961.09;0.00;0.00;781961.09;;;;;;;;;0
    MDk-112;8574;175;02.09.11;4462;1112;104098800;104102150;;;;;;;;;2
    MDk-113;1729;175;02.09.11;781962.09;0.00;0.00;781961.09;;;;;;;;;0
    MDk-114;8575;175;02.09.11;781963.09;0.00;0.00;781961.09;;;;;;;;;0
    Detail file:
    MDk-112;8574;175;02.09.11;;DEBIT;;;;;-1112;;0;02.09.11;;;;20555;;;037;
    MDk-112;8574;175;02.09.11;;CREDIT;;;;;104098800;;0;02.09.11;;;;;;;099;
    - I have to merge header and detail records into one target structure..
    - For the records which doesn't consists of detail records should pass only header record. ex: MDk-113
    - To merge the both the files, im using BPM with correlation.
    The correlation which i need to use in BPM is the first record in both the files "MDk-XXX" where XXX is the number which may or may not match in both the files.. So i need to pass only first four characters of the first filed in the correlation ie. "MDK-".
    After file content conversion, the input xml payload will be as below
    <Code>MDK-112</bankCode>
    How can I pass only first four characters of this field ("MDK-") in Xpath in the correlation tab?
    Kindly suggest.
    Thanks
    Deepthi

    Hi Deepthi,
    You can send the substring of the Code value. This is explained in the following WIKI, have a look at this.
    http://wiki.sdn.sap.com/wiki/display/XI/XpathConditioninReceiverDetermination
    regards
    Ramesh

  • Enterprise bpm cluster query urgent please

    Hello
    I have 3 machines one 1st machine it is admin server and other 2 are managed servers
    I will install weblogic on all 3 machines and then create a domain but my query is to do with BPM enterprise.Should I install bpm enterprise on all 3 machines as well or just on 1 machine(admin machine/1st machine) ? this is my doubt can you please clarify..
    it is pretty urgent
    thanks

    With one machine is enough, then you will deploy to the WLS cluster at the end of the day you do not need to have BPM installed except for the Process Administrator.
    HTH

  • Bpm : correlation

    hi all,
    I am sending a PO request using the send step and waiting for a PO response using the recieve step.
    Assume that i have two instances of this BPM running i.e two PO request's going simultaneously.
    when i get the response back for these two requests , there will be two recieve steps waiting for
    the response since there are two instances of BPM running. the response need to be assigned the
    corresponding requests. This is where correlation comes into picture. I can use PO number as my
    correlation field. i.e I activate my correlation in the send step and use this correlation in receive
    step (this is configurable in BPM).
    Example: PO number needs to be part both request and the response message structure.
    BPM instance1:
    send step -> activate correlation -> send message with PO Number1
    Receive step -> use correlation -> receive response message with PO Number 1.
    BPM instance1:
    send step -> activate correlation -> send message with PO Number2
    Receive step -> use correlation -> receive response message with PO Number 2.
    can anyone suggest me the example scenario or similar scenario of this case.
    thanx

    Hi,
    Cant you use  sync send step..
    Regards
    Pushkar

  • Do I use BPM correlation correctly

    I have a BPM and it calls 3 RFCs
    Sender -> BPM -> RFC1(sync) -> RFC2(sync) -> RFC3(sync)
    And the data is master/detail, but the sender send by detail, not master. It means, if a master has 3 details then sender sends 3 messages to BPM. But I don't want to run the 3 messages parallel.
    Therefore, I use the master no. of the detail message as a correlation in BPM, is it correct? Because I found sometimes I still get parallel BPMs.

    Hi Denis,
      sorry it is not really clear to me do you mean that if you have 3 details you want them to be inside one BPM which would perform 3 succesive RFC calls?
      Then correlction have to be build on master level
    BR, Artem
    Remember points

  • BPM correlations

    Hi friends,
         I am doing file to file sceanrio using BPM. The scenario is it is having 2 input files as inputand one file as output.So i have used BPM. In that i have used fork step.In fork, i have used 2 receive steps.It is asking for correlation. How to give correlation?What name we have to give?Please explain and provide the solution for solving the correlation problem.
    Thanks,
    Leela

    Hi Leela,
    Use a BPM to collect the files. You will need corelation and then use the Transformation Step to create the mapping , Switch for checking of any conditions etc.
    Check this link for example scenarios,
    http://help.sap.com/saphelp_nw04/helpdata/en/de/766840bf0cbf49e10000000a1550b0/content.htm
    Corelation is used when you have multiple Receive Steps in your BPM.
    Consider a case, when you have multiple receive in a fork in a BPM.
    Say receive A of branch 1 receives a file and is waiting for the file for receive B of branch 2 of the fork. Before, this file is available, say another BPM is instantiated because receive A has got the file. So, we have 2 active BPM's waiting for the Files of Recive B.
    When this file is available how to determine which BPM this belongs to? The first or second? This is solved using Correlation.
    In your case, as you have one receive and then multiple Send steps you do not need corealtion.
    This may help you in BPM:
    Recive Step
    You can use a receive step for the following purposes:
    Starting an Integration Process
    Receiving Messages in Integration Processes
    Defining Sync/Async Communication
    Send Step
    You can use a send step () for the following purposes:
    · Sending Messages from Integration Processes Asynchronously
    · Sending Messages from Integration Processes Synchronously
    · Sending Acknowledgements from Integration Processes
    · Defining Sync/Async Communication
    Reciever Determination Step
    You use a receiver determination step () to get a list of receivers for a subsequent send step. The receiver determination step calls the receiver determination that you configured in the Integration Directory and returns the receiver list.
    Transformation Step
    You use a transformation step ( ) to do the following:
    ● n:1 Transformation
    Bundles multiple messages into one message, for example, individual purchase order items into one purchase order.
    ● 1:n Transformation
    Splits a message into multiple messages, for example, a purchase order into the individual purchase order items.
    ● 1:1 Transformation
    Converts a message into another message, for example, a message that is defined by interface A is converted to message that is defined by interface B.
    Switch
    You use a switch () to define different processing branches for a process. The Otherwise processing branch is created automatically.
    You define a condition for each processing branch (see also: Condition Editor). The condition is checked at runtime. The process is continued in the branch that is first to return the value true. If no branch returns the value true, then the process is continued in the Otherwise branch.
    The system checks the conditions in the order that they are numbered. This corresponds to the following sequence:
    · Vertical layout: From top to bottom
    · Horizontal layout: From left to right
    Container Operation
    You use a container operation () to set a value for a target container element at runtime (see also: Defining the Data of a Process in Containers). The target container element and the assigned value must have the same data type. To specify the value, use the expression editor (see also: Using the Expression Editor .
    You can:
    · Assign
    Assigns a value to a single line or multi-line container element. This value overwrites the previous value. You can use this container operation to count a counter variable, for example.
    · Append
    Appends a value to a multiline container element. For example, you can use this container operation to append individual messages to multiline container elements when gathering messages together.
    Control Step
    You use a control step () to do the following:
    · Terminate the current process
    · Trigger an exception
    · Trigger an alert for Alert Management (see also: Triggering an Alert)
    Block
    You use a block () to combine steps that you want to execute one after the other and which are to access the same local data (see also: Containers). You can also use a block to combine steps that you want to have the same deadline or exception handler, or to define a local correlation.
    You can define the mode Parallel For Each(ParForEach) for a block or Dynamic Sequence (ForEach). This means that the block is executed for all elements of a multi-line container element.
    Fork
    You use a fork () when you want to continue a process in branches that are independent of each other, for example, to communicate with two systems that are independent of each other. The branches of the fork join in a union operator.
    You can specify the required number of branches and then define whether the process must run through all branches, or just a particular number of branches. Furthermore, you can define an end condition for the fork (see also: Condition Editor).
    As soon as a branch reaches the union operator at runtime, the system checks the following conditions in the specified order:
    · The process has run through the required number of branches
    · The specified end condition has returned true
    The step is complete as soon as one of the conditions returns true.
    Loop
    You use a loop ( ) to repeat the execution of steps within the loop. The loop continues to run while the end condition returns true (while loop).
    To specify the end condition, use the condition editor.
    Wait Step
    You use a wait step () to incorporate a delay in a process. Usually, you use a delay to define when the next step in the process is to start. You can define a delay as either a point in time or a period of time.
    At runtime, the step waits until the specified point in time is reached or the specified period of time has passed. The system then continues the process by proceeding with the next step.
    Check here for knowing more about fork step... http://help.sap.com/saphelp_nw04/helpdata/en/24/e2283f2bbad036e10000000a114084/content.htm
    Reward points if this helps
    Regards
    Vani.

  • VPD - How to make the where clause a correlated query

    Hi,
    My VPD function has the following where clause:
    where_clause:= ' project_id in (select object_id from pa_project_classes p'||
    ' where p.class_category='||''''||l_cat||''''||
    ' and p.CLASS_CODE='||''''||l_class||''''||
    ' and p.OBJECT_TYPE=''PA_PROJECTS'''||
    The problem is that the subquery is not using the unique key defined on the table pa_project_classes. What I need is something as follows:
    where_clause:= ' project_id in (select object_id from pa_project_classes p'||
    ' where p.class_category='||''''||l_cat||''''||
    ' and p.CLASS_CODE='||''''||l_class||''''||
    ' and p.OBJECT_TYPE=''PA_PROJECTS'''||
    ' and p.object_id=mainquery.project_id ||
    The problem is that since the table pa_project_classes also has a column project_id, I have to prefix the column name by the alias of the main query like 'mainquery.project_id'. However this seems impossible as main query is not unknown .
    I would be grateful if you could suggest any workaround or solution.
    Thanks

    Just have a look over these two statements if it solves your problem
    one time where clause
    Set_Block_Property('BLOCK_NAME',ONETIME_WHERE,your form item);
    dynamic where clause
    set_block_property('BLOCK_NAME'default_where, your form itme)
    you can where clause at run time from any procedure or some triggers

Maybe you are looking for