Programmatic set attribute as transient or persistent in entity object

Hi I am using adf bc / faces 11.1.1.2.0 and have a need to be able to have a entity object that can run on different versions of a database,
which means that on certain versions of the database some of the columns will be there and not on the other versions.
Is that possible ? In case the columns are not there, we should just return a dummy value ! It should be possible to update the columns
in case they are marked as persistent,
Regards,
Jan

Hi Jan
I don't know if what am going to say actually makes sense but; what if some how in your SQL query you identify whether the column exists or not? I mean, your EO is going to be based with all possible columns but your VO will be in charge to fill the attributes according to whether they actually exists or not. Maybe if you can find something at SQL level that will allows you to do something like
SELECT exists(myAttribute) ? myAttribute : "dummy" ...
But I am not sure if that is possible to do in SQL.
Regards

Similar Messages

  • Validation of attribute in Entity Object with List Rule Type

    hi all
    I have an entity "currncy" and I want to make
    a validation in entity level on its attribute "Isdefaultcurrency"
    which is boolean.
    Entity Object : Currency
    attributes :
    1. Currencyid DBsequence
    2. Currencyname String
    3. Isdefaultcurrency, Boolean, CheckBox
    Rule Type : List
    Operator : In
    List Type : Query Result 'select ISDEFAULTCURRENCY from currency where ISDEFAULTCURRENCY=1'
    I want when user insert in table, validation checks the attribute 'Isdefaultcurrency'
    was true then show the error message that there was default currency and if you
    want to set it to true (or default) you must change another record that was true
    and uncheck it then back to current record and will make it true and
    there is one record in my table that its attribute 'Isdefaultcurrency' must be true
    this validation that I used , it does not work correctly and it allows to enter 2 records with
    true value for Isdefaultcurrency. In fact I want when User Enter the First record and
    set the Isdefaultcurrency to true then enter the second record and set the Isdefaultcurrency
    to true the error message will be shown.
    pleas explain it
    Edited by: Marzieh on Jan 30, 2012 9:43 PM

    Is it that you want to only allow one record in the table to have isdefaultcurrency='1'?
    yes , that is correct . I used Oracle DataBase .
    DECODE(isdefaultcurrency, 1, 1, null) please explain about it.
    isdefaultcurrency attribute has boolean Type with 0 or 1 values.
    I would like to show an error if check box was checked for the second time. The idea is that just
    one check box should be checked.
    thanks for your answer

  • Transient Attributes in Entity object vs View Object

    Hi Everyone,
    I need some suggestion with my project. I have a vendors table based on which I created an entity object (columns: vendor_id, contract_id, so on ) but I want to display vendor_name in UI which can be read from other table. I thought of using a transient attribute to populate this vendor_name.
    It is working fine when I create a new record (where I handled this in LOV return value of vendor_id field and it return vendor_id, vendor_name values) but when there is edit/view of page, this vendor_name is null which means I need to populate it during page load /refresh time. Can someone suggest me a better way to populate this transient attributes. I also want to know when should I use transient attributes in Entity object (I saw most of the developer using VO transient attributes in these kind of situation)
    Thanks,
    Ravi

    Hi,
    also want to know when should I use transient attributes in Entity object (I saw most of the developer using VO transient attributes in these kind of situation)
    transient values in entities are saved in the entity cache and thus can be changed in the UI. If you use transient attributes on the VO then these are read-only. All transient attribute however need to be populated upon page load, which you can do in a ViewRowImpl class that checks for a null value when the getter is called to then call a setter, or by using Groovy script as a default value (just set the attribute to script)
    Frank

  • JDeveloper 12.c - Entity Object Transient Attribute Behavior

    Hi
    Just wondering if the following behaviour is the expected one for a new attribute in an Entity Object;
    The only way to be allowed to write an expression as default value is if the attribute itself is persistent. If transient is selected, the only available option for default value is SQL. So I need to put as persistent momentarily while writing my expression and then change it to transient.
    Regards

    Hi,
    no, this is not intended. If you have a support contract or internal access to the bug database, please file a bug
    Frank

  • Trying to programmatically set the data-source for a Crystal reports report.

    I've got the following existing procedure that I need to add to in order to programmatically set the data-source (server, database, username, and password) for a Crystal reports report.
     I added the connectionInfo parts, but can’t figure out how to attach this to the existing
    this._report object.
    This is currently getting the connection data from the report file, but I now need to populate this connection data from a 'config.xml' text file.
    Am I trying to do this all wrong?
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using CrystalDecisions.CrystalReports.Engine;
    using WGS.Reports.Reports;
    using CrystalDecisions.Shared;
    using WGS.Reports.Forms;
    namespace WGS.Reports
    public class ReportService
    ReportClass _report;
    ParameterFields paramFields;
    ConnectionInfo connectionInfo; // <- I added this
    public ReportService()
    public void DisplayReport(string reportName, int allocationNo)
    if (reportName.ToLower() == "allocationexceptions")
    this._report = new AllocationExceptions();
    PrepareConnection(); // <- I added this
    PrepareAllocationExceptionReport(allocationNo);
    this.DisplayReport();
    private void PrepareConnection() // <- I added this
    //test - these will come from the config.xml file
    this.connectionInfo = new ConnectionInfo();
    this.connectionInfo.ServerName = "testserv\\test";
    this.connectionInfo.DatabaseName = "testdb";
    this.connectionInfo.UserID = "testuser";
    this.connectionInfo.Password = "test";
    this.connectionInfo.Type = ConnectionInfoType.SQL;
    private void PrepareAllocationExceptionReport(int allocationNo)
    this.paramFields = new ParameterFields();
    this.paramFields.Clear();
    ParameterField paramField = new ParameterField { ParameterFieldName = "@AllocationNo" };
    ParameterDiscreteValue discreteVal = new ParameterDiscreteValue { Value = allocationNo };
    paramField.CurrentValues.Add(discreteVal);
    paramFields.Add(paramField);
    private void DisplayReport()
    frmReportViewer showReport = new frmReportViewer();
    showReport.ReportViewer.ReportSource = this._report;
    showReport.ReportViewer.ParameterFieldInfo = paramFields;
    showReport.ShowDialog();
    showReport.Dispose();
    Any help would be much appreciated.

    Hi Garry,
    Please post SAP Crystal Reports questions in their own forums here:
    SAP Crystal Reports, version for Visual Studio
    We don't provide support for this control now. Thanks for your understanding.
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • How to programmatically set initial password when a user is created in OID

    We are using the odihragent synchronization process to automatically create users in OID when an employee record is created. We would like to set the initial password for the newly created user to their last name + the last 4 digits of their SSN.
    The odihragent process is successfully creating the user in OID and populates the last name and the last 4 digits of the SSN in OID. According to an open SR I have with Oracle, we cannot use the odihragent process to set the initial password because any time the employee record is updated, the synchronization process will reset the password to last name + SSN. They have recommended that we use a pl/sql plug-in to set the password using the WHEN_ADD plug-in procedure.
    I am new to using OID and plug-ins and the examples provided in the Developer's Guide are limited.
    I would like to know if anyone else is using plug-ins or another process to set initial passwords when a user is created? If you are using plug-ins would you be willing to share a code sample?

    I am surprised that I have not received any responses... Surely there are others who are experienced with programmatically setting passwords when new users are programmatically created. Does anyone have any pointers on how to best accomplish this?

  • How to programmatically set an error message for a validation rule of an EO

    Hello,
    Is there a way to programmatically set an error message when validating any data on an EO?
    It seems the API of the EO interface does not have any method to be defined for my needs..
    thanks

    The other option is that for the error message you can define a groovy expression to call an EO method.
    I documented this on my blog
    http://blogs.oracle.com/grantronald/entry/dynamic_error_messages_from_a
    Regards
    Grant

  • Trying to set control hints in entity object attributes in generic classes

    Hi, how are you? I work for a project , that uses JDeveloper 10.1.3.3 version and I am assigned to solve some problems in the part that is associated with ADF Business Components—Model—of the application. The question is how could I implement generic functionality in CustomEntityImpl and there I am to assign some control hint values to some attributes and then the entities that will extend this class will acquire this functionality in their attributes.
    I send you some code I have in my mind in order to find out how to write something relevant to set control hints. I have searched in relevant api’s for AttributeHints and EntityDef but I did not find a solution to my problem. I’ve tried this code:
    AttributeHints ah=new AttributeHints(new AttributeDef(RIBUTE_DISPLAY_HINT_HIDE ) );
    but it does not work. How could I set this value – to hide one attribute whenever it exists in my entities , setting it once in my CustomEntityImpl class?
    I’ve read the whole tutorial ADF Business Components For Forms 4GL Developers but I did not find a solution to my problem. Your help would be a gift to me. Thank you very much!
    private String primary_key = "Id";
    private final String dte_insert = "Dteinsert";
    private final String dte_update = "Dteupdate";
    private final String user_insert = "Usrinsert";
    private final String user_update = "Usrupdate";
    private final String afm = "Afm";
    protected boolean findAttribute(String name) {
    String[] list = this.getAttributeNames();
    for (int i = 0; i < list.length; i++) {                       
    if (name.equals(list))
    return true;
    return false;
    protected void doDML(int operation, TransactionEvent transactionEvent) {
    //Insert Operation
    if (operation == DML_INSERT) {
    //Add history column
    if (findAttribute(dte_insert)) {
    Date date = new Date((new Date()).getCurrentDate());
    this.setAttribute(dte_insert, date);
    //Update Operation
    else if (operation == DML_UPDATE) {
    //Add history column
    if (findAttribute(dte_update)) {
    Date date = new Date((new Date()).getCurrentDate());
    this.setAttribute(dte_update, date);
    //Delete Operation
    else if (operation == DML_DELETE) {
    //To DO
    super.doDML(operation, transactionEvent);

    I Suggest you set its Attribute on EOImpl, override doDML, and before call super.doDML set your Attribute. There is a special reason to set Attribute on beforeCommit?
    Best Regards

  • Switch between transient and persistent objects?

    Hi Folks,
    I'm Re: transient object to persistent to ask this type of question, but couldn't find an answer.
    Using persistent classes, does anyone know an elegant way to convert a transient object to a persistent one and vice versa? There is no standard functionality provided that I can see, and cloning the object results in clashing keys.
    What am I trying to accomplish?
    I need an object instance which <i>may</i> exist in the DB and if not, it <i>may</i> need to be saved for future use. I'm using a table with key fields K1 and K2 and the app will ask for an object instance using the full key K1+K2.
    If the object doesn't find a DB record for K1K2 then it should instantiate itself with values for K1blank. Here is where I'm considering transient in order to provide the app with default functionality defined in record K1+blank.
    If a write access occurs to a transient object then is should become persistent and the K1+K2 record be created.
    Any ideas appreciated.
    Cheers,
    Mike

    Hi Mike,
    I written something similar working on Persistent Objects.
    The only point of attention is that you cannot create a new persistent while a transient is resident in memory.
    This is checked by the OS system during the creation of a new persistent:
    in method CREATE_PERSISTENT of Basis Class, there is a check on the existing object:
    * Precondition   : No object exists with the given business key, neither
    *                  in memory nor on database.
    So, you can create a new transient, fill it with the values you need and then pass this values to the agent to create a new persistent, but only after releasing the existing transient (because they will have the same key).
    I've solved the problem like this:
    METHOD flush.
    "IMPORTING value(im_transient) TYPE REF TO zcl_liquidate_daily_bo
    "IMPORTING value(im_commit) TYPE xfeld
    "IMPORTING value(im_agent) TYPE REF TO zca_liquidate_daily_bo
    "RETURNING value(re_persistent) TYPE REF TO zcl_liquidate_daily_bo
    "--> raised by event PERNR_PROCESSED
      DATA: s_dip_liq TYPE zhr_tm_dip_liq.
      s_dip_liq-zpernr    = im_transient->get_employee_no( ).
      s_dip_liq-zsocmat   = im_transient->get_matricola_legale( ).
      s_dip_liq-zdataev   = im_transient->get_event_date( ).
      s_dip_liq-zcodev    = im_transient->get_event_type( ).
      s_dip_liq-zdescev   = im_transient->get_event_descr( ).
      s_dip_liq-zmotev    = im_transient->get_event_reasn( ).
      s_dip_liq-zmeseall  = im_transient->get_mese_allineamento( ).
      s_dip_liq-zannoall  = im_transient->get_anno_allineamento( ).
    * // Invalidate the transient before create the persistent!
      im_agent->if_os_factory~release( im_transient ).
      CLEAR im_transient.
      IF im_commit EQ abap_true.
        TRY.
    re_persistent =
    im_agent->create_persistent( EXPORTING i_anno_allineamento = s_dip_liq-zannoall
                                                   i_mese_allineamento = s_dip_liq-zmeseall
                                                   i_employee_no       = s_dip_liq-zpernr
                                                   i_event_date        = s_dip_liq-zdataev
                                                   i_event_type        = s_dip_liq-zcodev
                                                   i_event_descr       = s_dip_liq-zdescev
                                                   i_event_reasn       = s_dip_liq-zmotev
                                                   i_matricola_legale  = s_dip_liq-zsocmat ).
          CATCH cx_os_object_existing.
        ENDTRY.
        COMMIT WORK AND WAIT.
      ENDIF.
    ENDMETHOD.
    This method is called inside a loop on a table that containes references to transient objects.
    For each object I perform some tasks, and if all it's ok I raise the event PERNR_PROCESSED, which automatically calls this method FLUSH, transferring the transient to the persistent.
    Return Object is the new persistent, which will be passed back to the internal table, changing the content from the transient to the new persistent.
    Hope this helps,
    Roby.

  • I've got an error when trying to programmatically set a CrystalReports data-source

    I've got the following existing process that I needed to add to in order to programmatically set the data-source (server, database, username, and password) from a config.xml file.
    I added the ‘addDBConnection’ and ‘searchConfig’ parts, and this seems to be updating the existing this._report object, but I’m getting the following error and can’t figure out what is happening.
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml.Linq;
    using CrystalDecisions.CrystalReports.Engine;
    using WGS.Reports.Reports;
    using CrystalDecisions.Shared;
    using WGS.Reports.Forms;
    namespace WGS.Reports
        public class ReportService
            ReportClass _report;
            ParameterFields paramFields;
            public ReportService()
            public void DisplayReport(string reportName, int allocationNo)  
                if (reportName.ToLower() == "allocationexceptions")
                    this._report = new AllocationExceptions();
                    addDBConnection(this._report);
                    PrepareAllocationExceptionReport(allocationNo);
                    this.DisplayReport();
            private void addDBConnection(ReportDocument report)
                //Get connection parameters from config.xml file
                string servername = searchConfig("SERVER");
                string databasename = searchConfig("CATALOG");
                string userid = searchConfig("USER");
                string password = searchConfig("PASSWORD");
                //Loop through each table in the Report and subReports, and apply the new login information
                foreach (Table cTable in report.Database.Tables)
                    TableLogOnInfo loi = cTable.LogOnInfo;
                    loi.ConnectionInfo.ServerName = servername;
                    loi.ConnectionInfo.DatabaseName = databasename;
                    loi.ConnectionInfo.UserID = userid;
                    loi.ConnectionInfo.Password = password;
                    cTable.ApplyLogOnInfo(loi);
                foreach (ReportDocument subReport in report.Subreports)
                    foreach (Table cTable in subReport.Database.Tables)
                        TableLogOnInfo loi = cTable.LogOnInfo;
                        loi.ConnectionInfo.ServerName = servername;
                        loi.ConnectionInfo.DatabaseName = databasename;
                        loi.ConnectionInfo.UserID = userid;
                        loi.ConnectionInfo.Password = password;
                        cTable.ApplyLogOnInfo(loi);
            private void PrepareAllocationExceptionReport(int allocationNo)
                this.paramFields = new ParameterFields();
                this.paramFields.Clear();
                ParameterField paramField = new ParameterField { ParameterFieldName = "@AllocationNo" };
                ParameterDiscreteValue discreteVal = new ParameterDiscreteValue { Value = allocationNo };
                paramField.CurrentValues.Add(discreteVal);
                paramFields.Add(paramField);
            private void DisplayReport()
                frmReportViewer showReport = new frmReportViewer();
                showReport.ReportViewer.ReportSource = this._report;
                showReport.ReportViewer.ParameterFieldInfo = paramFields;
                showReport.ShowDialog();
                showReport.Dispose();
            private string searchConfig(string searchText)
                XDocument doc = XDocument.Load("Config.xml");
                string returnValue = "";
                var list = from x in doc.Descendants("param")
                           select new
                               Item = x.Descendants("item").First().Value,
                               Value = x.Descendants("value").First().Value
                foreach (var item in list)
                    if (item.Item == searchText) returnValue =item.Value;
                    //Console.WriteLine("Item ({0}) has a value of {1}", item.Item, item.Value);
                return returnValue;
    Am I trying to do this wrong, or do I need to do more to add the correct connection information?
    Any help would be very much appreciated.

    The code looks good - as long as the variables are correct. (You may want to consider hard coding the logon values as part of your troubleshooting steps).
    Database Vendor Codes are passed by the DB client through the report engine unmodified. E.g.; look at your database documentation for the error. I did not find anything googling the error, so do check the db docs.
    If that does not help, let us know the following:
    Does the report work in the designer?
    What version of CR? Including any Service Packs applied.
    What version of .NET?
    What database?
    How are you connecting to the database? (32 or 64 bit?)
    - Ludek
    Senior Support Engineer AGS Product Support, Global Support Center Canada
    Follow us on Twitter

  • Setting attributes question

    Hi,
    I am trying to set attributes of a object in a for loop so that it sets the attribute as many time as there are elements in the for loop and then add the object to an array list and then after exiting the array list set the same attribute to some thing else and also add it to array list so now when I print it out the array list it should print like this....
    first item in array list// coming from for loop
    second item in array list // coming from for loop
    third item // that I am setting out of array list ....
    I am doing it like this
    Bank bank = null;
    ArrayList cchList = new ArrayList();
    flag = true;
    for (int i = 0; i < arrayList.size(); i++) {
              Cutomer cutomer = (Cutomer) arrayList.get(i);
              bank = new Bank();
         falg = false;
    bank.setComments(cutomer.getDecs());
    cchList.add(bank);
    if(flag)
              bank = new Bank();
         bank.setComments(cutomer.getTxtDecs());
         cchList.add(bank);
    My problem is it is printing it twice .....
    can someone tell me what I am doing wrong here

    If I understand your problem right, you're not grouping your if-statement.
    if(flag)
    bank = new Bank();
    bank.setComments(cutomer.getTxtDecs());
    cchList.add(bank);should be
    if(flag)
        bank = new Bank();
        bank.setComments(cutomer.getTxtDecs());
        cchList.add(bank);
    }

  • Looking for a way to programmatically set the visible portion of the front panel when a subVI opens

    I am looking for a way to programmatically set the visible portion of the front panel when a subVI opens.  Haven't found any posts that relate, but I'm not sure how to ask the right question.  To be clear, I want to write a helper VI to go through a list of subVIs to make sure the background images are all in the same place when their respective subVIs open.  I hate manually playing with scroll bars before I save each of the VIs...  I'm figuring I need to find the top/left location of the background image (know how to do this already) and then set a VI FP property to  these values or some offset, but I can't find the relevant property. FP:run-timeposition:custom looked promissing, but only affects the location of the window, not the area of the front panel the window is displaying.
    Solved!
    Go to Solution.

    Cool.  Getting closer.  The way I implemented your suggestion affects the subVI only if it is open.  I can use this to do what I'm after, perhaps putting the code into each subVI.  Maybe open all subs, run the helper, and save.    Seems like I'm missing the elegant version...
    My proof of concept code:

  • Need to add row and set attribute value on pageload

    Guys,
    On my page based on the pageflowscope variable value, i need to add a row for master and one row for detail viewobject and set attribute values. (Some of the attribute are LOV and Checkboxes as well)
    I am using following code to create records.....records are being added but i am not able to set the attributes
    OperationBinding ob;
    ob = ADFUtil.findOperationBinding("Create");
    ob.execute();
    ob = ADFUtil.findOperationBinding("CreateInsert3");
    ob.execute();
    I am using following code to set the attributes value
    DCIteratorBinding dc1 = ADFUtil.getBindingIterator("firstiterator");
    DCIteratorBinding dc = ADFUtil.getBindingIterator("seconditerator");
    row1=dc1.getCurrentRow();
    row=dc.getCurrentRow();
    row.setAttribute("activest","A");
    row1.setAttribute("type","dc14");
    Anything i am doing wrong here or any suggestion to try is greatly appreciated....

    Vinod,
    Yes commit button is there and yes its also has entry in pagedef...
    When I open the same page on edit mode and i can edit regular record and save them
    Problem is that when i open the page on new mode and try to add rows on page load..... and setting values as described above.... save button somehow doesn't work...
    seems like after i add the rows on the fly, i need to refresh the binding?
    any help is greatly appreciated....
    thank you guys

  • How to add set attribute method in webdynpro abap using code wizard.

    Hi developer,
    I am new to webdynpro abap , i have developed a small component from sap technical abap but i am not able to add the set attribute method using read context node /attribute in wizard code ,pleae guide me in solution.
    thanks,
    ravi.

    Hi,
    could you copy / past your code ?
    if you need help on webdynpro and your beginner, try to watch the video on internet of WebBProfessor. It's really good videos !
    regards
    Fred

  • Set attribute to be mandatory in set type

    Hi! Can I confirm whether it is possible to set certain attribute fields to be mandatory in a set type? The transaction code to create set attribute and assign to the set type is COMM_ATTRSET.
    Thanks!
    SF

    Hi SF,
    In the standard system, you cannot configure an attribute to be mandatory in a set .
    However, you can try using transaction SFAC in order to set an attribute as mandatory; I am not sure if this procedure will work for you, but is it good to take a look. Into this transaction, you cam define which fields are displayed/hidden/mandatory.
    Keep on mind that every time a set is create in transaction COMM_ATTRSET, a corresponding module pool SAPLZOM_<set type name> is created with Screen group 0100.
    I hope it helps.
    Kind Regards,
    Gabriel Santana

Maybe you are looking for