Returning multiple items

I am working on a script that does extensive logging, both to the console and to a log file. For a number of reasons I have adopted a logging mechanism of adding to a logging array and then periodically pushing the array to the logging function for processing.
Now I have a function that when successful will return a string. But there are a number of places where an error could happen, and I want to evaluate all of them and return all failures, rather than have users need to fix one thing, run the script, find
a new thing and fix it, run the script... So, when there is an error I need to return an array, which I can then append to the array in the calling function. And when successful I return the string.
My question is, am I better off returning both the string and the array, which I think I read can be done. Or returning one or the other, and the calling function has to test the returned value for type to determine if the call was successful or not? Or
is there maybe an even better approach? My other thought, which I had as I typed, is to return an object, with a string member and an array member. Curious if I am on the right track with that late night thought.
Thanks!

I agree with Al, that you have a lot of questions and we really aren't able to give you advice on how to structure your script.
That being said, this is something I've done for long script logging.  I'm sure there are better ways to do it, and some or none of this may help you or be useful/meaningful/appropriate for your project, but it will give you a an object with error and
success that you can sort and evaluate as you see fit.  
In some ways this is probably reinventing the wheel, YMMV.  It's been useful to me.
$FileName = $MyInvocation.MyCommand.Name
$LogFile = ".\$($FileName -replace '\.ps1')_Log.csv"
If (Test-Path $LogFile){
$i=0
While (Test-Path "$($LogFile -replace '\.csv')_v$i.log") {$i++}
Rename-Item $LogFile "$($LogFile -replace '\.csv')_v$i.csv"
$LogObject = @{}
$Error.clear()
Function Log-Info ($LogType, $LogData) {
$LogElement = New-Object PSObject -property @{Type=$LogType;Data=$LogData;Time=((Get-Date).ToString())}
$LogElement | Export-CSV $LogFile -Append
$LogObject += $LogElement
<#
Do Something {
Check if something happened
If (successful) { Log-Info "Success" "Do Something Succeded" }
Else (failed/Error) { Log-Info "Error" "Do Something didn't" }
#>
<#
Try {
Do something else
Log-Info "Success" "Something else succeded"
} Catch {
Log-Info "Error" "Something else failed"
#>
# catch anything I didn't plan for
if ($Error.count -ne 0) {
for ($i=$Error.Count-1; $i -ge 0;$i--) {
Log-Info "Error" @($Error[$i].Exception.Message)
I hope this post has helped!

Similar Messages

  • Return Multiple Items with One Lookup Value

    Hi there,
    Within my data set there are multiple values that I would like to return into a different table.
    For example:
    In the "players from australia" table I would like to search the main data set for the "AUS" tag in column B and then automatically display the names of those players.
    There was something similar posted a few days ago Search sheet and return associated values for multiple matches and I tried to apply those formulas to my data but it didn't work...perhaps slightly different application of the function.
    fyi: the "category" table is simply to add up the number of players from each country and return a numerical value, as opposed to the names. I also use it as the cell from which to determine which value to search and display, i.e. A2 for the AUS players to be displayed in the empty table.
    Any help would be greatly appreciated!!
    Ed.

    You could try something like this:
    The formula in the Index column, copied down:
         =B2&COUNTIF(B$1:B2,B2)
    The formula in A2 of the Players From table, copied down and right:
        =INDEX(Table 1::$A,MATCH(A$1&ROW()−1,Table 1::$D,0),)
    To suppress the display of the red warning triangles, you can wrap that in IFERROR, like this:
         =IFERROR(INDEX(Table 1::$A,MATCH(A$1&ROW()−1,Table 1::$D,0),),"")
    This takes the value in row 1, appends the row number it's on less 1, and uses MATCH to find what row contains that value in the Index column of the other table. That row number is fed to INDEX, which returns the value from column A.
    SG

  • Can a method return multiple items

    Can a method return more than one thing?
    I want to have a method return a boolean and a String. My method is saying if something is right or wrong, then its saying the reason why.
    help, please.
    Thanx

    Afternoon_Delight wrote:
    My question is:
    Is there a way so that it can be more like this:
    public boolean, String checkValidity (){
    To expand on the previous posts, one way (not saying it's the best one!) is to create an object that combines the information that you want returned:
    public class MyValid
      private boolean valid;
      private String text;
      public MyValid(boolean valid, String text)
        this.valid = valid;
        this.text = text;
      public boolean isValid()
        return valid;
      public String getText()
        return text;
    class DoFoo
      public MyValid checkValidity()
        return new MyValid(false, "Because I said so!");
    }

  • [UIX] How To: Return multiple values from a LOV

    Hi gang
    I've been receiving a number of queries via email on how to return multiple items from a LOV using UIX thanks to earlier posts of mine on OTN. I'm unfortunately aware my previous posts on this are not that clear thanks to the nature of the forums Q&A type approach. So I thought I'd write one clear post, and then direct any queries to it from now on to save me time.
    Following is my solution to this problem. Please note it's just one method of many in skinning a cat. It's my understanding via chatting to Oracle employees that LOVs are to be changed in a future release of JDeveloper to be more like Oracle Forms LOVs, so my skinning skills may be rather bloody & crude very soon (already?).
    I'll base my example on the hr schema supplied with the standard RDBMS install.
    Say we have an UIX input-form screen to modify an employees record. The employees record has a department_id field and a fk to the departments table. Our requirement is to build a LOV for the department_id field such that we can link the employees record to any department_id in the database. In turn we want the department_name shown on the employees input form, so this must be returned via the LOV too.
    To meet this requirement follow these steps:
    1) In your ADF BC model project, create 2 EOs for employees and departments.
    2) Also in your model, create 2 VOs for the same EOs.
    3) Open your employees VO and create a new attribute DepartmentName. Check “selected in query”. In expressions type “(SELECT dept.department_name FROM departments dept WHERE dept.department_id = employees.department_id)”. Check Updateable “always”.
    4) Create a new empty UIX page in your ViewController project called editEmployees.uix.
    5) From the data control palette, drag and drop EmployeesView1 as an input-form. Notice that the new field DepartmentName is also included in the input-form.
    6) As the DepartmentName will be populated either from querying existing employees records, or via the LOV, disable the field as the user should not have the ability to edit it.
    7) Select the DepartmentId field and delete it. In the UI Model window delete the DepartmentId binding.
    8) From the data controls palette, drag and drop the DepartmentId field as a messageLovInput onto your page. Note in your application navigator a new UIX page lovWindow0.uix (or similar) has been created for you.
    9) While the lovWindow0.uix is still in italics (before you save it), rename the file to departmentsLov.uix.
    10) Back in your editEmployees.uix page, your messageLovInput source will look like the following:
    <messageLovInput
        model="${bindings.DepartmentId}"
        id="${bindings.DepartmentId.path}"
        destination="lovWindow0.uix"/>Change it to be:
    <messageLovInput
        model="${bindings.DepartmentId}"
        id="DepartmentId"
        destination="departmentsLov.uix"
        partialRenderMode="multiple"
        partialTargets="_uixState DepartmentName"/>11) Also change your DepartmentName source to look like the following:
    <messageTextInput
        id=”DepartmentName”
        model="${bindings.DepartmentName}"
        columns="10"
        disabled="true"/>12) Open your departmentsLov.uix page.
    13) In the data control palette, drag and drop the DepartmentId field of the DepartmentView1 as a LovTable into the Results area on your page.
    14) Notice in the UI Model window that the 3 binding controls have been created for you, an iterator, a range and a binding for DepartmentId.
    15) Right click on the DepartmentsLovUIModel node in the UI Model window, then create binding, display, and finally attribute. The attribute binding editor will pop up. In the select-an-iterator drop down select the DepartmentsView1Iterator. Now select DepartmentName in the attribute list and then the ok button.
    16) Note in the UI Model you now have a new binding called DCDefaultControl. Select this, and in the property palette change the Id to DepartmentName.
    17) View the LOV page’s source, and change the lovUpdate event as follows:
    <event name="lovSelect">
        <compound>
            <set value="${bindings.DepartmentId.inputValue}" target="${sessionScope}" property="MyAppDepartmentId" />
            <set value="${bindings.DepartmentName.inputValue}" target="${sessionScope}" property="MyAppDepartmentName" />
        </compound>
    </event>18) Return to editEmployees.uix source, and modify the lovUpdate event to look as follows:
    <event name="lovUpdate">
        <compound>
            <set value="${sessionScope.MyAppDepartmentId}" target="${bindings.DepartmentId}" property="inputValue"/>
            <set value="${sessionScope.MyAppDepartmentName}" target="${bindings.DepartmentName}" property="inputValue"/>     
        </compound>
    </event>That’s it. Now when you select a value in your LOV, it will return 2 (multiple!) values.
    A couple things to note:
    1) In the messageLovInput id field we don’t use the “.path” notation. This is mechanism for returning 1 value from the LOV and is useless for us.
    2) Again in the messageLovInput we supply “_uixState” as an entry in the partialTargets.
    3) We are relying on partial-page-refresh functionality to update multiple items on the screen.
    I’m not going to take the time out to explain these 3 points, but it’s worthwhile you learning more about them, especially the last 2, as a separate exercise.
    One other useful thing to do is, in your messageLovInput, include as a last entry in the partialTargets list “MessageBox”. In turn locate the messageBox control on your page (if any), and supply an id=”MessageBox”. This will allow the LOV to place any errors raised in the MessageBox and show them to the user.
    I hope this works for you :)
    Cheers,
    CM.

    Thanks Chris,
    It took me some time to find the information I needed, how to use return multiple values from a LOV popup window, then I found your post and all problems were solved. Its working perfectly, well, almost perfectly.
    Im always fighting with ADF-UIX, it never does the thing that I expect it to do, I guess its because I have a hard time letting go of the total control you have as a developer and let the framework take care of a few things.
    Anyway, I'm using your example to fill 5 fields at once, one of the fields being a messageChoice (a list with countries) with a LOV to a lookup table (id , country).
    I return the countryId from the popup LOV window, that works great, but it doesn't set the correct value in my messageChoice . I think its because its using the CountryId for the listbox index.
    So how can I select the correct value inside my messageChoice? Come to think of it, I dont realy think its LOV related...
    Can someone help me out out here?
    Kind regards
    Ido

  • Return multiple values from dynamic lov in apex 3.2.1

    Hi
    I need to create a dynamic lov that displays multiple values from a table and RETURNS multiple values into display only fields in a form page to be saved to the database
    For example
    dynamic list of value name SERVER
    select name || ',' || life_cycle d, name r
    from sserver
    order by 1
    This SERVER LOV is attached to the P4_SSERVER_NAME field in the form.
    However this only returns sserver. name into the P4_SSERVER_NAME field in the form. I would need to capture the life_cycle field as well and populate the P4_LIFE_CYCLE field in the form as well. How does one do this?
    I have searched this forum however could not find a thread that fit my situation. i saw that in 4.2 there is dynamic action however unable to upgrade at this moment.
    any suggestions are greatly appreciated.
    thank you

    Hi CRL,
    One method is to set the value of your P4_LIFE_CYCLE item via APEX_UTIL.set_session_state
    To do this you need to create a Page Process
    Type PL/SQL anonymous block
    Process Point On Load - Before Header
    The source for the Process might look like this: DECLARE
       l_life_cycle   VARCHAR2 (50);
    BEGIN
       SELECT life_cycle
         INTO l_life_cycle
         FROM sserver
        WHERE :p4_sserver_name = sserver.name;
       APEX_UTIL.set_session_state ('P4_LIFE_CYCLE', l_life_cycle);
    END;Jeff

  • Is it possible to query multiple items in a single OPC read?

    I am trying to read several data items at one time via OPC. Is this possible? If so, how? I have tried passing multiple URLs to specific items and a single URL header with multiple variable names. Both methods return an OPC error about invalid items. I am trying to do this to speed up OPC access times. Reading each item one-at-a-time is a little time consuming for our application.

    The only way to read multiple datapoints via OPC is to build an OPC item that contains multiple pieces of information. I checked this here, and I had no problem reading an array of data from an OPC Server with DataSocket.
    I read the "opc:/Matrikon.OPC.Simulation/Random.ArrayOfReal8" data item from a Matrikon OPC Simulation Server that publishes an array data item. The OPC Demo server is available for free download at http://www.matrikon.com/opc/htdocs/simx.htm. You can read this as an array of doubles in LabVIEW.
    For your application all you will need to read your data multiple items at a time is a server that can publish arrays.
    Hope this helps.

  • HTML + JQuery (CSOM) to add multiple item to a Sharepoint list and get their IDs

    Hi everyone.
    I try to use HTML + JQuery in CEWP to build some sort of analog of InfoPath's repeating table in order to be able to insert multiple items in a Sharepoint list using CSOM.
    The current task is to get the IDs of inserted items (in order to use those IDs later to add attachments to the list items) as soon as they are added to the list. I've tried several ways but couldn't get the IDs of all inserted items. Usually
    I get "-1" as an ID for every item except the last one, which returns me the correct ID. 
    Bellow is the code.
    <script src="/testsite1/SiteAssets/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/testsite1/SiteAssets/jquery.SPServices.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(document).ready(function() {
    var click = 1;
    $("#btn_id_1").click(function() {
    click ++;
    $("#tr_id_1").clone().appendTo("#tbl_id_1").attr("id", "tr_id_" + click.toString()).find("input").val("");
    $("#btn_id_2").click(function() {
    Save();
    function Save() {
    var ctx = new SP.ClientContext.get_current();
    var taskList = ctx.get_web().get_lists().getByTitle('Tasks');
    var taskItemInfo = new SP.ListItemCreationInformation();
    var vendor;
    var certname;
    var certid;
    $("#tbl_id_1 tr").each(function() {
    vendor = ($(this).find(".vendor")).val();
    certname = ($(this).find(".certname")).val();
    certid = ($(this).find(".certid")).val();
    newTask = taskList.addItem(taskItemInfo);
    newTask.set_item('Title', vendor);
    newTask.set_item('Request_', certname);
    newTask.set_item('h', certid);
    newTask.update();
    ctx.load(newTask);
    ctx.executeQueryAsync(addTaskSuccess, addTaskFailure);
    //timeout();
    function timeout() {
    alert ("!!!");
    function addTaskSuccess(sender, args) {
    alert(newTask.get_id());
    //AddAttachment(newTask.get_id())
    function addTaskFailure(sender, args) {
    //alert(newTask.get_id());
    alert("no");
    window.location = window.location.pathname;
    </script>
    <div id="div_id_1" class="div_class_1">
    <table id="tbl_id_1">
    <tbody>
    <tr id="tr_id_1">
    <td>Vendor:<br><input type="text" class="vendor" /></td>
    <td>Cert. Name:<br><input type="text" class="certname" /></td>
    <td>Cert. ID:<br><input type="text" class="certid" /></td>
    <td>Attachment:<br><input type="file" class="attachment" /></td>
    </tr>
    </tbody>
    </table>
    <div><button id="btn_id_1" type="button" width="10" height="10">+</button></div>
    <div><button id="btn_id_2" type="button">Save</button></div>
    </div>

    Here's a working solution (thanks to
    this guy)
    <script src="/testsite1/SiteAssets/jquery-1.11.1.min.js" type="text/javascript"></script>
    <script src="/testsite1/SiteAssets/jquery.SPServices.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    var array = [];
    $(document).ready(function() {
    var click = 1;
    $("#btn_id_1").click(function() {
    click ++;
    $("#tr_id_1").clone().appendTo("#tbl_id_1").attr("id", "tr_id_" + click.toString()).find("input").val("");
    $("#btn_id_2").click(function() {
    //Save();
    //Call();
    var asyncPromises = Save();
    asyncPromises.done(function(result) {
    //alert(array.length);
    console.log(array.length);
    for (var i=0; i<array.length; i++) {
    //alert(array[i].get_id());
    console.log(array[i].get_id());
    asyncPromises.fail(function(result) {
    function Save() {
    var buildDeferredSaves = $.Deferred(function() {
    //var array = [];
    var ctx = new SP.ClientContext.get_current();
    var taskList = ctx.get_web().get_lists().getByTitle('Tasks');
    var taskItemInfo;
    var vendor;
    var certname;
    var certid;
    $("#tbl_id_1 tr").each(function() {
    vendor = ($(this).find(".vendor")).val();
    certname = ($(this).find(".certname")).val();
    certid = ($(this).find(".certid")).val();
    taskItemInfo = new SP.ListItemCreationInformation();
    newTask = taskList.addItem(taskItemInfo);
    newTask.set_item('Title', vendor);
    newTask.set_item('Request_', certname);
    newTask.set_item('h', certid);
    newTask.update();
    ctx.load(newTask);
    array.push(newTask);
    ctx.executeQueryAsync(
    function() {
    // Successful
    buildDeferredSaves.resolve();
    function(sender, args) {
    // Failure
    buildDeferredSaves.reject(args.get_message());
    return buildDeferredSaves.promise();
    </script>
    <div id="div_id_1" class="div_class_1">
    <table id="tbl_id_1">
    <tbody>
    <tr id="tr_id_1">
    <td>Vendor:<br><input type="text" class="vendor" /></td>
    <td>Cert. Name:<br><input type="text" class="certname" /></td>
    <td>Cert. ID:<br><input type="text" class="certid" /></td>
    <td>Attachment:<br><input type="file" class="attachment" /></td>
    </tr>
    </tbody>
    </table>
    <div><button id="btn_id_1" type="button" width="10" height="10">+</button></div>
    <div><button id="btn_id_2" type="button">Save</button></div>
    </div>

  • How to return multiple tags (based on different checks) in a for loop?

    Hi,
    I'm trying to return multiple elements, based on different checks that are done in the XQuery, within a for loop. But I'm getting syntax errors at any attempt to do this.
    This is the structure of what I'm trying to do:
              <ActionList>
         <ACtion>
    let $total := count(...)
    for $x in (1 to $total)
         let $lineItems := $someVariable/*:Items/*:Item[$x]
         return
              if(...)
                        <Qty1>{...}</Qty1>
                             else     ""
                        if(...)
                        <Qty2>{...}</Qty2>
                             else ""
                   {                                       if(...)
              <Qty3>{...}</Qty3>
                             else ""
              <LinesList>
                             let $totalcount(...)
                             for $y in (1 to $totalcount(...)
                                  let $DTL := $someVariable*:DTL[$y]
                             return
                             <Line>
                                  <Carrier>{...}</Carrier>
                                  <Path>{...}</Path>
                                  <CA>{
                                       if(...)
                                            data($$someVariable/*:CA)
                                       else
                                  }</CA>
                                  <RE>{
                                       if(...)
                                            data($someVariable*:CA[@XX="RG"])
                                       else
                                  }</RE>
                                  <Time>{
                                       if(...)
                                            data($someVariable*:CA[@XX="BN"])
                                       else
                                                                     </Time>
                                  </Line>
                        </LinesList>
                                                 </ACtion>
                                                 </ActionList>
    I'm not able to return elements without having their father being returned as well, I just want to iterate over those fields and, based on that verification, decide whether they should be returned or not.
    Can someone please advise?

    An example anyway...
    Input document ($d) :
    <ns0:Items xmlns:ns0="http://my.company.org/my-namespace">
      <ns0:Item type="A">
        <ns0:Qty>2</ns0:Qty>
        <ns0:UnitPrice>10.00</ns0:UnitPrice>
        <ns0:DTL>
          <ns0:Article>ART001</ns0:Article>
          <ns0:DispatchDate>2012-01-20</ns0:DispatchDate>
          <ns0:Destination direct="1">Location1</ns0:Destination>
        </ns0:DTL>
        <ns0:DTL>
          <ns0:Article>ART002</ns0:Article>
          <ns0:DispatchDate>2012-01-21</ns0:DispatchDate>
          <ns0:Destination direct="1">Location2</ns0:Destination>
        </ns0:DTL>
      </ns0:Item>
      <ns0:Item type="B">
        <ns0:Mass>5</ns0:Mass>
        <ns0:Unit>kg</ns0:Unit>
        <ns0:DTL>
          <ns0:Article>ART003</ns0:Article>
          <ns0:DispatchDate>2012-01-20</ns0:DispatchDate>
          <ns0:Destination direct="1">Location3</ns0:Destination>
        </ns0:DTL>
        <ns0:DTL>
          <ns0:Article>ART004</ns0:Article>
          <ns0:DispatchDate>2012-01-21</ns0:DispatchDate>
          <ns0:Destination direct="1">Location4</ns0:Destination>
        </ns0:DTL>
        <ns0:DTL>
          <ns0:Article>ART005</ns0:Article>
          <ns0:DispatchDate>2012-01-22</ns0:DispatchDate>
          <ns0:Destination direct="2">Location5</ns0:Destination>
        </ns0:DTL>
      </ns0:Item>
    </ns0:Items>XQuery :
    declare namespace ns0 = "http://my.company.org/my-namespace";
    <DispatchInfo>
      for $i in $d/ns0:Items/ns0:Item
      return
      <Parcel>
        if ($i/@type = "A")
          then <Amount>{xs:decimal($i/ns0:Qty * $i/ns0:UnitPrice)}</Amount>
          else <Weight>{concat($i/ns0:Mass, " ", $i/ns0:Unit)}</Weight>
      , for $j in $i/ns0:DTL
        return
        <Article>
          <Num>{data($j/ns0:Article)}</Num>
        , <Dt>{data($j/ns0:DispatchDate)}</Dt>
        , if ($j/ns0:Destination/@direct = "1")
            then <Dest>{data($j/ns0:Destination)}</Dest>
            else ()
        </Article>                 
      </Parcel>
    </DispatchInfo>Output :
    <DispatchInfo>
      <Parcel>
        <Amount>20</Amount>
        <Article>
          <Num>ART001</Num>
          <Dt>2012-01-20</Dt>
          <Dest>Location1</Dest>
        </Article>
        <Article>
          <Num>ART002</Num>
          <Dt>2012-01-21</Dt>
          <Dest>Location2</Dest>
        </Article>
      </Parcel>
      <Parcel>
        <Weight>5 kg</Weight>
        <Article>
          <Num>ART003</Num>
          <Dt>2012-01-20</Dt>
          <Dest>Location3</Dest>
        </Article>
        <Article>
          <Num>ART004</Num>
          <Dt>2012-01-21</Dt>
          <Dest>Location4</Dest>
        </Article>
        <Article>
          <Num>ART005</Num>
          <Dt>2012-01-22</Dt>
        </Article>
      </Parcel>
    </DispatchInfo>

  • Trying to customize a multiple item lookup field using JSLink

    I'm trying to Customize a multiple item lookup field using JSLink, in SP 2013. This illustrates what I want to do:
    I can replace the ";" with <br /> in the Text column, but not the Lookup column. Here is the JSLink code I'm using for the Text column. 
    (function () {
    var overrideCtx = {};
    overrideCtx.Templates = {};
    overrideCtx.Templates.Fields = {
    'Text': { 'View' : '<#=ctx.CurrentItem.Text.toString().replace(";","<br />")#>' }
    SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
    How can I display each item on separate lines in the Lookup column?

    You can retrieve the values of the lookup column and reformat their display by replacing the following:
    overrideCtx.Templates.Fields = {
    'Text': { 'View' : '<#=ctx.CurrentItem.Text.toString().replace(";","<br />")#>' }
    with something like this:
    overrideCtx.Templates.Fields = {
    'Lookup': { 'View' : function(ctx) {
    var arr=[];
    var fld=ctx.CurrentItem[ctx.CurrentFieldSchema.Name];
    for (i=0; i<fld.length; i++) {
    arr.push(fld[i].lookupValue);
    return arr.join("<br/>");
    Here we are looping through each lookup value contained in the multi value lookup field and adding it to an array. Once complete, we use join to flatten the array and separate each entry with the <br/>. Note...this will show each value on a new line,
    but it will be the string value without the hyperlink.  If you want the actual hyperlink to the item, you can rebuild the hyperlink and add that to the array instead. You can get the item's display form from ctx.CurrentFieldSchema.DispFormUrl and the
    item's id from fld[i].lookupId for rebuilding the hyperlink.

  • Updating a table with a query that return multiple values

    Hi,
    I'm trying to update a table which contain these fields : ItemID, InventoryID, total amounts
    with a query that return these values itemId, inventoryid and total amounts for each items
    Mind you, not all the rows in the table need to be updated. only a few.
    This what i wrote but doesn't work since the query return multiple values so i can't assign it to journalAmounts.
    UPDATE [bmssa].[etshortagetemp]
    SET JournalAmounts = (SELECT sum(b.BomQty) FROM [bmssa].[Bom] b
    JOIN [bmssa].[SalesLine] sl ON sl.ItemBomId = b.BomId
    JOIN [bmssa].[SalesTable] st ON st.SalesId = sl.SalesId
    WHERE st.SalesType = 0 AND (st.SalesStatus IN (0,1,8,12,13)) AND st.DataAreaId = 'sdi'
    GROUP BY b.itemid, b.inventdimid)
    Any advise how to do this task?

    Remember that link to the documentation posted above that explains exactly how to do this. When you read it which part exactly were you having trouble with?

  • Multiple Item Drag and Drop

    I'm working on an application where I need multiple item DnD between JTrees and JTables. I'm using Java 1.4.1
    I have the basics of multiple item DnD working, by creating Transferable classes that contain a collection of items.
    The problem I have is when I drag a multiple selection within a JTree (i.e. DragSource and DropTarget are the same) then my call to event.getCurrentDataFlavors() in my dragOver(DropTargetDragEvent event) method is not returning any data flavours unless I drag over to another JTree. If I now drag back over to the source JTree (so that DragSource and DropTarget are again the same) as if by magic I now get DataFlavours whilst dragging over the source container.
    This is driving me nuts! :-)
    Has anybody else seen this and do they have a solution?

    I have the same problem here.
    When I try to perform drag and drop in a JTree (DragSource and DropTarget are the same), calling event.getCurrentDataFlavors() in the dragOver(DropTargetDragEvent event) method in the DropTargetListener returns me nothing!!
    However, the call of event.getCurrentDataFlavors() in the
    drop(DropTargetDropEvent event) does return me the correct
    information.
    On the doc, the DropTargetDragEvent.getCurrentDataFlavors()
    should mimic DropTargetDropEvent.getCurrentDataFlavors().
    So, I suppose both functions should work in the same way
    properly.
    Is there anything wrong with my understanding or is that a bug
    of the Java dnd?

  • Want to Create one PO for multiple Items ..........?

    HI Guy's,
    I am creating PO thorough  Bapi.
    It is also successfully ......
    But here I am not  able to create multiple ITEMS as in transaction ME22 for creating PO.
    For that what can I do ..........
    Greeting's of he Day.
    Ankit Singh Rathore

    hi,
    check this...
    *&      Form  CREATE_PO
          Creating PO
    -->  p1        text
    <--  p2        text
    FORM CREATE_PO .
    DATA: HEAD LIKE BAPIMEPOHEADER,
           HEADX LIKE BAPIMEPOHEADERX,
           ITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
           ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,
           SCHEDULE LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE,
           SCHEDULEX LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE,
           CONDITION LIKE BAPIMEPOCONDHEADER OCCURS 0 WITH HEADER LINE,
           CONDITIONX LIKE BAPIMEPOCONDHEADERX OCCURS 0 WITH HEADER LINE,
           RETURNS LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
           POPARTNER LIKE BAPIEKKOP OCCURS 0 WITH HEADER LINE.
    DATA: V_EKGRP TYPE MARC-EKGRP.
    DATA: BEGIN OF IT_WRITE OCCURS 0,
           MESSAGE LIKE BAPIRET2-MESSAGE,
           END OF IT_WRITE.
    DATA: V_EKORG TYPE EKORG.
    DATA: V_MAKT LIKE MAKT-MAKTX.
    DATA: V_MEINS TYPE MEINS.
    DATA: V_REMANT TYPE MATNR,
           V_LINT TYPE MATNR,
           V_LDESC TYPE MAKTX,
           V_RDESC TYPE MAKTX,
           V_LMEINS TYPE MEINS,
           V_RMEINS TYPE MEINS,
           V_LMENGE TYPE ZMENGE,
           V_RMENGE TYPE ZMENGE.
      CONCATENATE ZMMHGAGREMENT-MATNR+0(9) 'L' INTO V_LINT.
      CONCATENATE ZMMHGAGREMENT-MATNR+0(9) 'W' INTO V_REMANT.
      SELECT SINGLE MEINS FROM MARA INTO V_MEINS WHERE MATNR = ZMMHGAGREMENT-MATNR.
      SELECT SINGLE DCODE FROM ZMMDYNCODE INTO V_MAKT WHERE MATNR = ZMMHGAGREMENT-MATNR
                                                        AND ZYEAR = ZMMHGAGREMENT-PYEAR
                                                       AND SEASON = ZMMHGAGREMENT-PSEASON.
      IF SY-SUBRC NE 0.
      SELECT SINGLE MAKTX FROM MAKT INTO V_MAKT WHERE MATNR = ZMMHGAGREMENT-MATNR.
      ENDIF.
    SELECT SINGLE EKORG FROM T001W INTO V_EKORG WHERE WERKS = I_PPLANT.
    V_BUKRS = ZMMHGAGREMENT-PPLANT+0(1).
    CONCATENATE ZMMHGAGREMENT-PPLANT+0(1) '011' INTO V_BUKRS.
      V_CHAR = V_BUKRS+0(2).
      V_EKORG = V_BUKRS.
      CONCATENATE V_CHAR '0' INTO V_EKGRP.
    *POHEAD
       HEAD-COMP_CODE = V_BUKRS.
       HEAD-DOC_TYPE = 'ZREG'.
       HEAD-VENDOR = V_LIFNR.
       HEAD-PURCH_ORG = V_EKORG.
       HEAD-PUR_GROUP = V_EKGRP.
       HEAD-DOC_DATE = ZMMHGAGREMENT-ZDATE. "I_ADATE.
       HEADX-COMP_CODE = 'X'.
       HEADX-DOC_TYPE = 'X'.
       HEADX-VENDOR = 'X'.
       HEADX-PURCH_ORG = 'X'.
       HEADX-PUR_GROUP = 'X'.
       HEADX-DOC_DATE = 'X'.
    *POITEM
        ITEM-PO_ITEM = '10'.
        ITEM-MATERIAL = ZMMHGAGREMENT-MATNR..
        ITEM-SHORT_TEXT = V_MAKT.
        ITEM-PLANT = ZMMHGAGREMENT-PPLANT.
        ITEM-QUANTITY = ZMMHGAGREMENT-MENGE.
        ITEM-PO_UNIT = V_MEINS.
        ITEM-NET_PRICE = ZMMHGAGREMENT-NETPR.
        ITEM-BATCH = ZMMHGAGREMENT-BATCH.
        ITEM-TAX_CODE = 'V0'.
        ITEM-INFO_UPD = ' '.
        APPEND ITEM.
        ITEMX-PO_ITEM = '10'.
        ITEMX-PO_ITEMX = 'X'.
        ITEMX-SHORT_TEXT = 'X'.
        ITEMX-MATERIAL = 'X'.
        ITEMX-PLANT = 'X'.
        ITEMX-QUANTITY = 'X'.
        ITEMX-PO_UNIT = 'X'.
        ITEMX-NET_PRICE = 'X'.
        ITEMX-BATCH = 'x'.
        ITEMX-TAX_CODE = 'X'.
        ITEMX-INFO_UPD = 'X'.
        APPEND ITEMX.
    *ZPAYMENT-PAYMENT
    *SCHEDULE
        SCHEDULE-PO_ITEM = '10'.
        SCHEDULE-DELIVERY_DATE = ZMMHGAGREMENT-RDATE.
        SCHEDULE-QUANTITY = ZMMHGAGREMENT-MENGE..
        APPEND SCHEDULE.
        SCHEDULEX-PO_ITEM = '10'.
        SCHEDULEX-PO_ITEMX = 'X'.
        SCHEDULEX-DELIVERY_DATE = 'X'.
        SCHEDULEX-QUANTITY = 'X'.
        APPEND SCHEDULEX.
    CONDITIONS
        CONDITION-ITM_NUMBER = '10'.
        CONDITION-COND_TYPE  = 'P001'.
        CONDITION-COND_VALUE = ZMMHGAGREMENT-NETPR..
        CONDITION-CURRENCY = 'INR'.
        APPEND CONDITION.
        CONDITIONX-ITM_NUMBER = '10'.
        CONDITIONX-ITM_NUMBERX = 'X'.
        CONDITIONX-COND_TYPE  = 'X'.
        CONDITIONX-COND_VALUE = 'X'.
        CONDITIONX-CURRENCY = 'X'.
        APPEND CONDITIONX.
    IF ZMMHGAGREMENT-MATNR+9(1) = 'K'.
    *POITEM
          V_RDESC TYPE MAKTX,
          V_LMEINS TYPE MEINS,
          V_RMEINS TYPE MEINS.
    SELECT SINGLE MEINS FROM MARA INTO V_LMEINS WHERE MATNR = V_LINT.
    SELECT SINGLE MAKTX FROM MAKT INTO V_LDESC WHERE MATNR = V_LINT.
    V_LMENGE = ( ( ZMMHGAGREMENT-MENGE * 50 ) / 100 ).
        ITEM-PO_ITEM = '20'.
        ITEM-MATERIAL = V_LINT.
        ITEM-SHORT_TEXT = V_LDESC.
        ITEM-PLANT = ZMMHGAGREMENT-PPLANT.
        ITEM-QUANTITY = V_LMENGE.
        ITEM-PO_UNIT  = V_LMEINS.
        ITEM-NET_PRICE = ZPPPRDPOLICY-LRATE."ZMMHGAGREMENT-NETPR.
        ITEM-BATCH = ZMMHGAGREMENT-BATCH.
        ITEM-TAX_CODE = 'V0'.
        ITEM-INFO_UPD = ' '.
        APPEND ITEM.
        ITEMX-PO_ITEM = '20'.
        ITEMX-PO_ITEMX = 'X'.
        ITEMX-SHORT_TEXT = 'X'.
        ITEMX-MATERIAL = 'X'.
        ITEMX-PLANT = 'X'.
        ITEMX-QUANTITY = 'X'.
        ITEMX-PO_UNIT = 'X'.
        ITEMX-NET_PRICE = 'X'.
        ITEMX-BATCH = 'x'.
        ITEMX-TAX_CODE = 'X'.
        ITEMX-INFO_UPD = 'X'.
        APPEND ITEMX.
    *ZPAYMENT-PAYMENT
    *SCHEDULE
        SCHEDULE-PO_ITEM = '20'.
        SCHEDULE-DELIVERY_DATE = ZMMHGAGREMENT-RDATE.
        SCHEDULE-QUANTITY = V_LMENGE.
        APPEND SCHEDULE.
        SCHEDULEX-PO_ITEM = '20'.
        SCHEDULEX-PO_ITEMX = 'X'.
        SCHEDULEX-DELIVERY_DATE = 'X'.
        SCHEDULEX-QUANTITY = 'X'.
        APPEND SCHEDULEX.
    CONDITIONS
        CONDITION-ITM_NUMBER = '20'.
        CONDITION-COND_TYPE  = 'P001'.
        CONDITION-COND_VALUE = ZPPPRDPOLICY-LRATE.
        CONDITION-CURRENCY = 'INR'.
        APPEND CONDITION.
        CONDITIONX-ITM_NUMBER = '20'.
        CONDITIONX-ITM_NUMBERX = 'X'.
        CONDITIONX-COND_TYPE  = 'X'.
        CONDITIONX-COND_VALUE = 'X'.
        CONDITIONX-CURRENCY = 'X'.
        APPEND CONDITIONX.
    ADDING REMNANT TO PO IF REMNANT VALUE IS MAINTAINED IN PO
    IF NOT ZPPPRDPOLICY-RCENT IS INITIAL.
         SELECT SINGLE MEINS FROM MARA INTO V_RMEINS WHERE MATNR = V_REMANT.
         SELECT SINGLE MAKTX FROM MAKT INTO V_RDESC WHERE MATNR = V_REMANT.
         V_RMENGE = ( ( ZMMHGAGREMENT-MENGE * ZPPPRDPOLICY-RCENT ) / 100 ).
        ITEM-PO_ITEM = '30'.
        ITEM-MATERIAL = V_REMANT.
        ITEM-SHORT_TEXT = V_RDESC.
        ITEM-PLANT = ZMMHGAGREMENT-PPLANT.
        ITEM-QUANTITY = V_RMENGE.
        ITEM-PO_UNIT  = V_RMEINS.
        ITEM-NET_PRICE = ZPPPRDPOLICY-RRATE."ZMMHGAGREMENT-NETPR.
        ITEM-BATCH = ZMMHGAGREMENT-BATCH.
        ITEM-TAX_CODE = 'V0'.
        ITEM-INFO_UPD = ' '.
        APPEND ITEM.
        ITEMX-PO_ITEM = '30'.
        ITEMX-PO_ITEMX = 'X'.
        ITEMX-SHORT_TEXT = 'X'.
        ITEMX-MATERIAL = 'X'.
        ITEMX-PLANT = 'X'.
        ITEMX-QUANTITY = 'X'.
        ITEMX-PO_UNIT = 'X'.
        ITEMX-NET_PRICE = 'X'.
        ITEMX-BATCH = 'x'.
        ITEMX-TAX_CODE = 'X'.
        ITEMX-INFO_UPD = 'X'.
        APPEND ITEMX.
    *ZPAYMENT-PAYMENT
    *SCHEDULE
        SCHEDULE-PO_ITEM = '30'.
        SCHEDULE-DELIVERY_DATE = ZMMHGAGREMENT-RDATE.
        SCHEDULE-QUANTITY = V_RMENGE.
        APPEND SCHEDULE.
        SCHEDULEX-PO_ITEM = '30'.
        SCHEDULEX-PO_ITEMX = 'X'.
        SCHEDULEX-DELIVERY_DATE = 'X'.
        SCHEDULEX-QUANTITY = 'X'.
        APPEND SCHEDULEX.
    CONDITIONS
        CONDITION-ITM_NUMBER = '30'.
        CONDITION-COND_TYPE  = 'P001'.
        CONDITION-COND_VALUE = ZPPPRDPOLICY-RRATE.
        CONDITION-CURRENCY = 'INR'.
        APPEND CONDITION.
        CONDITIONX-ITM_NUMBER = '30'.
        CONDITIONX-ITM_NUMBERX = 'X'.
        CONDITIONX-COND_TYPE  = 'X'.
        CONDITIONX-COND_VALUE = 'X'.
        CONDITIONX-CURRENCY = 'X'.
        APPEND CONDITIONX.
    ENDIF.
    ELSE.
    IF NOT ZPPPRDPOLICY-RCENT IS INITIAL.
    SELECT SINGLE MEINS FROM MARA INTO V_RMEINS WHERE MATNR = V_REMANT.
         SELECT SINGLE MAKTX FROM MAKT INTO V_RDESC WHERE MATNR = V_REMANT.
         V_RMENGE = ( ( ZMMHGAGREMENT-MENGE * ZPPPRDPOLICY-RCENT ) / 100 ).
        ITEM-PO_ITEM = '20'.
        ITEM-MATERIAL = V_REMANT.
        ITEM-SHORT_TEXT = V_RDESC.
        ITEM-PLANT = ZMMHGAGREMENT-PPLANT.
        ITEM-QUANTITY = V_RMENGE.
        ITEM-PO_UNIT  = V_RMEINS.
        ITEM-NET_PRICE = ZPPPRDPOLICY-RRATE."ZMMHGAGREMENT-NETPR.
        ITEM-BATCH = ZMMHGAGREMENT-BATCH.
        ITEM-TAX_CODE = 'V0'.
        ITEM-INFO_UPD = ' '.
        APPEND ITEM.
        ITEMX-PO_ITEM = '20'.
        ITEMX-PO_ITEMX = 'X'.
        ITEMX-SHORT_TEXT = 'X'.
        ITEMX-MATERIAL = 'X'.
        ITEMX-PLANT = 'X'.
        ITEMX-QUANTITY = 'X'.
        ITEMX-PO_UNIT = 'X'.
        ITEMX-NET_PRICE = 'X'.
        ITEMX-BATCH = 'x'.
        ITEMX-TAX_CODE = 'X'.
        ITEMX-INFO_UPD = 'X'.
        APPEND ITEMX.
    *ZPAYMENT-PAYMENT
    *SCHEDULE
        SCHEDULE-PO_ITEM = '20'.
        SCHEDULE-DELIVERY_DATE = ZMMHGAGREMENT-RDATE.
        SCHEDULE-QUANTITY = V_RMENGE.
        APPEND SCHEDULE.
        SCHEDULEX-PO_ITEM = '20'.
        SCHEDULEX-PO_ITEMX = 'X'.
        SCHEDULEX-DELIVERY_DATE = 'X'.
        SCHEDULEX-QUANTITY = 'X'.
        APPEND SCHEDULEX.
    CONDITIONS
        CONDITION-ITM_NUMBER = '20'.
        CONDITION-COND_TYPE  = 'P001'.
        CONDITION-COND_VALUE = ZPPPRDPOLICY-RRATE.
        CONDITION-CURRENCY = 'INR'.
        APPEND CONDITION.
        CONDITIONX-ITM_NUMBER = '20'.
        CONDITIONX-ITM_NUMBERX = 'X'.
        CONDITIONX-COND_TYPE  = 'X'.
        CONDITIONX-COND_VALUE = 'X'.
        CONDITIONX-CURRENCY = 'X'.
        APPEND CONDITIONX.
    ENDIF.
    ENDIF.
    FOR PARTNER FUNCTION
       POPARTNER-PARTNERDESC =  'VN'.
       POPARTNER-LANGU = 'EN' .
       POPARTNER-BUSPARTNO =  ZMMHGAGREMENT-GNUMBER.
       APPEND POPARTNER.
      POPARTNER-PARTNERDESC =  'PI'.
      POPARTNER-LANGU = 'EN' .
    IF ZPAYMENT-PAYMENT = '1'. "V_PAYMENT = '1'.   ".
      POPARTNER-BUSPARTNO =  ZMMHGAGREMENT-ONUMBER.
    ELSE.
    POPARTNER-BUSPARTNO =  ZMMHGAGREMENT-GNUMBER.
    ENDIF.
    APPEND POPARTNER.
    *BREAK SAPUSER..
      CALL FUNCTION 'BAPI_PO_CREATE1'
      EXPORTING
        POHEADER                     = HEAD
       POHEADERX                     =  HEADX
      POADDRVENDOR                 =
      TESTRUN                      =
    IMPORTING
       EXPPURCHASEORDER              = I_PNO
      EXPHEADER                    =
      EXPPOEXPIMPHEADER            =
    TABLES
       RETURN                        = RETURNS
       POITEM                        = ITEM
       POITEMX                       = ITEMX
      POADDRDELIVERY               =
       POSCHEDULE                    = SCHEDULE
       POSCHEDULEX                   = SCHEDULEX
       POCONDHEADER                  = CONDITION
       POCONDHEADERX                 = CONDITIONX
       POPARTNER                     = POPARTNER.
    POCOND                       =
    POCONDX                      =
    POLIMITS                     =
    IF NOT I_PNO IS INITIAL.
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    ELSE.
    LOOP AT RETURNS WHERE TYPE = 'E'..
    IT_WRITE-MESSAGE = RETURNS-MESSAGE.
    APPEND IT_WRITE.
    ENDLOOP.

  • Human Workflow Task XPath query string returns multiple nodes.

    I am looking for trouble shooting help for this error. I am no sure if it is a server or jdev issue.
    I am running JDev version 10.1.3.3 and console version 10.1.3.1.0 locally.
    General information on the BPEL process:
    I have a temporary table in Oracle lite that I created items to be review by the user. I created a synchronous BPEL process. The first step in developing this process, I created the straight forward invoke the table to get the records, transform the records with a change the approve flag = "Y", and invoke the table to update the records. Works like a charm. I followed the online tutorial by dropping a human task after the transform, configured the parameters, setup the assignments, and moved the invoke to update table under the approved condition. If the table has only one record, the process runs great but if there are two records I get the following error message.
    <selectionFailure xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"><part name="summary"><summary>XPath query string returns multiple nodes.
    According to BPEL4WS spec 1.1 section 14.3, The assign activity part and query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr should not return multipe nodes.
    Please check the BPEL source at line number "178" and verify the part and xpath query /ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr.
    </summary>
    </part></selectionFailure>
    =================
    The error occurs in the first assign of the Human task after the assign copies the fields for the title. I underlined line number 178.
    <correlationSets>
    <correlationSet name="WorkflowTaskIdCor"
    properties="taskservice:taskId"/>
    </correlationSets>
    <sequence>
    <assign name="HumanTask1_1_AssignTaskAttributes">
    <copy>
    <from expression="concat(ora:getProcessURL(), string('/HumanTask1/HumanTask1.task'))"/>
    <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:taskDefinitionURI"/>
    </copy>
    <copy>
    <from expression="number(3)"/>
    <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:priority"/>
    </copy>
    <copy>
    <from>
    <payload xmlns="http://xmlns.oracle.com/bpel/workflow/task">
    <Case xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <CourtDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ErrorMessage xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ItemName xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <Payment xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <Zip xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ProcessFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <LastUpdated xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <AddedDate xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <CityAttnyAmount xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ApprovalFlag xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ProlawKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    <ProcessKey xmlns="http://xmlns.oracle.com/bpel/workflow/task"/>
    </payload>
    </from>
    <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:payload"/>
    </copy>
    <copy>
    <from expression="concat(string('Item Fee Approval '), bpws:getVariableData('Invoke_1_Select_RecordsSelect_OutputVariable','TempItemCollection','/ns3:TempItemCollection/ns3:TempItem/ns3:ItemName'))"/>
    <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:title"/>
    </copy>
    <copy>
    <from variable="Invoke_1_Select_RecordsSelect_OutputVariable"
    part="TempItemCollection"
    query="/ns3:TempItemCollection/ns3:TempItem/ns3:ItemNbr"/>
    <to variable="initiateTaskInput" part="payload"
    query="/taskservice:initiateTask/task:task/task:payload/task:Item"/>
    </copy>
    <copy>
    Thank you for any help you can give me.

    Here is how I solved this problem: I was told by the metalink folks that I should use the same verion of SOA console as jdev. So I went back to jdev 10.1.3.1. Rather than reading from the Oracle lite table, I dumped the table into a flat file. I read flat file and populated the workflow. Remember to set the 'messages in batch' flag in the file adapter to 1 and the number of records to skip to zero in the format builder for the flat file. The process now reads each record and creates an instance for that each record. In other words, if I have 8 records in my flat file, I will have 8 instances of the process running on the console. Thanks Jeremy for your help figuring this out.
    Edited by: user7725126 on Nov 19, 2009 3:56 PM

  • LOVs again!  How to return multiple fields to calling form

    Hi
    Newbie question, any help GREATLY appreciated :)
    Is there a simple and easy way to return more than one field from a LOV.
    I need this as I have a composite fk comprised of 2 fields, and as such need to return 2 fields from the LOV to the calling form.
    (My environment: JDeveloper 9.0.5.2 build 1618)
    CM

    Thanks, you put me on the right track here. Further investigations show the following sample provided by OTN shows how to use both the session request/response values or a JavaBean to do this:
    http://www.oracle.com/technology/sample_code/products/jdev/10g/ADF_UIX_UserInput.zip
    As such I post my solution to my original post. Hopefully it's useful to someone beside myself. I have to write up my notes anyhow so it's no fuss to submit them to the forum. I must admit I'm a newbie and slightly demented Forms programmer so such solutions aren't so obvious to me. With this in mind please include the "standard disclaimer" here, with the addition "mileage may vary" warranty.
    For these notes I've used the "HR" demo Oracle schema. In particular the tables departments and employees. As you know there is a master-detail relationship between these 2 tables, where each department may have one or more employees.
    We have the requirement on a webpage to:
    1) Provide an input-form-with-navigation to edit the employees.
    2) Display the relating department_name field, rather than just showing the department_id which is meaningless to the user. For example if the employees.department_id = 40, we wish to show the department name "Human Resources" on the employees record.
    3) Provide a LOV for the department ID field to allow the user to change the underlying department_id to a different master departments record.
    4) Update 2) given a change via 3).
    To do this do the following:
    Entity Objects
    1) Create default EO/VOs on both tables.
    2) In the employees EO, create a new field "DepartmentName" to represent the derived department name field.
    3) Set the new EO attribute's selected-in-query field.
    4) In the query-column-expression field, enter a query to derive the department name field for each record in the detail-employees-EO.
    eg. (SELECT dpt.department_name FROM departments dpt WHERE dpt.department_id = employees.department_id)
    Ensure to include the brackets.
    5) Apply the changes and accept the warning to create default data-type settings for the new attribute.
    View Object
    6) In the employees VO, include the new field DepartmentName as a selected attribute from the EO.
    7) Apply the changes and accept the warning to create default data-type settings for the new attribute.
    8) Test the model by running the ADF BC tester. Once running select the employees VO and step through the records, making sure the DepartmentName field has a value and changes appropriately according to the relating parent department_id.
    UIX input-only-form
    9) Create a new UIX web page employeesEdit.
    10) From the data-control pallete, drag in the employees VO as an input-form-with-navigation.
    11) For testing purposes it is also useful to have a create, delete, commit and rollback button, so includes these too.
    12) Within the employees VO data-control, also drag across a messageLovInput for the DepartmentId. Position it under the existing DepartmentId messageTextInput within the UIX page. We'll remove the existing messageTextInput later, but it's useful to leave it in for testing purposes initially when the LOV returns values.
    UIX LOV
    13) Navigate to the default LOV page that has just been created for you.
    14) Within the data-control pallete, expand the departments VO, select department ID then LOV-table from the drop-down, and drag this item onto the LOV page.
    15) Save your changes.
    16) Run your application. For an existing employee, invoke the department LOV and select an alternative department. Note on returning to the employees page the DepartmentID (both the messageTextInput and messageLovInput fields) are updated, but the DepartmentName is not. To do this we need to create a JavaBean to return multiple fields from the LOV to the original form.
    JavaBean
    17) Within your ViewController project, expand the ApplicationSources-View node.
    18) Select the new button, and create a standard JavaBean.
    19) Name the bean DepartmentsLov.
    20) Via the class editor, add 2 private scope fields DepartmentId and DepartmentName with String data-types, ensuring the create get/set method checkboxes are checked.
    21) Make and save your changes.
    22) From the navigator drag the newly created java file into the data-control palette.
    UIX LOV
    23) Return to the LOV webpage.
    24) Your LOV page will have a lovSelect event handler something like the following:
    <event name="lovSelect">
    <set property="inputValue"
    value="${bindings.DepartmentId.inputValue}"
    target="${data.employeesEdit.DepartmentId}"/>
    25) Change the lovSelect as follows:
    <event name="lovSelect">
    <compound>
    <set property="inputValue"
    value="${bindings.DepartmentId.inputValue}"
    target="${data.employeesEdit.DepartmentId}"/>
    <set value="${bindings.DepartmentId.inputValue}"
    property="inputValue"
    target="${bindings.JavaBeanDepartmentId}"/>
    <set value="${bindings.DepartmentName.inputValue}"
    property="inputValue"
    target="${bindings.JavaBeanDepartmentName}"/>
    </compound>
    26) Within the UI model navigator, right-click on the top node, then create-binding, input, text field.
    27) Select the AppModuleDataControl, then DepartmentView, then the DepartmentName field, and then the ok button.
    28) In the UI model select the new field, then in the structure pane rename the field to DepartmentName.
    29) Within the UI model navigator, right-click on the top node, then create-binding, data, iterator.
    30) Select the DepartmentsLovDataControl and name the new iterator DepartmentsJavaBeanIterator.
    31) Again in the UI model navigator, right-click on the top node, then create-binding, input, text field.
    32) Select the DepartmentsLovDataControl then departmentId field, then the ok button.
    33) In the UI model select the new field, then in the structure pane rename the field to JavaBeanDepartmentId.
    34) Again in the UI model navigator, right-click on the top node, then create-binding, input, text field.
    35) Select the DepartmentsLovDataControl then departmentName field, then the ok button.
    36) In the UI model select the new field, then in the structure pane rename the field to JavaBeanDepartmentName.
    UIX input-only-form
    37) Return to the main employeesEdit UIX form.
    38) Your UIX page will have a lovUpdate event handler something like the following:
    <event name="lovUpdate">
    <null/>
    39) Change the lovUpdate as follows:
    <event name="lovUpdate">
    <compound>
    <set value="${bindings.JavaBeanDepartmentId.inputValue}"
    property="inputValue"
    target="${bindings.DepartmentId}"/>
    <set value="${bindings.JavaBeanDepartmentName.inputValue}"
    property="inputValue"
    target="${bindings.DepartmentName}"/>
    </compound>
    </event>
    40) Repeat steps 29 through 36 for this page.
    41) Within the UIX page find the entries for the departmentId LOV, and the DepartmentName. They should look something like the following:
    <messageLovInput id="${bindings.DepartmentId.path}"
    model="${bindings.DepartmentId}"
    destination="lovWindow1.uix"/>
    <messageTextInput model="${bindings.DepartmentName}"
    columns="10"/>
    42) Modify these 2 entries as follows:
    <messageLovInput id="DepartmentId"
    model="${bindings.DepartmentId}"
    destination="lovWindow1.uix"
    partialRenderMode="multiple"
    partialTargets="DepartmentId DepartmentName"/>
    <messageTextInput id="DepartmentName"
    model="${bindings.DepartmentName}"
    columns="10"/>
    43) Finally delete the original DepartmentId messageTextInput field, leaving the DepartmentId messageLovInput.
    Testing
    44) Open your UIX input-only-form.
    45) Call the LOV and change the department for an existing employee record.
    46) Return to the employees page and note that the department ID and name have changed.
    47) Commit your changes.
    48) With your favourite data inspection tool (a'la Toad), check that the employee record's department ID has been appropriately saved to the database.
    <The End>
    Phew!

  • Issue While Passing Multiple items into a sales order BAPI in SAP.

    &lt;messages&gt;&lt;input&gt;&lt;Invoke_SAP_SO_process_InputVariable&gt;&lt;part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="payload"&gt;&lt;ZBAPI_SORDER_WRAPPER xmlns:rfc="urn:sap-com:document:sap:rfc:functions" xmlns="urn:sap-com:document:sap:rfc:functions"&gt;
    &lt;rfc:ORDER_HEADER_IN&gt;
    &lt;rfc:DOC_TYPE&gt;TA&lt;/rfc:DOC_TYPE&gt;
    &lt;rfc:SALES_ORG&gt;1000&lt;/rfc:SALES_ORG&gt;
    &lt;rfc:DISTR_CHAN&gt;10&lt;/rfc:DISTR_CHAN&gt;
    &lt;rfc:DIVISION&gt;00&lt;/rfc:DIVISION&gt;
    &lt;rfc:REQ_DATE_H&gt;2009-03-11&lt;/rfc:REQ_DATE_H&gt;
    &lt;/rfc:ORDER_HEADER_IN&gt;
    &lt;rfc:ORDER_ITEMS_IN&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000010&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;M-18&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;1&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000020&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;M-18&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;1&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000030&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;M-18&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;1&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000040&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;M-18&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;2&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;/rfc:ORDER_ITEMS_IN&gt;
    &lt;rfc:ORDER_ITEMS_INX&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000010&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;X&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;X&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000020&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;X&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;X&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000030&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;X&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;X&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000040&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:MATERIAL&gt;X&lt;/rfc:MATERIAL&gt;
    &lt;rfc:TARGET_QTY&gt;X&lt;/rfc:TARGET_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;/rfc:ORDER_ITEMS_INX&gt;
    &lt;rfc:ORDER_PARTNERS&gt;
    &lt;rfc:item&gt;
    &lt;rfc:PARTN_ROLE&gt;AG&lt;/rfc:PARTN_ROLE&gt;
    &lt;rfc:PARTN_NUMB&gt;0000002146&lt;/rfc:PARTN_NUMB&gt;
    &lt;/rfc:item&gt;
    &lt;/rfc:ORDER_PARTNERS&gt;
    &lt;rfc:ORDER_SCHEDULES_IN&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000010&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;2009-03-11&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;10&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000020&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;2009-03-11&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;10&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000030&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;2009-03-11&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;10&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000040&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;2009-03-11&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;10&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;/rfc:ORDER_SCHEDULES_IN&gt;
    &lt;rfc:ORDER_SCHEDULES_INX&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000010&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;X&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;X&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000020&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;X&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;X&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000030&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;X&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;X&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;rfc:item&gt;
    &lt;rfc:ITM_NUMBER&gt;000040&lt;/rfc:ITM_NUMBER&gt;
    &lt;rfc:SCHED_LINE&gt;0001&lt;/rfc:SCHED_LINE&gt;
    &lt;rfc:REQ_DATE&gt;X&lt;/rfc:REQ_DATE&gt;
    &lt;rfc:REQ_QTY&gt;X&lt;/rfc:REQ_QTY&gt;
    &lt;/rfc:item&gt;
    &lt;/rfc:ORDER_SCHEDULES_INX&gt;
    &lt;/ZBAPI_SORDER_WRAPPER&gt;
    &lt;/part&gt;&lt;/Invoke_SAP_SO_process_InputVariable&gt;&lt;/input&gt;&lt;fault&gt;&lt;selectionFailure xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"&gt;&lt;part name="summary"&gt;&lt;summary&gt;XPath query string returns multiple nodes.
    According to BPEL4WS spec 1.1 section 14.3, The assign activity part and query /ns2:ZBAPI_SORDER_WRAPPER/ns2:ORDER_ITEMS_IN/ns2:item/ns2:ITM_NUMBER should not return multipe nodes.
    Please check the BPEL source at line number "113" and verify the part and xpath query /ns2:ZBAPI_SORDER_WRAPPER/ns2:ORDER_ITEMS_IN/ns2:item/ns2:ITM_NUMBER.
    Possible reasons behind this problems are: some xml elements has maxOccurs &gt; 1 or the xml data is invalid according to XML Schema.
    To verify whether XML data received by a process is valid, user can turn on validateXML switch at the domain administration page.
    &lt;/summary&gt;
    &lt;/part&gt;&lt;/selectionFailure&gt;&lt;/fault&gt;&lt;/messages&gt;

    Hi Siva,
    I had a similar problem.
    I was using add button to create dynamic rows.
    In the coding part I create multiple instances but when I call the webservice only the last row is passed.
    Can you give me more inputs?
    Thanks
    Nancy

Maybe you are looking for