Conditional processing based on UDF in payload S

Hi all,
I am trying to add a conditional processing atom in my flow which executes based on the value in a UDF in the msg.
I have 1 path branch and the otherwise branch.
I use follwing xpath syntax:
/*[/vpf:Msg/vpf:Body/vpf:Payload[./@Role='S']/BOM/BO/Documents/row/U_docentry_bv='']
My inbound messages stay in processing and don't go further. Neither branch is being executed.
Can anyone help me with this?
Thx,
Joeri
Edited by: Joeri Vlemmings on Dec 13, 2011 4:05 PM
I noticed that when I debug, the xpath statement is being handled correct, and the correct branch is beinig executed.
But when I trigger my flow the normal way (inbound SBO order), the flow holds in processing.
The message looks as follows :
  <?xml version="1.0" encoding="utf-8" ?>
- <Msg xmlns="urn:com.sap.b1i.vplatform:entity" MessageId="111213153049599408750A0000CBA820" BeginTimeStamp="20111213153049" recording="false" logmsg="0000" SubMessageId="3" status="success" msglogexcl="false" MessageLog="true">
- <Header>
  <msglog step="Default message log" always="false" b1ifactive="true" />
- <Resumption>
  <starter ipo="/vP.0010000112.in_BEAE/com.sap.b1i.vplatform.runtime/INB_B1_EVNT_ASYN_EVT/INB_B1_EVNT_ASYN_EVT.ipo/proc" />
  <restart id="processing" q="Q.PRC_B1.0010000112" s="S.DBS.ELD.SO2SO" u="111213153049599408750A0000CBA820.3" />
  </Resumption>
  <ProcStream>S.</ProcStream>
  <IPO Id="INB_B1_EVNT_ASYN_EVT" tid="111213133400599408640A0000CB6406" />
  <Sender Id="0010000112" ObjId="17" />
  <vBIU Id="DBS.ELD.SO2SO" SId="DBS.ELD.Intercompany" filter="" phase="S" />
  <Successor Id="" Mode="" />
  <Identification Ident="B1 Event" IdPar="n.a." />
  <nsList />
  </Header>
- <Body>
- <Payload Role="T" Type="B1Event" add="">
- <Event xmlns="" B1EventFilter="false">
- <b1e:b1events xmlns:b1e="urn:com.sap.b1i.sim:b1event">
- <b1e:b1event>
  <b1e:eventsource>SBODemoNL</b1e:eventsource>
  <b1e:objecttype>17</b1e:objecttype>
  <b1e:transactiontype>U</b1e:transactiontype>
  <b1e:usercode>Mark Manager</b1e:usercode>
  <b1e:userid>manager</b1e:userid>
- <b1e:keys count="1">
- <b1e:key>
  <b1e:name>DocEntry</b1e:name>
  <b1e:value>247</b1e:value>
  </b1e:key>
  </b1e:keys>
  <b1e:sourcesite>PANDA</b1e:sourcesite>
  </b1e:b1event>
  </b1e:b1events>
- <b1ie:B1IEvent xmlns:b1ie="urn:com.sap.b1i.sim:b1ievent" SysId="0010000112" SysTypeId="B1.8.8" Task="U" LocalObjectType="17">
- <b1ie:PrimaryKeyList>
  <b1ie:PrimaryKey Key="DocEntry" Value="247" />
  </b1ie:PrimaryKeyList>
  </b1ie:B1IEvent>
  </Event>
  </Payload>
  <Payload Role="S" />
  </Body>
  </Msg>
As you can see, there is no Payload 'S'.
When I remove the conditional processing from my flow, everything is fine and the scenario gets executed.
Please help...

Hi all,
I found the solution!
The problem was not directly in the conditional processing but in the output
message.
In atom0, which populates the output xml file, the complete message
(msg/* with receiver data etc) was not copied.
I had a look in the example B1PO2B1SO, and saw that there
was /bva:unbranch/ before the msg to get it copied to the next steps.
<xsl:variable name="msg" select="/bfa:unbranch/vpf:Msg/vpf:Body/vpf:Payload[./@Role=&apos;S&apos;]"/>
I added this to my atom0 and it works!
Grts,
Joeri

Similar Messages

  • Need to do conditional processing based on just-selected list item

    hi -- I have a vertical, unordered list. Each list item branches to a different page when selected.
    When the list item is selected, and before the branch happens, I need to do some conditional processing
    that depends on which list item was just selected.
    How can I get information about which list item was just selected?
    Thanks,
    Carol

    Carol - List items get rendered as links on the page so as soon as you click the link the browser goes there. You can't normally run a process on the current page by clicking that link. I suppose you could build each list item target (defined in the list item definition) to use javascript that submits the page, perhaps passing the item name as the "request" value. Then when the page is submitted, an after-submit process could do whatever you need it to and similarly a branch could be defined for each list item that would take the user to the intended page.
    Scott

  • Conditional Processing based on month and Year

    Hi ALL,
    I have one package that Contain two DataFlow
    DFT1
    DFT2
    now What I need ,I need to Process the DFT1 on every week and DFT2 on every month Start.
    Please Help Me .
    How can I do this task.
    Thanks

    Hi BI_group,
    The two Data Flow Tasks should not be connected, right? We can add two Execute SQL Tasks to store the day or weekday of today in a variable, connect them with the two Data Flow Tasks respectively, and configure Precedence Constraint based an expression. 
    For example, we configure Execute SQL Task 1 as follows:
    On “General” tab:
    ResultSet: Single row
    ConnectionType: OLE DB
    Connection: (Any OLE DB connection manager)
    SQLStatement:  SELECT DATENAME(WEEKDAY,GETDATE()) AS TodayOfWeekday
    On “Result Set” tab:
    Result Name: 0
    Variable: User::TodayOfWeekday
    Then, double click the path between Execute SQL Task 1 and Data Flow Task 1, and configure the Precedence Constraint as follows:
    Evaluation operation: Expression
    Expression: @[User::TodayOfWeekday]=”Sunday”
    For Execute SQL Task 2, you can use the query “SELECT DAY(GETDATE()) AS TodayOfMonth” to get the month day of today, store it in the variable TodayOfMonth, and configure the expression of the Precedence Constraint between Execute SQL Task 2 and Data Flow
    Task 2 as:
    @[User::TodayOfMonth]="1"
    Regards,
    Mike Yin
    TechNet Community Support

  • Multiple Conditional Processes on Submit - Confused!

    I have a Form Page based on a table where the user can update the data. I want to capture changes in a history table.
    Simplified, the tables are:
    Table PKey Varchar Columns
    UPDATEABLETABLE ID1 TEXT1 TEXT2
    HISTORYTABLE ID1 DESCRIPTION
    In addition to the automatic row update process I created 2 conditional processes:
    Process UpdateText1
    Source: INSERT INTO HISTORYTABLE (DESCRIPTION) VALUES ('TEXT1 Changed to ' || :P1_TEXT1);
    Process Point : On Submit - After Computations and Validations
    Condition: Type: Value of Item in Expression 1 != Expression2
    Expression 1: SELECT TEXT1 FROM UPDATEABLETABLE WHERE ID1 = :P1_ID1
    Expression 2: : P1_TEXT1
    Process UpdateText2
    Source: INSERT INTO HISTORYTABLE (DESCRIPTION) VALUES ('TEXT2 Changed to ' || :P1_TEXT2);
    Process Point : On Submit - After Computations and Validations
    Condition: Type: Value of Item in Expression 1 != Expression2
    Expression 1: SELECT TEXT2 FROM UPDATEABLETABLE WHERE ID1 = :P1_ID1
    Expression 2: :P1_TEXT2
    The issue is that if I only change 1 item (either one), both items return a line to HISTORYTABLE. Only if there are no changes or If both have changed I get the expected result.
    I've tried changing the Process Point and sequences, etc. without any improvement.
    Any ideas gratefully received!
    Edited by: user7258268 on 05-Jun-2009 08:14

    Hello:
    If you just need to track changes to a record without needing to know what field in the record was changed a simply 'MINUS' query will work to insert the changed record into the history table.
    insert into history_table
    select col1, col2, col3, col4... from tab where pk=:P_pk
    minus
    select :p_col1,:p_col2,:p_col3... from dual     // p_col1,p_col2.. are page items corresponding to col1,col2...The above code is in a 'After Submit' page process that fires before the 'Automatic Row Processing (DML) ' process
    Varad

  • Call a process based on the click of a javascript confirm popup box

    I have created a function to create a javascript confirm popup box which calls an update process called Reactivate_save(), see below:
    function reactivate_save()
    var r=confirm("Do you wish to save pending changes?")
    if (r==true)
    document.getElementById('Reactivate_Save').call();
    I want to make the update process conditional on clicking the 'ok' button inside the popup box.....Is this possible?
    I thought that I could reference it by using:
    value in expression 1 = expression 2
    reactivate_save() = true or 1
    Neither of these worked and wondering if there is something else that I can use?
    Thanks,
    Chris

    Hi,
    Your function is in Javascript while the process is PL/SQL. What you need to do is somewthing like this
    if (r==true)
    document.getElementById('Reactivate_Save').call(); // not sure what this does so left it as it is
    doSubmit('MY_REQUEST');
    }You can now use the 'MY_REQUEST' request, or whatever else you choose to call it, in the process condition using
    1. Request = e condition type by entering MY_REQUEST in the Expression 1
    or
    2. PL/SQL Expression type with :REQUEST = 'MY_REQUEST' in expression 1
    Note : In Apex 3 and below you need to add a semi colon at the end of PL/SQL Expresssions
    Regards,
    PS : Noticed that this is the same as call a process based on the click of a javascript confirm popup box
    Edited by: Prabodh on Sep 28, 2010 9:05 PM

  • How to determine the hardware requirements based on the Services' payload

    hello,Guys
    i am wondering if i can calculate the hardware requirements based on the services' payload ?
    what factors should i consider when to determine the hardware requirements?
    is there any documents related to my questions? ;)
    Thanks
    Regards
    Wen

    Payload size is not the only factor while determining size of the system (h/w). You need to consider number of services, nature of services (sync/async), payload size, frequency of messages (load), peak load value, security constraints, performance requirements etc..
    You may contact your local Oracle Sales Representative/ Oracle Support to get help in determining size of the system. They will provide you a sizing questionarre and on the basis of that they may suggest sizing as well (Oracle has an internal tool for proposing sizing)
    Regards,
    Anuj

  • Conditional Processing: Request is Contained within Expression 1

    I believe I have found a bug with the Process Conditional Processing logic, where "Request is Contained within Expression 1" is used.
    Here are three of the buttons that I have on my page:
    GET_RES_CIVIC_ADDR - This button is displayed among the Region Items (Region 2)
    CRE_RES_CIVIC_ADDR - This button is displayed among the Region Items (Region 2)
    ADD - Automatically created as part of a Tabular Form (Region 3 - Updateable Report).
    I have a process that is conditional on either GET_RES_CIVIC_ADDR or CRE_RES_CIVIC_ADDR being run (meaning the Process has its "Conditional Processing" "Condition Type" set to "Request Is Contained within Expression 1" and where "Expression 1" is set to "GET_RES_CIVIC_ADDR,CRE_RES_CIVIC_ADDR" (without the quotes).
    The problem I have encountered is that this Conditional Process also gets run if I submit the ADD Button. The reason being is that the word "ADD" is contained within the Expression 1 string "GET_RES_CIVIC_ADDR,CRE_RES_CIVIC_ADDR".
    Note that if I change the REQUEST value for these two Item Level Buttons to names that do not contain the word ADD, the problem is fixed.
    Is this a known bug? Or do I have to edit the value of Expression 1, so that each Button Name/Request Value is enclosed in quotes or the like?

    Scott,
    I was under the impression that the values in Expression 1 would be a list of comma delimited values (e.g. A,B,C and not ABC) and would be evaluated individually. However, you are correct. It is being evaluated as advertised.
    A note for others that have this problem - the evaluation of :REQUEST is Case Sensitive, so if the Item Level Button had been named 'Get_Res_Civic_Addr' (using Camel Case) instead of 'GET_RES_CIVIC_ADDR', (Upper Case), there would not have been a match with the 'ADD' Request and therefore the After-Submit process would not have been run by the ADD button.
    To prevent this in the future, we are going to standarise using the PL/SQL Expression Condition (checking :REQUEST) and also ensure that our Item Level Buttons "Request Value" is Camel Case (just an extra precaution).

  • Question on Process Based EBS

    Hi,
    Does the process based EBS always need to call an EBF or it can call a Provider ABCS? would appreciate your inputs.
    Thanks/Steve

    My use case is, need to develop a custom EBS to handle some requirements between Siebel and OTM. Since the new operations are not CRUD, the custom EBS would be a process based EBS(Pls correct me if i am wrong)
    when developing the Provider ABCS to interact with OTM, i am kind of confused whether to call it a Provider ABCS or EBF..In the provider services, just need to make couple of calls to OTM and send response back to Siebel.
    To me there is not much orchestration in the provider service, i can name it as ProviderABCS but i read some where that Process Based EBS should always call EBF, so i am kind of focused. Please let me know your thoughts.

  • Create a Rules Language process which add a XML payload

    how to create a Rules Language process which add a XML payload in to the ICEPAYLOADEXT table??

    Take a look at this post: How to send a request from MDM 1.6.1 to CC&B using JMS servers?

  • Revenue & COGS recognition process based on Proof Of Deliver (POD) & Inco-T

    Hello Experts,
    I have a senario and i am trying to find out the proper solution for my client, hope you people can help me in this.
    Requirement :     Revenue & COGS recognition process based on Proof Of Deliver (POD) & Inco-Terms
    Steps     :At present system is posting COGS at the time of Out Bound delivery and Revenue at the time of commercial invoice.      
    (1)     Current Requirement:
    If the Inco-Term is other than Ex-works then both COGS and revenue to be posted(Recognized) based on the POD.
    If the Inco-Term is Ex-works then system should post COGS at the time of Out Bound delivery and Revenue postings to happen once Commercial Invoice is Authorized.
      (2)  _Following are the Postings to happen in a sequential way if the Inco-Term is other than Ex-work
       a. When Out Bound delivery is authorized then system should operate the Stock in transit for customers instead of
           COGS account as mentioned below.
                     Dr. Stock in Transit-Customers
                     Cr. Respective Stock Account
    Note: We understood that this provision not available in SAP at this point of time and this entry should not considered in costing for COPA
                     b. Based on the Out Bound delivery a provisional invoice(without postings) has to be generated and Excise duty entry has to be posted as mentioned below
                     Dr. Duty Paid Account
                     Cr. 23A/23C/PLA
                     C. Once the POD is received and recorded in system then the respective Out Bound delivery 
                     related accounting entry has to be reversed as mentioned below.
                     Dr.COGS
                     Cr. Stock in Transit-Customers
    Note: This entry should be considered in costing for COPA
                   D. Once the outbound delivery (above) is reversed then the system should generate the Sales
         Invoice based on POD as the entries mentioned below
                     Dr. Customer
                     Cr. Revenue & Payable accounts
    Note: We understood that this provision is available in SAP
    Thanks
    Rahul

    Hello Karl,
    The Best Practices document in the Note 1172799 provides details regarding all the SAP supported processes for RR functionality.
    Regards,
    Raghavendra

  • Conditional Processing !?

    I execute following comparable SQL statements by a "Automated Row Fetch" process:
    1.) SELECT * from bla where name = 'ok'
    2.) SELECT * from bla where name = 'not found'
    Query 1 is ok: -)
    Query 2: I get the error "ORA-01403: No data found "
    I would like to use the same side (with form region) with both queries.
    How can i do this? Can I affect with "Conditional Processing"? Or completely differently?
    Cliff

    Well, this really isn't a helpful response.
    For example, if you chose a condition type of PL/SQL Function Body Returning a Boolean, I'm not sure why you would expect your condition to succeed. It's syntactically inaccurate.
    It's really unclear what you're trying to do, but let me try and guess.
    If you want the fetch to succeed if there is a value of 'ok' in column name, then I would do a condition type of PL/SQL Function Body Returning a Boolean, with the condition expression of:
    for c1 in (select null from bla where name = 'ok') loop
        return true;
    end loop;
    return false;Joel

  • Conditional display based on Page Template

    I'd like to make some conditional display based on Page temlate value (definition). Example:
    return page_template='TABS';With such an feature it will be easy to exclude some elements defined on "Page 0" on some pages. I know that this could be done by enumerating page_id's...but in this way it will be much flexible...
    Is there such a feature? Will it be ever possible?

    A more flexible way (IMHO) to do this sort of thing would be to define onload application-level computations that set a application item to either SHOW or HIDE depending on the conditions you need. Then make the Page 0 components conditional upon this application item's value.

  • Condition check (based on sender file name) at receiver determination step

    Hi,
    My scenario is File to AS2 (Sender side file adapter and receiver side AS2 adapter)
    We have 5 customers, but the source location is same to pick the files, Here we are not using any ESR objects.
    Based on the source file name PI need to determine to whoom this file need to send at receiver determination step
    Craeted objects
    1 Sender CC,
    1 Sender agreement,
    1 Receiver determination
    5 Interface determinations
    5 Receiver agreements
    5 Receiver CCs.
    Could you please provide me your valuable inputs.
    Thanks
    Ramesh

    Hi Venkataramesh,
    I understand your scenario as, picking files (different file naming standard for different target customer) from one source folder. Based on file name, that payload should be sent to corresponding target customer. You have mentioned u201CHere we are not using any ESR objectsu201D. I can see two reasons for this decision
    1. PI is used to route the messages, i.e., no need to transform the payload. OR
    2. Files can binary files like PDF, ZIP, JPG, GIFu2026
    Now I can see two possible solutions
    1.     Simple solution, as proposed by u201CPrabhu Rajesh Janardananu201D, make it into 5 different scenarios  (5 sender channels).
    2.     Bit complex solution, only one sender channel, using extended receiver determination
    Step 1:- In Sender File channel check u201CAdapter u2013 Specific Message Adapteru201D in Advanced tab. File Name should be checked.
    Step 2:- In Receiver Determination, Select Type of Receiver Determination as u201CExtendedu201D. http://help.sap.com/saphelp_nwpi711/helpdata/en/48/ce2a423a8e5430e10000000a42189b/frameset.htm
    Step 3:- Do a Graphical Mapping (use it Operation Mapping in Receiver Determination).
    Step 4:-
    Source and target of graphical mapping will be same (below), because you donu2019t want to access input payload (it can be XML, flat file, JGP, GIF and you donu2019t have its structure).
    <Receivers>
       <Receiver>
          <Party agency="" scheme=""></Party>
          <Service></Service>
       </Receiver>
    </Receivers>
    Step 5:- Write a UDF in Graphical mapping as below. http://help.sap.com/saphelp_nwpi71/helpdata/EN/43/03612cdecc6e76e10000000a422035/frameset.htm Pay attention to method declaration
    public String Determine_Receiver( Container container) throws StreamTransformationException
    DynamicConfiguration conf = (DynamicConfiguration) container.getTransformationParameters().get(StreamTransformationConstants.DYNAMIC_CONFIGURATION);
    DynamicConfigurationKey key = DynamicConfigurationKey.create(u201Chttp://sap.com/xi/XI/System/Fileu201D,u201CFileNameu201D);
    String valueOld = conf.get(key);
    //Put your logic here
    if (valueOld.equal(u201Cuser1u201D)) {
    return u201Cuser1u201D;}
    if (valueOld.equal(u201Cuser2u201D)) {
    return u201Cuser2u201D;}
    if (valueOld.equal(u201Cuser3u201D)) {
    return u201Cuser3u201D;}
    Step 6: Now use this UDF to map to u201CReceiveru201D and u201C Serviceu201D.
    This solution need more fine tuning.
    Regards,
    Raghu_Vamsee
    Edited by: Raghu Vamsee on Jan 8, 2011 5:56 PM

  • Conditional button based on client's IP address

    i know this is not secured, but ....
    I have little app with no login. It is a documentation for our project, it uses a tree, .... bla bla bla
    nobody can change anything (it is really just a few pages of documentation). I want one, just one, user to be able to edit one form for next few weeks. My idea was to add "SAVE" button and make it conditional based on his IP address or computer name. Is there a way how to do this?
    thanks
    jiri

    Just make the button conditional upon the following PL/SQL expression
    owa_util.get_cgi_env('REMOTE_ADDR')='xx.xx.xx.xx'Best practices: You should create a named authorization scheme with that code (returns true/false to allow/deny access) and attach that scheme to the button and any After-Submit processes that actually does the save.
    Hope this helps.

  • Help by setting up a conditional process in regards to a collection, error

    I have a simple application containing 2 pages:
    page 1: catalog
    page 2: order overview page
    on page 1 is a report with a list of articles, one column in the report is a link which branches to page 2 filling in a bindvariable. Sofar, not a problem. When the user first comes on page 2, a collection must be made, so I made a process called: make collection.
    Code
    HTMLDB_COLLECTION.CREATE_COLLECTION(
    p_collection_name => 'SHOPPINGCART' );
    commit;
    This works, but the user will visit this page more than once, and he will be branching to this page based on several buttons also on page 2, the collection only needs to be made once. So how do I make in this case the process conditional, I already had a look at:
    Verifying Whether a Collection Exists
    Use COLLECTION_EXISTS to determine if a collection exists.
    HTMLDB_COLLECTION.COLLECTION_EXISTS (
    p_collection_name => collection name );
    Which is a boolean, thank you Jes for helping me out there, and can have a value of:
    IN/OUT
    Tried a bunch of things didn't manage to get it to work. Now it fires everytime, and delivers an error stating the collection already exists. Please advice how to construct the conditional part of the process, the function as mentioned above HTMLDB_COLLECTION.COLLECTION_EXISTS should be helpful, getting nowhere, read the documentation abot the conditional parts, still no luck. Please help
    Anyone?
    Message was edited by:
    Peter

    Hi Pete,
    Change your process to something like -
    DECLARE
      bExists BOOLEAN;
    BEGIN
      bExists := HTMLDB_COLLECTION.COLLECTION_EXISTS(p_collection_name => 'SHOPPINGCART');
      IF NOT(bExists) THEN
        HTMLDB_COLLECTION.CREATE_COLLECTION(p_collection_name => 'SHOPPINGCART');
      END IF;
    END;

Maybe you are looking for

  • DVD Player no longer plays a VIDEO_TS folder.

    I used to be able to play a VIDEO_TS folder that I had ripped from a DVD into a hard disk. There is still "Open DVD Media" on the File menu, but when I select a VIDEO_TS folder it pops up an error window: "There was a problem opening the media. The m

  • Error-- Referencing classes from project 1 in project 2 using libraries option

    Using JDev 9.0.3 I'm struggling with an error that's occuring that I know should not be... I have two projects (SessionUtils & TradingSumStruts). SessionUtils has 4 java files all of which have a package name of: com.arca.sessionutils. TradingSumStru

  • Command line feature in File Adapter

    Hi  Experts,       Can any one please explain how to use command line feature present in FTP.       Thanks in advance for you help!       Regards,       Ravi Kiran L

  • Failure using {CALL } syntax & passing string params w/ # (hash)

    We are experiencing a problem calling functions using the {CALL } syntax and passing string parameters that contain # (hash) symbols. Apparently, something interprets the # inside the string literal and fails the call. We use this syntax with procedu

  • BPEL with EBS?

    Hi all, have any references with Bprocess and integration with E business suite? What samples and demo will be implemented using bpel, and any references will be very helpfull. Thanks in advance Gordan