How to dynamically determine Receivers within BPM

I’m trying to design a way to determine my receivers within my BPM process during runtime.   My Scenario is as follows:
SAP IDOC
    V
  XI
             XI uses JAVA Mapping MT1 to determine vendors and if customer receives PIDX
                         JAVA Mapping MT2 to creates the PIDX output file if required
  V
SENDs to required Vendor (PIDX if required otherwise email)
My problem is how to dynamically determine the appropriate receiving vendor for my PIDX.
I can not use the condition editor on the standard Receiver Determination because the output message (PIDX) doesn't have specific enough information to determine the vendor.
Other than the customer number there are no other values and we don't want to use customer number because each vendor can have multiple customer numbers (hundreds).
I've tried various attempts but none seem to work.  This could also be because I have limited knowledge of BPMs and this is my first complex development.  Below are the different attempts I've made at dynamically determining the receiver.  Any input would be appreciated.
Receiver Scenario 1 
  I developed an interface mapping with MT1 as input and the SAP Receiver Determination as output.  The problem is for me to use this, the interface mapping had to reference the PIDX output (MT2 instead of MT1) which has no data that I can use to determine the receiver.
Receiver Scenario 2
I added a receiver step right before my send step and used the receiver list.  This appears to send the PIDX to everyone in the list and there is no way to evaluate or eliminate a name from the list. 
Receiver Scenario 3
I created a context object in the Integration Builder and assigned it to a field in MT1.  I then added a switch step with a branch for each vendor.  Within each specific branch there is a Send step that has the context object name I created in the "Send Context" field.  However, on the configuration side I’m unable to access the context object which I created on the design side.  Whenever I open the condition editor and select the radiobutton for "Context Object" the list  does not include the context object I created in the Integration Builder.

Hi,
Try using the enhaced receiver determination concept.
Maybe based on certain field values you can write a UDF which calculates the receiver.
Try this Blog out
Link : [
http://help.sap.com/saphelp_nw70/helpdata/en/43/a5f2066340332de10000000a11466f/frameset.htm]
Regards,
Abhishek
Award if helpful.

Similar Messages

  • How does Receiver Determination Step in BPM work?

    Hi,
    I'm still in trouble with the Receiver determination step in the BPM...
    Normally, when you use the send step, it sends the message in the flow context. Am I right, when I suppose, that when you put the receiver determination step before this send step, the send step sends the message in the context of the receiver determination - that means: if in the Integration Directory, there is receiver determination (with some conditions) and these are matched with the message in the send step, the send step sends it into the receiver, that is defined for the condition and not in the flow context... Right?
    Please, write me just your experiences and not links to the documentation. I read it all, but... :O(
    Thanx 4 your help, Peter

    Hi Peter,
    The receiver determination step is used to get a list of receivers for a subsequent send step.It makes a call to the receiver determination you configured in the Integration Directory and returns the receiver list.
    Here you specify the send context and the multiline container element for the receiver list.
    The send context is a string.The send context can have any string value and depending upon the condition in recvr determination you can route to multiple receivers.
    Regards
    Priyanka

  • XI - Dynamically Determine System Details in User Functions

    Hello.
    Does anybody know how to dynamically determine the logon information for the statement JCO.Client mConnection = JCO.createClient() from a user defined function in XI? 
    Within a mapping I have written a user defined function to call a function module on ECC but as the system details are 'hard-coded' the incorrect system is called once the interface is promoted from the DEV system. I am not able to modify the user function code for each system as we transport the interfaces between systems which are locked and as such code the builder objects cannot be modified .  I desperately need a method of determining which logon details should be used and I would prefer the solution to be within the user defined function.
    User defined function code:
    JCO.Repository mRepository;
    // Change the logon information to your own system/user
        JCO.Client mConnection = JCO.createClient(
                "300",         // SAP client   
                "pi_jco_rfc",        // userid
                "ecd4adrt",       // password
                "EN",          // language
                "adrp560dev1",        // host name
                "10" );        // system number                     
    // connect to SAP
    mConnection.connect();
    // create repository
    mRepository = new JCO.Repository( "SAPLookup", mConnection );
    // Create function
    JCO.Function function = null;
    IFunctionTemplate ft = mRepository.getFunctionTemplate("ZPI_DETERMINE_STORE_FROM_SITE");
    function = ft.getFunction();
    // Obtain parameter list for function
    JCO.ParameterList input = function.getImportParameterList();
    // Pass function parameters
    input.setValue( site[0] , "IM_WERKS" );
    mConnection.execute( function );
    String ret = function.getExportParameterList().getString( "EX_VLFKZ" );      
    mConnection.disconnect();
    result.addValue(ret);
    Any ideas gratefully accepted.

    Darren,
    Why are you using JCOs directly? It is not advisable to do so. You can/have to use the RFC Lookup API to achieve this.
    Have a look at Michal's article about this.
    https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/a03e7b02-eea4-2910-089f-8214c6d1b439
    Regards,
    Jai Shankar

  • Dynamic Determination of Logical System- Transaction Launcher

    Hi Friends,
    Need your suggestions and inputs on how to dynamically determine the logical system for the transaction launcher.
    Our system landscape is like this.
    We have one CRM connected to mulitple back end ECC Boxes. Currently, we have created separate TL's fo VA01 ( One each for each back end application ) and provided the same in logical link and controlled the same via business role.
    For eg: BROLE1 - LLINK1  having (TL VA01) pointing to ECC System1
    BROLE2 - LLINK2  having (TL VA01) pointing to ECC System2
    BROLE3 - LLINK3  having (TL VA01) pointing to ECC System3
    The above procedure is working fine. But what we are trying to do is, when the end user clicks on the TL link in WEB UI, Based on the assigned business role, it should dynamically determine the back end system and open the VA01 Screen in that system.
    I have activated indicator multiple systems in the customizing of mapped logical systems.
    In debugging mode, i have tried changing the LOGSYS value @ run time in the handler class.
    Any pointers on this would be of great help.
    Thanks,
    Madhu

    Hi,
    Try this..
    To maintain RFC destination in each business role, there is one functional profile  "ERP_SALES_ORDER" where in you can maintain respective rfc destination.
    Create z-functional profile's for "ERP_SALES_ORDER" and maintain corresponding rfc destination, later assign these erp sales order function profiles in respective business roles trxn (CRMC_UI_PROFILE).
    you can use the below statement to fetch rfc destination whcih assigned to business role via functional profile.
      If gv_rfc is INITIAL.
        gv_rfc = CL_CRM_IC_ERP_SERVICE=>GS_ERPPROF-RFCDEST.
      ENDIF.
    Hope this helps.
    Cheers,
    Sumit Mittal

  • How can I determine what sites are being referenced within Central Admin Upgrade and Migration Manage Databases Upgrade Status?

    When I go to Central Admin > Upgrade and Migration  > Manage Databases Upgrade Status, I have 2 content databases which have the status:
    Database is up to date, but some sites are not completely upgraded.
    How can I determine which sites are not completely upgraded?

    Manage Databases Upgrade Status will provide you all active and offline DB details, you can get same result
    using below PowerShell cmdlet.
    Get-SPDatabase and Get-SPContentDatabase will provide all active database/Content DB in Farm which include Service application db, central admin DB.
    Get-SPDatabase | Format-Table Name, ID
    Coming back to your question, if you find that there are some site are not completely upgraded then run below command and understand the cause if issue on specific DB.
    Test-SPContentDatabase WSS_ContentDB_Name
    If you find any missing file issue in DB then resolve these issue to upgrade content database.
    (verify all customizations referenced within the content database are also installed in the web application. This cmdlet can be issued
    against a content database currently attached to the farm, or a content database that is not connected to the farm )
    Use the Upgrade-SPContentDatabase cmdlet
    to resume a failed database upgrade or begin a build-to-build database upgrade against a SharePoint content database
    Upgrade-SPContentDatabase WSS_Content
    reference:
    http://technet.microsoft.com/en-us/library/ff607813(v=office.15).aspx
    http://technet.microsoft.com/en-us/library/ff607941(v=office.15).aspx
    If my contribution helps you, please click Mark As Answer on that post and
    Vote as Helpful
    Thanks, ShankarSingh(MCP)

  • How can I determine what dns server the wifi client use within airport

    How can I determine what dns server the wifi client use within airport
    I want to use dns servers other then the one that airport extreme is using. For example I got the 172.16.1.1 (the default gateway - airport extreme), but I want to use the office dns servers, that are in a 10.x.x.x range.
    Is there a possibility?
    Thanks and happy eastern

    The Airport Extreme uses the DNS servers assigned by the network that it connects to. Is you Airport Extreme on the 10.x.x.x network? if it is then you are already using the 10.x.x.x DNS servers. Check your Airport Extreme with the Airport Utility and you will see in the Internet tab, the DNS servers used. The devices connecting to the Airport Extreme are assigned a DNS address of the Airport Extremes IP, In your case 172.16.1.1 but all DNS searches and resolution are done with the DNS servers you see in the Airport Extreme.
    If you want to use some other DNS then you can override in the Airport Extreme which will be used by all devices connecting too the Airport Extreme, Or you can edit the DNS address in each devices wireless settings.

  • How do we determine if a Human Task instance in BPM Workspace is open?

    Hi All,
    An interesting one. How do we programatically determine if a BPM Workspace instance is opened for processing? I would like to ensure that a form is opened only by one user at a time, and any attempt to open the form concurrently will result in the form presenting an error message and then closing itself.
    Any ideas?
    I am posting this on the SOA form as well, as it is the BPM Workspace. Kindly overlook if this is inappropriate.
    JDev : 11g.
    Thank you.

    posting it here will help you for sure
    Business Process Management Suite
    SOA Suite

  • How can you determine the absolute path to a dynamically created NetStream object?

    We are trying to implement video captioning with a freeware component, ccforflash. This requires us to provide an absolute or relative path  to our NetStream object. How can we determine this path in Flash CS5 AS3?
    From the CCforFlashCS5 documentation:
    "2. Object name and path
    Type the name and path.  This is the instance name of the object with which CCforFlashAS3 will synchronize. It must be spelled correctly, since CCforFlashAS3 will query the object with this name for timing information in order to synchronize the captions. The path must also be included; either relative to the CCforFlashAS3 component (i.e. this.parent) or the absolute path from the main level of the movie (root)."

    It would be easier if the NetStream object was created on an easily identifiable place on the timeline. This player has an MVC architecture. The NetStream object is created in a subclass to Model class, which is itself a subclass of the EventDispatcher object. The View class access it via an interface.
    As you can guess, it's not that straightforward to determine where the NetStream object is located on the timeline. This is compounded by the fact that the NetStream object does not have a name property.
    I've tried methods like these, but they only work for the DisplayObject class:
    public static function displayObjectPath( avDisplayObject : DisplayObject ) :String
    var lvPath:String = "";
    do
    if( avDisplayObject.name ) {
    // var obj_name:String = (avDisplayObject.name == 'root1') ? 'root' : avDisplayObject.name;
    if (avDisplayObject.name != 'root1') {
    lvPath = avDisplayObject.name
       + ( lvPath == "" ? "" : "." + lvPath );
    } else {
    trace("displayObjectPath() NO NAME avDisplayObject="+avDisplayObject);
    } while( avDisplayObject = avDisplayObject.parent );
    return lvPath;
    } // displayObjectPath
    private  function showChildren(d:DisplayObjectContainer):void {
    trace("showChildren()");
    if (d.numChildren>0) {
    for (var c:Number = 0; c < d.numChildren; c++) {
    trace("showChildren c=",c," name=",d.getChildAt(c).name);

  • How to determine Chord and BPM

    Hi everyone,
    I'm a garage band beginner. I've successfully recorded 2 songs with loops, harmonies, and vocal tracks - even the occasional editing of a loop but I have difficulty when I start up a new project trying to determine chord and bpm - well, mostly bpm.
    There is a song I want to cover and customize myself. Is there anything in garage band or anywhere on the web that anyone knows of where I can play a song and it determines the bpms?
    Thanks in advance for your help.

    Thanks HangTime! What do I multiply it by?
    Multiply it by the seconds I counted?
    This is going to help TONS going forward.
    Message was edited by: Macthang

  • How many Receiver determination in File to SOAP scenario

    Hi,
    I am trying a File -SOAP-File scenario, where file will be send to PI asynchronous. BPM is configured to receive the file and
    call the web services and get the response (Synchronous call) .After that BPM send the file asynchronous to File via FTP .
    It is basically asynchronous/ Synchronous bridge scenario.
    To do this I have  have configured the BPM  & created 3 Communication channel . 1 sender (File) & 2 receivers ( SOAP & File)
    But i got confused in Receiver determination. How many Receiver determinations do we require in this step?  2 or 3. If 3 how they will look like. I believe Interface determination is same as Receiver determination. I am suing Business System to send & recv the file.
    Points will be rewarded for suitable answer.
    Thanks

    hi,
    You require 3 receiver determinations.
    one from File to BPM(XI)..
    another from BPM to SOAP and other from SOAP to FILE.
    This is exactly the same scenario.
    RFC Scenario using BPM --Starter Kit
    Thanks,
    Vijaya

  • Use of Receiver determination step in BPM

    Hi,
    I am not clear about the exact use of Receiver determination step in BPM. From my understanding, it is used for synchronous communication with many receivers configured, for eg. Multicast etc. Can anybody explain the use of receiver determination with any specific requirement example.
    Regards,
    Santosh

    HI,
    The usage of Receiver Determination depends on how you have designed your BPM. You can have the mapping getting executed in your BPM itself using a TRANSFORM step or you can do it in your Inteface Determination if you are not doing it in your BPM.
    If you do the mapping inside the BPM using Transformation step, then you need to send the Message i.e. Mapped message . In this case, your Interface determination will only determine the Receiver Interface, and it will not execute the interface mapping . (if you are not providing the Interface mapping in the Interface determination).
    Example is given here-
    http://help.sap.com/saphelp_nw2004s/helpdata/en/14/d5283fd0ca8443e10000000a114084/content.htm
    Thanks
    Swarup

  • Dynamic determination of IDOC

    Hi,
    I have a scenario wherein based on a particular KeyField, I need to dynamically determine the IDOC.  I haven't used BPM before and I don't know whether this scenario is feasible using BPM.
    My approach is creating a data type for the source which will have common fields of both the IDOCs.  This data type will hold the data sent by the sender system.  Thereafter, I would create 2 message interfaces for each IDOC.  Subsequent Message Mapping and Interface Mapping will also be done.  In BPM based on the KeyField, I will determine the Message Interface dynamically and post it to the target system.
    Kindly advice whether the above approach is right.  Is this scenario possible without using BPM.  If so, kindly suggest how to proceed.
    Thanks in advance.
    Bala

    Hi Kumar,
    Is there any possibilites of coming both the idoc data ? If so, you can do as following.
    As you are going to execute 1:N mapping, it is required to have BPM here. (and one more reason is Idoc adapter is not a part of J2EE engine.)
    <i>Is this scenario possible without using BPM</i>
    >>>If it is not of above case, then you can make use of conditional Interface determination , you can try without BPM
    Hope this helps,
    Regards,
    Moorthy

  • How create  dynamic URL for every row  shown in the report?

    Hi,
    Iam new to this Application. I created one interactive report to find the number of bugs logged for every product and its sub component for past one year. The report will look like below structure in the application.
    Product Subcomponent Total
    P1 S1 10
    P2 S2 4
    P2 S21 15
    Now i want to pick the value of Prouct and sub component for every row dynamiaclly and want to generate the URL with the conditions and make it as hyperlink for the Total Column.
    Iam able to make hyperlink for the Total column using the edit options for the total attribute, but it is opening the same page for all the rows in the total column. I want to generate dynamic URL by picking the value prodcut and sub componenet dynamically from the report for every row and want to make it as hayperlink for every row individually.
    Please tell me how to do this?
    Please revert back if you are not clear. Appericiate for your quick help.

    Hello <unknown user>,
    So you already set the Column Link attributes for your Total column. Should all links go to the same page, but with different parameters (ProductID, SubcompID)? Or to another page? And how can you determine that page?
    Assuming you'll go to a sort of detail page or form:
    Target = [Page in this app]
    Page = <your target page no>
    Item1 = <ProductID field in target page>
    Value = #PRODUCTID#
    Item2 = <SubcompID field in target page>
    Value = #SUNCOMPID#
    (you can use the ' flashlight' for getting the correct values)
    Greetings,
    Roel
    http://roelhartman.blogspot.com/
    You can reward this reply by marking it as either Helpful or Correct ;-)

  • How Can I Determine the Size of the 'My Documents' Folder for every user on a local machine using VBScript?

    Hello,
    I am at my wits end into this. Either I am doing it the wrong way or it is not possible.
    Let me explain. I need a vb script for the following scenario:
    1. The script is to run on multiple Windows 7 machines (32-Bit & 64-Bit alike).
    2. These are shared workstation i.e. different users login to these machines from time to time.
    3. The objective of this script is to traverse through each User Profile folder and get the size of the 'My Documents' folder within each User Profile folder. This information is to be written to a
    .CSV file located at C:\Temp directory on the machine.
    4. This script would be pushed to all workstations from SCCM. It would be configured to execute with
    System Rights
    I tried the script detailed at:
    http://blogs.technet.com/b/heyscriptingguy/archive/2005/03/31/how-can-i-determine-the-size-of-the-my-documents-folder.aspx 
    Const MY_DOCUMENTS = &H5&
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(MY_DOCUMENTS)
    Set objFolderItem = objFolder.Self
    strPath = objFolderItem.Path
    Set objFolder = objFSO.GetFolder(strPath)
    Wscript.Echo objFolder.Size
    The Wscript.Echo objFolder.Size command in the script at the above mentioned link returned the value as
    '0' (zero) for the current logged on user. Although the actual size was like 30 MB or so.
    I then tried the script at:
    http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_27869829.html
    This script returns the correct value but only for the current logged-on user.
    Const blnShowErrors = False
    ' Set up filesystem object for usage
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("WScript.Shell")
    ' Display desired folder sizes
    Wscript.Echo "MyDocuments : " & FormatSize(FindFiles(objFSO.GetFolder(objShell.SpecialFolders("MyDocuments"))))
    ' Recursively tally the size of all files under a folder
    ' Protect against folders or files that are not accessible
    Function FindFiles(objFolder)
    On Error Resume Next
    ' List files
    For Each objFile In objFolder.Files
    On Error Resume Next
    If Err.Number <> 0 Then ShowError "FindFiles:01", objFolder.Path
    On Error Resume Next
    FindFiles = FindFiles + objFile.Size
    If Err.Number <> 0 Then ShowError "FindFiles:02", objFile.Path
    Next
    If Err.Number = 0 Then
    ' Recursively drill down into subfolder
    For Each objSubFolder In objFolder.SubFolders
    On Error Resume Next
    If Err.Number <> 0 Then ShowError "FindFiles:04", objFolder.Path
    FindFiles = FindFiles + FindFiles(objSubFolder)
    If Err.Number <> 0 Then ShowError "FindFiles:05", objSubFolder.Path
    Next
    Else
    ShowError "FindFiles:03", objFolder.Path
    End If
    End Function
    ' Function to format a number into typical size scales
    Function FormatSize(iSize)
    aLabel = Array("bytes", "KB", "MB", "GB", "TB")
    For i = 0 to 4
    If iSize > 1024 Then iSize = iSize / 1024 Else Exit For End If
    Next
    FormatSize = Round(iSize, 2) & " " & aLabel(i)
    End Function
    Sub ShowError(strLocation, strMessage)
    If blnShowErrors Then
    WScript.StdErr.WriteLine "==> ERROR at [" & strLocation & "]"
    WScript.StdErr.WriteLine " Number:[" & Err.Number & "], Source:[" & Err.Source & "], Desc:[" & Err.Description & "]"
    WScript.StdErr.WriteLine " " & strMessage
    Err.Clear
    End If
    End Sub
    The only part pending, is to achieve this for the 'My Documents' folder within each User Profile folder.
    Is this possible?
    Please help.

    Here are a bunch of scripts to get folder size under all circumstances.  Take your pick.
    https://gallery.technet.microsoft.com/scriptcenter/site/search?query=get%20folder%20size&f%5B0%5D.Value=get%20folder%20size&f%5B0%5D.Type=SearchText&ac=2
    ¯\_(ツ)_/¯

  • Is there a way to dynamically determine the number of out parameters for a server side procedure?

    Hi,
    Below is a helper method used for calling a server-side function which loops through the inbound bindVars parameter to populate the function's IN parameters. Is there a way to dynamically determine the IN/OUT parameters based on the procedure name in the stmt parameter? No members of the CallableStatement class seemed promising, but the getParameterMetaData() method in the PreparedStatement class seemed like it could be helpful lead. However, I have not found any detailed descriptions (yet) of how to use it.
    protected Object callStoredFunction(int sqlReturnType, String stmt,
      Object[] bindVars) {
      CallableStatement st = null;
      try {
      // 1. Create a JDBC CallabledStatement 
      st = getDBTransaction().createCallableStatement(
      "begin ? := "+stmt+";end;",0);
      // 2. Register the first bind variable for the return value
      st.registerOutParameter(1, sqlReturnType);
      if (bindVars != null) {
      // 3. Loop over values for the bind variables passed in, if any
      for (int z = 0; z < bindVars.length; z++) {
      // 4. Set the value of user-supplied bind vars in the stmt
      st.setObject(z + 2, bindVars[z]);
      // 5. Set the value of user-supplied bind vars in the stmt
      st.executeUpdate();
      // 6. Return the value of the first bind variable
      return st.getObject(1);
      catch (SQLException e) {
      throw new JboException(e);
      finally {
      if (st != null) {
      try {
      // 7. Close the statement
      st.close();
      catch (SQLException e) {}
    James

    The PreparedStatement.getParameterMetaData() object is exactly what you need for this task.
    Once you have the ParameterMetaData you can ask it how many parameters are present and which mode they are. The parameters are numbered from 1 to n and you can use ParameterMetaData.getParameterMode(1); to get the mode of the 1st parameter. The modes are defined as static values in the ParameterMetaData object. Check out the doc at http://docs.oracle.com/javase/7/docs/api/java/sql/ParameterMetaData.html
    Timo

Maybe you are looking for