Insert master and detail rows with Composition assoc generating JBO-26048

I have the Master and Detail Entity Objects and made an Association linking them as Composition related.
I have 2 ViewObjects. the MasterViewObject is composed of the Master entity object and 1 other udpateable object. the DetailViewObejct only contains the Detail entity Object.
I tried to create a row on the masterviewobject and then immeidately create a detail row, and then commit, ADF issues a JBO-26048 error. Constraint "MY_FK" violated during post operation.... ".
I don't know wahts wrong, but this should not be error should nit be appearing, as ViewObjects and the Links with Composition Association take care of populating the Foreign Keys of the detail. Or am I missing something here?

The ADF Guide covers this problem, and I have a method that works as well on jdevguru.com. Take a look at the manual first, they have an indepth view on it and how to get it all to work together.
Kelly

Similar Messages

  • Insert Master and Detail in the same transaction

    I have 2 view objects : Students and Enrollments.
    Connecting those view objects, there is one view link :
    Cardinality : 1..* (One student can enroll several courses).
    This link is exposed in "Students" view object by the property "getEnrollments" and in "Enrollments" view object, by the property "getStudent".
    I am try to insert records first in Student table, and Enrollment table in the same transaction.
    The primary key for Student table is generatade by a sequence (database trigger)
    My code is :
    StudentListImpl studentView = getStudentList();
    StudentListRowImpl studentRow = (StudentListRowImpl) studentView.createRow();
    studentRow.setFirstname(student.getFirstName());
    studentRow.setLastname(student.getLastName());
    studentRow.setDatebirth(student.getDateBirth());
    studentRow.setStatusid("A");
    studentView.insertRow(studentRow);
    EnrollmentListRowImpl enrollmentRow = (EnrollmentListRowImpl) studentRow.getEnrollments().createRow();
    enrollmentRow.setCourseid("C-100");
    studentRow.getEnrollments().insertRow(enrollmentRow);
    The generated Student ID is not being retrieved by ADF and set up in Enrollment view object. So, database is firing foreign key violation (in Enrollment table - No student ID provided)
    How can achieve this goal? Insert in DETAIL table with the key generated for the PARENT table?

    Yes, ID attribute in Student EO is DBSequence.
    If I insert only Student it works. But when I try to insert an Enrollment for that just created Student (same transaction), the Student ID is not assigned to Enrollment EO.
    The code I use to insert Enrollment is :
    EnrollmentListRowImpl enrollmentRow = (EnrollmentListRowImpl) studentRow.getEnrollments().createRow();
    enrollmentRow.setCourseid("C-100");
    My question is :
    Since I am creating a new Enrollment row using view link acessors in Student VO (getEnrollments), will the Student ID (just generated by sequence) be automatically assigned to Enrollment VO?
    I am totally lost about this (inserting master and detail in same transaction) and I can't find documentation on this topic.

  • How to insert  new records in Master and detail Forms.

    Hi,
    I am having trouble inserting values in both master and detail view at the same time. The scenarios is I have a Dept Table (View Object-VO1) and Employee Table(View Object -VO2) both linked with a foreign key, as per Default HR schema in Oracle DB XE.
    Now I want to insert new record in both Dept(VO1) and EMP(VO2) table via a New page say ( Page2 ). There is a button on Page1 with button INSERT .I can only drag-drop "CreateInsert" operation on that button for VO1 or VO2. So only text box for Dept records are enable to insert data but not Emp records. Is there a way I can insert data in both the tables at the sametime??
    Thanks,
    MB

    Hi MuradRabbani,
    You can programmatically call both createInsert Operations,
    Add to your pageDef both CreateInsert Operations.
    Create a button tha will call insert method from Master (VO1) and then call insert method for Detail (VO2)
    Here is an Example code of calling the operations:
    DCBindingContainer dcb = ADFUtils.getDCBindingContainer(); //you need ADFUtils.java and JSFUtils.java classes. You can find them in the sample applications in your JDeveloper.
    OperationBinding oper = dcb.getOperationBinding("CreateInsertVO1");
    oper.execute();
    -----------------NOTE: at this point you should have set values that compine the ViewLink on the master in order the detail will know where to link the new record there are many ways to do it.
    As an approach try to overrdi the create Method on the in the ViewRowImpl of your Master vo (VO1)
    e.g.
    @Override
    protected void create(AttributeList attributeList) {
    //before
    attributeList.setAttribute("NameOfAttribute", valueHere);
    super.create(attributeList);
    After that you should call the operation for your detail VO2
    e.g.
    DCBindingContainer dcb = ADFUtils.getDCBindingContainer();
    OperationBinding oper = dcb.getOperationBinding("CreateInsertVO2");
    oper.execute();
    The detail record will now have the values from your master automatically.
    Regards,
    Dimitris.

  • MySQL Sytax error with master and detail pages

    Master and Detail pages.
    I get an SQL error when I click on an Item in the Master
    page.
    “You have an error in your SQL syntax; check the manual
    that corresponds to your MySQL server version for the right syntax
    to use near 'ID = 16 LIMIT 0, 10' at line 1 “
    If I try to open the detail page I get
    “You have an error in your SQL syntax; check the manual
    that corresponds to your MySQL server version for the right syntax
    to use near 'ID = -1 LIMIT 0, 10' at line 1 “
    I created this pair by simply clicking on Insert/data object/
    master detail page.
    I have tried this various ways, but always get the same
    result.
    Is there a bug in CS3?

    Sorry I have solved it myself.
    I had accidentally put a space in a table header in the mySQL
    data bank.
    All works well now.

  • PRISM Master-Details with navigation between the Master and details view

    Hi, I have a Master list with accounts and a Details list containing transactions.
    The Master list : has a UserControl (AccountListView) and Viewmodel(AccountListViewModel)
    The list is bound to an observable collection of type AccountViewModel and has a SelectedAccount property to get the current selected account. Each AccountViewModel has a collection of type TransactionViewModel.
     public AccountListView(IAccountListViewModel viewModel)
                //this.DataContext = vm;
                InitializeComponent();
                ViewModel = viewModel;
            public Infrastructure.IViewModel ViewModel
                get
                    return (IAccountListViewModel)DataContext;
                set
                    DataContext = value;
    //the viewmodel
            public AccountListViewModel(IRegionManager regionManager)
                this.regionManager = regionManager;
                this.AccountList = GetAccounts(); // gets the list of accounts from another layer
            public AccountViewModel SelectedAccount
                get { return selectedAccount; }
                set
                    selectedAccount = value;
                    OnPropertyChanged("SelectedAccount");
    And the Details view has a user control(TransactionListView) and a viewmodel(AccountView);
    public TransactionListView(IAccountViewModel viewModel)
                InitializeComponent();
                ViewModel = viewModel;
                //this.DataContext = vm.SelectedAccount;
            public Infrastructure.IViewModel ViewModel
                get
                   return (IAccountViewModel)DataContext;
                set
                    DataContext = value;
    //the viewmodel 
    public AccountViewModel(Business.Account a)
                    AccountId = a.AccountId;
                    accountName = a.AccountName;
    I created a hyperlink command so that whenever I click on the name of an account from the master list it will navigate to the detail list and set the as the DataContext the account I clicked on. Before I had both Master and Detail lists displayed at the
    same time and set the DataContext of the Detail List as the SelectedAccount property(which is bound to the SelectedItem of the Master List) of the Master List. I am not sure how to pass the SelectedAccount when I navigate to the Detail List and set it as the
    DataContext of the Detail List.
           

    >>I'm using the reguestnavigate method, but from what I read you can't pass objects as parameters ?
    As I mentioned there is a NavigationParameters class that you can create an instance of and pass as a parameter to the RequestNavigate method in Prism 5:
    private void NavigateTransaction(AccountViewModel obj)
    var parameters = new NavigationParameters();
    parameters.Add("accountViewModel", obj);
    regionManager.RequestNavigate(RegionNames.ContentRegion, new Uri(transactionview, UriKind.Relative), parameters);
    The TransactionView should then implement the Microsoft.Practices.Prism.Regions.INavigationAware interface and retrieve the parameter in the OnNavigatedTo method:
    public partial class TransactionView : UserControl, INavigationAware
    public TransactionView()
    InitializeComponent();
    void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
    AccountViewModel myParameter = navigationContext.Parameters["accountViewModel"] as AccountViewModel;
    this.DataContext = myParameter;
    public bool IsNavigationTarget(NavigationContext navigationContext)
    return true;
    public void OnNavigatedFrom(NavigationContext navigationContext)
    In Prism 4 there is no NavigationParameters class so you either need to upgrade to Prism 5 if you haven't already done so or you could store the parameters to be passed yourself somewhere else. Please refer to the following links for more information and
    examples of how you could do this:
    http://stackoverflow.com/questions/9320638/how-to-pass-an-object-when-navigating-to-a-new-view-in-prism
    http://visualstudiomagazine.com/articles/2012/08/20/view-communication-in-wpf-and-prism.aspx
    Please also remember to mark helpful posts as answer to close the thread and then start a new thread if you have a new question. Please don't ask several questions in the same thread.

  • Insert master, then details

    I'm using JDeveloper 10.1.3.5. I've set up ADF BC EO's and VO's for a master table and a detail table. There is also a 1:* Association, and a 1:* View Link between the master and details and this has all been added to an Application Module. The primary key of the master table is a surrogate PK generated from a sequence in a trigger. So the PK attribute has been designated as a DBSequence and has Refresh after Insert turned on.
    I have a jspx page using ADF Faces. It has a Create Form based on the master table. That means that a Create action was added to the page definition, and an invokeAction set to make sure Create is done when the page is first displayed. I added an InputFile component set to an UploadedFile in a backing bean. The files that users will be uploading contain detail records to be associated with this master. So I added an Iterator, Create action named CreateDetail, and AttributeValues for each attribute in the detail table's VO to the page definition. There is also a Commit action in the page definition.
    In the backing bean, there is an ActionEvent method tied to a commandButton on the page. It takes the uploaded file and executes CreateDetail for each record in the uploaded file, parses the record and sets the attributes. Then it executes Commit.
    Here's the problem:
    If I execute Commit before I start creating the detail records from the uploaded file, then Commit again after creating details, this works fine. However, if there is an error when I process the details, the master has already been committed. I'd rather consider master and details as a single transaction to be committed or rolled back as a unit.
    If I don't commit before I start creating the detail records, the new primary key for the master record hasn't been retrieved yet. So the detail records don't have the foreign key that points to the master. So the commit fails - missing mandatory field.
    I tried changing the Create on the master record to a CreateInsert, hoping that the framework would do the Insert of the master and retrieve its PK before processing the details, but no dice - it still works only if I Commit before processing details.
    Any ideas?

    In 11g, I've had some issues with compositions automatically maintaining foreign-key relationships for a sequence-based PK correctly if both master and detail are new. Have you tried implementing the (Java) solution provided by the aforementioned section of the dev guide (even though you shouldn't need it for compositions)?
    If that doesn't work for you, I've found the "old" method to be successful:
    In master:
    public void postChanges(TransactionEvent e) {
    /* Only references if this is NEW */
    RowSet newDetailsBeforePost = null;
    if (getPostState() == STATUS_NEW) {
    // Store the rowset of details related
    // to this new image before calling super
    newDetailsBeforePost = (RowSet)getXXX(); // replace "getXXX" with your association accessor method
    super.postChanges(e);
    if (newDetailsBeforePost != null) {
    adjustDetails(newDetailsBeforePost);
    private void adjustDetails(RowSet details) {
    Number newFkValue = getYYY.getSequenceNumber(); // replace "getYYY" with the getter for your sequence-based PK attribute
    while (details.hasNext()) {
    DetailImpl detail= (DetailImpl) details.next(); // replace "DetailImpl" with your detail EO class
    detail.setZZZ(newFkValue); // replace "setZZZ" with the setter for the detail's FK attribute
    In detail:
    public void postChanges(TransactionEvent e) {
    MasterImpl master = getMaster(); // replace "MasterImpl" with master EO class, "getMaster" with assoc accessor method
    if (STATUS_NEW == master.getPostState()) {
    master.postChanges(e);
    super.postChanges(e);
    Even better is to create an EO framework class that just fixes this problem (in general) for you, but that's more complicated--<plug>see the forthcoming JDev11g handbook</plug>.
    Hope this helps,
    Avrom

  • Master and detail in the same page

    db11xe , apex 4.0 , firefox 24 ,
    hi all ,
    i am trying to insert the master and detail data in one step in the same page :
    i have two tables (clients) and (tests_administered)
    the client table's region contains theses items
    client_id
    client_name
    the other table's region contains these columns -- the tabular region
    row selector
    test_admin_id -- pk,  hidden
    client_id          -- hidden , this is the one i should populate with values
    and more columns
    i've done this :
    1- removed the condition of the tabular region .
    2- Added the request CREATE to the list in condition of the APPLYMRU process -- or :request like ('CREATE')
    3- Added new process with following code : -- with sequence before the applymru process and after process row of clients process
    for i in 1..apex_application.g_f02.count
    loop
    apex_application.g_f02(i) := :p2_client_id ;
    end loop ;
    but nothing happened . why ? what did i miss ?
    thanks

    Hi,
    Create a Master Detail Form through the APEX Wizard 
    Make sure you choose the Primary Keys for the Master Detail as one of your Column and not the ROW ID.
    Selecting an existing Sequence for the Primary Key is preferred.
    Select the option the where your Master and Detail appears in the same page.
    Initially when you run the page your master and detail will not appear at the same time in the page when your Master Detail Form is in the entry form mode. For this you have to go to your Tabular Form(Detail Form) region, and below you will have to remove the Condition for the display of your Tabular form and set it to “No Condition”.
    Now when you run the page both the Master and Detail form will appear together in the create mode but you will not be able to insert or create both master and detail records at the same time when u click the create button. For this the following needs to be done: You need to create a PL SQL Tabular Form process :
    Let's say your master form is based on DEPT and your detail tabular form is based on EMP. Make sure the following things are configured:
    The DEPT insert/update DML process runs before the new tabular form PLSQL process. (ie) the new PL SQL Tabular Form Process that you create should be inbetween Automatic Row Processing(DML) and Multi Row Update Process , so create the new Tabular Form Pl SQL process with a sequence number inbetween these two Processes.
    Make sure you choose Tabular form while creating this PL SQL process.
    The new tabular form PL/SQL process executes the following as the source
       :DEPTNO := :P1_DEPTNO;
    Where DEPTNO is the Foreign Key column in the Tabular Form that links the Primary Key Item P1_DEPTNO of the Master Form.
    Finally this new PL SQL process conditionally runs when DEPTNO is null, so you need to add the following condition to the process:
    The final step to accomplish in creating both the Master and Detail records at the same time is to make a change in the condition of the Multi Row Update Process. :request in ('SAVE','CREATE') or :request like 'GET_NEXT%' or :request like 'GET_PREV%'
    -We make this change so that records get inserted into the Detail table when we click the ‘’Create” button.
    Now you can Run your page and create both the Master and Detail records at the same time.
    Thanks and Regards,
    Madonna

  • Connect third ViewObject to 2 ViewObjects (Master And Detail) via ViewLink

    I have three ViewObjects; 1 Master 1 Detail connected with a ViewLink; i have a third Read-Only (SQL Based) ViewObject which can only be resolved by two bind variables. But the 1st bind variable is on the Master and the second is on the Detail. How can I connect the third ViewLInk to the Master and Detail ViewObjects?

    I dropped both viewobjects as read-only tables and they both have the rangesize set to -1.
    I think I made myself a bit unclear when asking my question. I do not want a "normal" master-detail view in my jsp where you see one masterrow and all the detailrows. I want my page to show all the masterrows with all their corresponding detail rows listed under the master row.
    The pseudocode may look like this:
    for each row in MasterViewObject loop
    <<display data in MasterViewObject>>
    for each row in DetailViewObject loop
    <<display data in DetailViewObject>>
    end inner loop
    end outer loop
    As you see I have a double loop here. Is somehing like this possible without "manually" doing all the stuff?
    Thanx
    Tom

  • Displaying the master and detail records ....

    Hi ,
    There is a master - detail form. The end-user make some insertions/updates in the detail block...
    How is it possible to display these detail records and its master when the user presses a custom button 'refresh' which just requery the records in both master and detail blocks...?????
    When i write "to display these detail records and its master " i mean that the current record (the one which the cursor would be focused in ) would be this master record... however,all other records would be displayed as well....
    Many thanks,
    Simon

    From what I understand you want to re-query and go to the record where you were just before re-querying??
    Interesting requirement, why you wanna do this? if for the user to see the changes of the updates, that is the default behavior.
    You can do this in two ways.
    1- in your "Refresh" button save the :system.trigger_record in a parameter :parameter.record_num, for the Master block and after the query you do a go_record(:parameter.record_num) .
    BEGIN
         GO_BLOCK('EMP'); --Master Block
         :PARAMETER.RECORD_NUM := :SYSTEM.TRIGGER_RECORD;
         EXECUTE_QUERY;
         GO_RECORD(:PARAMETER.RECORD_NUM);
    END;2 you can loop through the block with next_record built-in and an exit condition of a key value you saved in a parameter.
    BEGIN
         GO_BLOCK('EMP'); --Master Block
         :PARAMETER.EMPNO := :EMP.EMPNO;
         EXECUTE_QUERY;
         FIRST_RECORD;
         LOOP
              EXIT WHEN :EMP.EMPNO = :PARAMETER.EMPNO;
              NEXT_RECORD;
         END LOOP;
    END;Tony

  • How to create one Oprations button (Create Button Or CreateInsert Button )for all master And Detail block?

              hi
       I have master And Detail with 4 level ,I want to have on operations button for all block in data control .
      (similar to Oracle form toolbar)
    how to do it ?

    Well, if you tell us your jdev version and what exactly you try to do, without just telling us 'as in forms' we might be able to help.
    Most of us don't know how it's done in forms. So be specific when you describe your use case.
    Timo

  • Master and details based on business component

    Hello,
    I search sample Application master and detail based on business component. how build model and View please any one know link show that step by step thank you.

    Hi
    http://docs.oracle.com/cd/E18941_01/tutorials/toc.htm
    there is not much into it really...
    you just select your model project, right click and select new and in the wizard, choose Business Components from tables.
    You should, at least have a database schema with at least one PK and FK declarations.
    the wizard will take care of everything else.
    Regards,
    Dimitris.

  • Master and Detail records in the same table

    Hi Steve,
    I have master and detail address records in the same table (self-reference). The master addresses are used as templates for detail addresses. Master addresses do not have any masters. Detail addresses have three masters: a master address, a calendar reference and a department. Addresses change from time to time and every department has its own email-account, but they refer to the same master to pre-fill some common values.
    Now I need to edit the master and detail address records on the same web page simultaneously.
    My question is: Can I implement a Master-View and Detail-View which refer to the same Entity-Object? Or should I implement a second Entity-Object? Or can it be done in a single Master-Detail-View?
    Thanks a lot.
    Kai.

    At a high level, wouldn't this be similar to an Emp entity based on the familiar EMP table that has an association from Emp to itself for the Emp.Mgr attribute?
    You can definitely build a view object that references two entity usages of the same entity like this to show, say, an employee's ENAME and at the same time their manager's ENAME.
    If there are multiple details for a given master, you can also do that with separate VO's both based on the same entity, sure. Again, just like a VO that shows a manager, and a view-linked VO of all the employees that report to him/her.

  • How to show master and detail tables in different pages?

    Hi,
    Can somebody expalin me how to include or bind the master and detail tables to different pages which are included at runtime.
    thnaks,
    Naresh.

    Hello!
    you have ti create a Master/Detail data structure.
    In the first page drag the master table, on the second drag a detail table.
    It should work out of the box. Selecting a record on the master table selects
    the details on the detail table automatically!
    regards,
    Mario Udina

  • How to set the display ratio of master and detail view

    Currently, I use SplitApp that contain the master and detail view. And I would like to show the master view on the left half and detail view on the right half. Is there any proper way to adjust this?
    Thank you in advance.

    You can set the width ratio by adding css. Check this,
    http://jsbin.com/dakir/1

  • JBO-25014: Another user has changed the row with primary key oracle.jbo.Key

    Hi,
    I am developing a Fusion Web Application using Jdeveloper 11.1.2.1.0. I have a home.jspx page that has a ADF table built on efttBilling View Object. . When you click on one of the rows in the table, it will take you to detail.jspx where you can edit the row and save. When 'save' is clicked, stored procedures are executed to update/insert rows into few tables , and then go back to home.jspx where you need to see updated content for that row.
    To get down to the exact issue, updates are made to the tables on which the efttBilling View Object is built using a stored procedure. Once this is done, I am trying to requery view object to see new content. But I keep getting JBO-25014: Another user has changed the row with primary key oracle.jbo.Key error. Following are the approaches I followed to query new results:
    a. Executed Application Modules Commit Method. Created 'Commit' Action binding and tied it to homePageDef.xml. Called this binding from a view scope bean.
        BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
         OperationBinding operationBinding = bindings.getOperationBinding("Commit");
        Object result = operationBinding.execute();
       if (!operationBinding.getErrors().isEmpty())
        return null;
    b. Marked 'Refresh on Insert' , 'Refresh on Update', 'Change Indicator' checkboxes for all the attributes in the entities associated with efttBilling View Object.
    c. Tried to Requery View Object. Created a refreshViewObject method in Application Module Impl.java file, exposed this method to the client interface and created a invokeMethod Action binding in home.jspx
    Code in Application Module:
      public void refresheftTransactionsforBillingAccountViewObj1View()
        System.out.println("In eftTransactionsforBillingAccountViewObj1");
      findViewObject("eftTransactionsforBillingAccountViewObj1").executeQuery();
    Code in view scope bean
            DCBindingContainer bindings =
           (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry();
            OperationBinding operation =
            bindings.getOperationBinding("refresheftTransactionsforBillingAccountViewObj1View");
            operation.execute();
    I have searched web, ADF forums and tried methods suggested in there but no sucess.
    Could anyone please provide some insight in this issue. I have been battling with this since quite some time. I can provide you with the log file too.
    Thanks!
    Shai.

    What code does your Commit method have .. can you try using the Commit executable from the AM itself instead ?
    Also -
    Shai wrote:
    'Change Indicator' checkboxes for all the attributes in the entities associated with efttBilling View Object.
    which all attributes you set this property for . it should just be for History columns as such.
    Did you also check if this could be your scenario ?
    Decompiling ADF Binaries: Yet another reason for &quot;JBO-25014: Another user has changed the row with primary key orac…
    OR
    JBO-25014: Another user has changed the row with primary key oracle.jbo.Key
    OR
    Another user has changed the row with primary key -Table changed externally
    Message was edited by: SudiptoDesmukh

Maybe you are looking for