Updating a VO  attribute

For jdev 11g pro
Can some tell me what wrong with this code. I'm trying to update a VO attribute using the RowClass Impl of the VO.
public void modifyRefDesSpaces(ViewObject view){
while(view.hasNext()){
Table_ViewObjRowImpl row = (Table_ViewObjRowImpl) view.getCurrentRow();
String refDes = row.getRefdeshj();
String newRefDes = refDes.replaceAll(" ","&nbsp");
row.setRefdeshj(newRefDes); <-- This line cause the next line to fail
view.next(); <--- Error thrown on this line
This is the error message ...
]] Root cause of ServletException.
javax.el.ELException: oracle.jbo.PersistenceException: JBO-26035: Secondary entity usage PtdDetailView is missing parts of association description.
     at javax.el.BeanELResolver.getValue(BeanELResolver.java:266)
     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
     at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:73)
     at com.sun.el.parser.AstValue.getValue(AstValue.java:118)
     at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
     Truncated. see log file for complete stacktrace
this is how the view object is set before calling the above method.
ViewObject view = service.findViewObject("Table_ViewObj1");
view.setWhereClause("PtdDetailView.EIACODXA = :project AND PtdDetailView.PCCNUMXC= :pccn");
view.defineNamedWhereClauseParam("project", null, null);
view.defineNamedWhereClauseParam("pccn", null, null);
view.setNamedWhereClauseParam("project",enterProj);
view.setNamedWhereClauseParam("pccn",enterPccn);
view.executeQuery();
modifyRefDesSpaces(view); <---- calls above method

I think you use the wrong approach to the problem.
I guess this is a follow up from your previous question (multiple spaces are compressed to one in the UI).
Do you really want to change the attributes permanently in the table (assuming that the VO is EO based)?
I would only change the appearance of the data for the UI. This is best done using a transient attribute in the VO. The getter method of this transient attribute gets the value from the DB and returns the modified content for the UI.
Doing it this way you don't need to iterate over the whole result set, you can just use the transient attribute in the UI (i.e. as a column in the table) and only the rows visible in the UI are changed when the transient attributes getter method is called. This also yields to a much better memory usage if your result contains many rows.
Your implementation (if you get it working) loads all rows into memory, even if they are never shown to the user.
To add a transient attribute to your VO go to the attribute secxtion of the VO and click add. Name the attribute appropriate (i.e. NameDisplay). Go to the client row interfaces, if they are not created already create them. shuffle all getter/setter methods from available to selected.
In the VORowImpl.java file search for the getter method i.e. getNameDisply() and change the implementation to
public String getNameDisplay()
    String refDes = row.getName();
    String newRefDes = refDes.replaceAll(" ","&_nbsp;"); // remove the _ before nbsp
    return newRefDes;
}Now, if you drag n drop the VO on a page you get an other attribute NameDisply which should be displayed correctly in the UI.
By the way, if you need to iterate over a result set the code looks like this:
view.executeQuery();
while (view.hasNext())
    // get a row and move the pointer to the next one to fetch
    Row row = view.next();
    // do something with the row
}Timo

Similar Messages

  • Update a subtype attribute in Oracle 11g

    Hi All,
    I am trying to update a subtype attribute of an object table, but getting error. If anybody can show me sample of it, I would be thankful.
    create or replace type supobj as object (a number) not final;
    create or replace type subobj under supobj (b number);
    create table test of subobj;
    insert into test values (1,2);
    insert into test values (12,21);
    insert into test values (13,22);
    insert into test values (14,23);
    select * from test;
    A     B
    1     2
    12   21
    13   22
    14   14
    Now iI want to update B's value, for which A = 13
    Expected output
    A     B
    1     2
    12   21
    13   100
    14   14

    Is there any anyway to straightway pick the attribute from the object record and update it, without updating the whole object?Like this?:
    SQL> create or replace type supobj as object (a number) not final;
    Type created.
    SQL> create or replace type subobj under supobj (b number) not final;
    Type created.
    SQL> create type subobj3 under subobj (d number)
    Type created.
    SQL> create table tabobj of subobj
    Table created.
    SQL> insert into tabobj values (subobj3 (1, 2, 3))
    1 row created.
    SQL> insert into tabobj values (subobj3 (12, 22, 32))
    1 row created.
    SQL> update (select treat (value (t) as subobj3).a a,
                   treat (value (t) as subobj3).d d
              from tabobj t)
       set d = 29302
    where a = 1
    1 row updated.
    SQL> select treat (value (t) as subobj3) subobj3  from tabobj t
    SUBOBJ3                                          
    (1; 2; 29302)                                    
    (12; 22; 32)                                     
    2 rows selected.

  • Can we update the Category attribute values of a file

    Can we update the Category attibute values of a file with out checkout the file?
    I have set the version configuration to folder and try to update the category attribute values of a file under that folder,
    It is asking to checkout the file before modifying the category attibute values.
    Is it required to checkout the file before modifying the category attribute values of that file?
    Is there any way to update the category attribute values without checkout the file?
    Please help on this

    One of the ways i can think of is using Batch Loader script for large number of files. Mention such files in Batch Loader script, and it will update category and all meta-data required in terms of next revision.
    In case number of files are less manual checkout and check-in will help.

  • Updating only specific attributes.

    Hi,
    I am using JDEV 11.1.2.1.0
    How do I update only specific attributes in a VO/EO ?
    I have already selected the specific row in the AM and set the attribute...but how do I update the changes ?
    thanks in advance.

    To persist the changes to the db, you have to commit transaction.
    Timo

  • Update set types attributes

    Dear All,
    i m new to this set types, Please guid me how to update set type attributes through driver program. Through i will get records from ECC, using this i will have to update the corresponding set types of the products matching the Product ID.
    Thanks,
    Chandra

    waiting for your replies. give some solution on this.

  • How to update OID oblogintrycout attribute through java code

    Hi Team,
    As per my requirement ,i need to update OID oblogintrycout attribute through java code. could you please help me on this.
    where can i get the java code.
    Regards,
    Ravi.

    As always, Google is your friend.
    Follow the bouncing link.
    http://www.google.com/search?hl=en&q=VisualSourceSafe+%2B+Java+API
    PS.

  • Our Client gave a requirement to mass update the additional attributes in Install base for instances in Release 11i.

    Hi,
    Our Client gave a requirement to mass update the additional attributes in Install base for instances in Release 11i.
    So I tried the below code to update:
    But getting the error:
    The Object Version Number passed does not match with the one existing in Installed Base tables.
    Can any one please help how to fix it.
    Code:
    declare
    x_instance_rec CSI_DATASTRUCTURES_PUB.INSTANCE_REC;
    p_ext_attrib_values CSI_DATASTRUCTURES_PUB.EXTEND_ATTRIB_VALUES_TBL;
    p_party_tbl CSI_DATASTRUCTURES_PUB.PARTY_TBL;
    p_account_tbl CSI_DATASTRUCTURES_PUB.PARTY_ACCOUNT_TBL;
    p_pricing_attrib_tbl CSI_DATASTRUCTURES_PUB.PRICING_ATTRIBS_TBL;
    p_org_assignments_tbl CSI_DATASTRUCTURES_PUB.ORGANIZATION_UNITS_TBL;
    p_asset_assignment_tbl CSI_DATASTRUCTURES_PUB.INSTANCE_ASSET_TBL;
    p_txn_rec CSI_DATASTRUCTURES_PUB.TRANSACTION_REC;
    x_instance_id_lst CSI_DATASTRUCTURES_PUB.ID_TBL;
    x_return_status VARCHAR2(2000);
    x_msg_count NUMBER;
    x_msg_data VARCHAR2(2000);
    x_msg_index_out NUMBER;
    t_output VARCHAR2(2000);
    t_msg_dummy NUMBER;
    p_validation_level NUMBER;
    p_commit VARCHAR2 (5);
    p_init_msg_lst VARCHAR2 (500);
    cursor stg_tab_cur is select instance_id,Safety_line_type from gewind_ib_iea_values;
    TYPE stg_tab IS TABLE OF gewind_ib_iea_values%ROWTYPE INDEX BY BINARY_INTEGER;
      stg_tab_var stg_tab;
      stg_tab_bin_int BINARY_INTEGER;
    BEGIN
    x_instance_rec.instance_id := FND_API.G_MISS_NUM;
    x_instance_rec.object_version_number := FND_API.G_MISS_NUM;
    p_txn_rec.transaction_id := FND_API.G_MISS_NUM;
    p_txn_rec.transaction_date := SYSDATE;
    p_txn_rec.source_transaction_date := SYSDATE;
    p_txn_rec.transaction_type_id := 1;
    stg_tab_bin_int :=0;
    For gewind_ib_iea_values in stg_tab_cur LOOP
    stg_tab_bin_int := stg_tab_bin_int + 1;
    P_ext_attrib_values(stg_tab_bin_int).instance_id :=gewind_ib_iea_values.instance_id;
    P_ext_attrib_values(stg_tab_bin_int).attribute_id := 10023;
    P_ext_attrib_values(stg_tab_bin_int).attribute_value := gewind_ib_iea_values.Safety_line_type;
    dbms_output.put_line(P_ext_attrib_values(stg_tab_bin_int).instance_id);
    dbms_output.put_line(P_ext_attrib_values(stg_tab_bin_int).attribute_value);
    csi_item_instance_pub.update_item_instance(
    1.0,
    p_commit,
    p_init_msg_lst,
    1,
    x_instance_rec,
    p_ext_attrib_values,
    p_party_tbl,
    p_account_tbl,
    p_pricing_attrib_tbl,
    p_org_assignments_tbl,
    p_asset_assignment_tbl,
    p_txn_rec, x_instance_id_lst,
    x_return_status,
    x_msg_count,
    x_msg_data);
    commit;
    -- Output the results
    if x_msg_count > 0 then
    for j in 1 .. x_msg_count
    loop
    fnd_msg_pub.get ( j , FND_API.G_FALSE , x_msg_data , t_msg_dummy );
    t_output := ( 'Msg' || To_Char ( j ) || ': ' || x_msg_data );
    dbms_output.put_line ( SubStr ( t_output , 1 , 255 ) );
    end loop;
    end if;
    dbms_output.put_line('x_return_status = '||x_return_status);
    dbms_output.put_line('x_msg_count = '||TO_CHAR(x_msg_count));
    dbms_output.put_line('x_msg_data = '||x_msg_data);
    COMMIT;
    end loop;
    END;
    Regards,
    Ravichander

    This question is Assumed Answered -- It would be great if you could share the solution with us.
    Thanks,
    Hussein

  • Update the proxyaddresses attribute via rsldapsync_user

    Dear Gurus,
    i configured a ldap-scenario and tested it by reading different attributes from the directory and updating the user information.
    It worked well!
    Now i want to write the proxyaddresses-attribute into the directory. i configured an exporting mapping from the e-mail address of the sap-user to the mentioned dir.-attr.. In this mapping i call a function module. For simple testing i call an ldap-module to read the actual values of the directory-attribute and write them back to the directory:
      Read table attributes with Key var = 'USERNAME' fld = 'BAPIBNAME' assigning <hybral>.
      READ TABLE <hybral>-vals index 1 ASSIGNING <vals>.
      CONCATENATE '(&(objectclass=user)(samaccountname=' <vals>-val '))' into filter.
      CALL FUNCTION 'LDAP_READ'
         EXPORTING
    *   BASE                = ''
         base_string         = 'ou=test-ou,dc=test-domain1,dc=test-domain2'
         scope               = 2
         filter              = filter
    *   FILTER_STRING       =
    *   TIMEOUT             =
         attributes          = it_attr
         IMPORTING
           ldaprc              = ldaprc
           entries             = ldapetab
         EXCEPTIONS
           no_authoriz         = 1
           conn_outdate        = 2
           ldap_failure        = 3
           not_alive           = 4
           other_error         = 5
           OTHERS              = 6
      READ TABLE ldapetab INDEX 1 ASSIGNING <ldape>.
      READ TABLE <ldape>-attributes WITH KEY name = 'PROXYADDRESSES' INTO ls_attribute_ldap.
      ls_attribute_ldap-typ = 'C'.
      INSERT ls_attribute_ldap INTO TABLE attributes_ldap.
    at the end of the module i export the values into attributes_ldap. When i debug the folowing steps, the values are cummincated throughout the ldap-function-modules that are used by rsldapsync_user. The ldap_modify module exports a returncode 53.
    Now i want to know if it is possible to update the proxyaddresses-attribute in this manner. Are there any mistakes in my thinking or in the posted function-module. Does anyone of you have some experience updating multiple line entries in Active Directory via SAP-LDAP?
    Thanks in advance

    Now i wrote a function module which reads an attribute and tries to write it back to the active directory.
    *"*"Lokale Schnittstelle:
    *"  IMPORTING
    *"     REFERENCE(IP_UNAME) TYPE  XUBNAME
    *"  EXPORTING
    *"     VALUE(EP_MAIL) TYPE  STRINGVAL
      DATA: wa_attr TYPE ldapas,
            it_attr TYPE ldapastab,
            ldapetab TYPE ldapetab,
            ldaprc TYPE ldapdefs-ldrc,
            filter TYPE ldap_filt.
      FIELD-SYMBOLS:
            <ldape>   TYPE ldape.
      wa_attr-typ = 'C'.
      wa_attr-name = 'SAMACCOUNTNAME'.
      APPEND wa_attr TO it_attr.
      wa_attr-name = 'PROXYADDRESSES'.
      APPEND wa_attr TO it_attr.
      CONCATENATE '(&(objectclass=user)(samaccountname=' ip_uname '))' INTO filter.
      CALL FUNCTION 'LDAP_SYSTEMBIND'
       EXPORTING
         serverid            = 'WSWACTIVEDIR'
       writeread           = 'W'
    *   WAIT_TIME           = 0
       IMPORTING
         ldaprc              = ldaprc
    *   BASEDN              =
    *   BASEDN_STRING       =
    * CHANGING
    *   HOLDSESS            = 0
    * EXCEPTIONS
    *   NO_AUTHORIZ         = 1
    *   CONFIG_ERROR        = 2
    *   NOMORE_CONNS        = 3
    *   LDAP_FAILURE        = 4
    *   NOT_ALIVE           = 5
    *   OTHER_ERROR         = 6
    *   OTHERS              = 7
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      CALL FUNCTION 'LDAP_READ'
       EXPORTING
    *   BASE                = ''
       base_string         = 'ou=wsw-benutzer,dc=stadtwerke,dc=loc'
       scope               = 2
       filter              = filter
    *   FILTER_STRING       =
    *   TIMEOUT             =
       attributes          = it_attr
       IMPORTING
         ldaprc              = ldaprc
         entries             = ldapetab
       EXCEPTIONS
         no_authoriz         = 1
         conn_outdate        = 2
         ldap_failure        = 3
         not_alive           = 4
         other_error         = 5
         OTHERS              = 6
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE ldapetab INDEX 1 ASSIGNING <ldape>.
      CALL FUNCTION 'LDAP_UPDATE'
        EXPORTING
          entry              = <ldape>
       IMPORTING
         ldaprc             = ldaprc
    * EXCEPTIONS
    *   NO_AUTHORIZ        = 1
    *   CONN_OUTDATE       = 2
    *   PARAM_ERROR        = 3
    *   LDAP_FAILURE       = 4
    *   HEXVAL_ERROR       = 5
    *   NOT_ALIVE          = 6
    *   OTHER_ERROR        = 7
    *   OTHERS             = 8
      IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    After LDAP_READ the ldaprc = 0.
    After LDAP_READ ldaprc is 53.
    So i can exclude a wrong mapping in transaction ldap.
    Edited by: Jan Martin Müller on Jun 9, 2010 3:17 PM

  • Update Master Data Attributes yellow in DTP

    Hi All,
    After  loading the master data DTP, the request becomes greeen but the "Update Master Data Attributes" step is still yellow. Let me know how to overocome this error
    Thanks,
    Sathya

    Hi,
    This is a master data full load and it updates more than 1 lakh records. Technically the Overall and technical status of my  DTP request becomes Green but when i go to the details tab and drill down the data package the "Update Master Data Attributes" still remains yellow so i dont think my load will update the attributes for my info object successfully.
    Is there a  solution to overcome or did anyone face this similar issue?
    Thanks
    Sathya

  • Making LDAP calls to update Active directory attributes

    Hi,
    I see a lot of postings about authenticating using LDAP, Ibut I am trying to make LDAP calls to update Active directory attributes
    How can I do this from my BPEL process ? My input xml file will have a list of users whose attributes need to be updated.
    I need to query by making LDAP calls and update as needed.
    I am a novice to a step by step guidance will be very helpful.
    Thanks much!

    This is really an AD question. Basically the easist way is to expose a web service to do this then BPEL calls that web service. I think later versions of AD do this out of the box.
    Otherwise there are many examples on Google using differnt technology.
    cheers
    James

  • ACS v5.2 - Unable to update User integer attributes through File Operations

    Hi,
         I have created some internal users on ACS v5.2 and added some Unsigned Integer attributes for each user. I am trying to do a bulk update of these integer attributes using the File Operation facility. However no matter what number I put on the import template it doesn't get updated and displays a "0" in the user config.
    The import template is validated successfully with no errors and also the string attributes are updated correctly.
    There is a sort of work around of deleting the users and adding them back in with the updated values. But this is not feasible as it would reset their passwords. I have also tried saving the csv file in Open Ofifce instead of Excel
    Has any one else come across this problem?
    (I am unable to see this issue in the Release notes or Bug tool kit although there is a similar issue when updating devices in CSCth68051)

    Hi,
         Thanks for the reply. I have managed to recreate the problem to show you but it is a bit more complicated than I first thought. The problem only occurs when the integer attributes are added after the user is created.
    I created a dummy user. The MTL and TLS attributes were present before the user was added. I then added the XXX and ZZZ attributes afterwards and assigned them default values. The default values show up in the GUI config.
    However when I export the database to a csv file only the values of the MTL and TLS attributes show up in the export file:
    I then downloaded an import template and updated the integer values for TLS,MTL, XXX and ZZZ for the dummy user:
    The file imports successfully with no errors. However, when I display the user config only the MTL and TLS attributes have changed. The XXX and ZZZ attributes have stayed the same.
    I thought it might be because I was assigning a default value of 0 to the new attributes but I assigned ZZZ a default value of 1 and the same thing occurred.

  • Update rule from attribute

    Hi, my problem may be simple to solve, but I dont know too much ABAP so need some help.
    I want to populate Cost Center in my cube by mapping it to Responsible Cost Center (attribute of Order Number).
    How can I do that?
    Thanks,
    Frank

    Hi Frank,
    Insert Cost Center in Communication Structure and then in Start Routine of Update Rules insert this code (substitute definition with the IO code, cut off '0'):
    data: begin of t_costcent occurs 0,
    costcenter like /BI0/Pcostcenter-costcenter,
    responsible like /BI0/Pcostcenter-responsible,
    end of t_costcent.
    select * into corresponding fields of table t_costcent
    from /BI0/Pcostcenter where  objvers = 'A'.
    loop at DATA_PACKAGE.
    read table t_costcent with key
    responsible = DATA_PACKAGE-responsible
    if sy-subrc = 0.
    DATA_PACKAGE-costcenter = t_costcent-costcenter.
    modify DATA_PACKAGE.
    endif.
    endloop.
    Ciao.
    Riccardo.

  • How to update a Date attribute type?

    Hello!
    I have several Date attributes in some categories that I need to update with the Oracle Content API.
    I saw that OCDB returns a GregorianCalendar object to retrieve the date value, but I can't update it with the same object, I used this java code:
    day = token.nextToken();
    month = token.nextToken();
    year = token.nextToken();
    int iDay = Integer.parseInt(day);
    int iMonth = Integer.parseInt(month);
    int iYear = Integer.parseInt(year);
    GregorianCalendar cal = new GregorianCalendar(iYear, iMonth, iDay);               
    categoryDef2[temporal2] = ClientUtils.newNamedValue(oculto, cal);
    The date is in format dd/mm/yyyy so I parse it with StringTonekizer and passed to GregorianCalendar constructor, but I always receive AggregateError at updateDocument moment...
    Anyone can help me? Thank you

    Hi,
    Convert the Calendar to a Date object and return this to Content DB.
    e.g. Item doc = ...
    Object value = CommonUtils.getAttribute(doc, Attributes.CREATE_DATE);
    Date d = null;
    if (value instanceof java.util.Calendar)
    Calendar c = (Calendar) value;
    d = c.getTime();
    else if (value instance of java.util.Date)
    d = (Date) value;
    cheers
    Matt

  • Disable User on updating an User attribute in OIM

    Hi,
    I have OIM 11g R2 with LDAP SYNC enabled with OID through OVD.
    I want to trigger Disable user on modifying an UDF attribute of user.
    Like if attribute1 of user is set to true then disabke user operation should be triggered for the user.
    So first in my adapter i will check whether attribute is true and then trigger disable user.
    In 11g R2 as mapping adapters attached to Users form in dataobject manager is not supported i am not able to map to the userdefinition and hence not able to check if attribute1 is true or false.
    Please help and let me know if this can be achieved in any other way.
    Edited by: 988070 on Mar 20, 2013 3:55 AM

    You can write a post process event handler:
    It will update the user status to disable when UDF attrtibute is set to true.
    For this, you need to set the condition as:
    Get the value of user defined attribute and store it in a variable "flag".
    disable UserManagerResult disable(java.lang.String attributeName, java.lang.Object attributeValue) //attributeName will be user defined fieldm value will be "true"
    throws ValidationFailedException,
    oracle.iam.platform.authz.exception.AccessDeniedException,
    UserDisableException,
    NoSuchUserException,
    SearchKeyNotUniqueException
    Disables the user account matching the search criteria.
    Parameters:
    attributeName - - The attribute name for the search criteria.
    attributeValue - - The attribute value for the search criteria.
    Returns:
    UserManagerResult containing the entity id of the disabled user.
    Cheers,
    Vamsi.

  • How to delegate permission to user to update only his attribute

    i create GPO logon that Update user descreption
    and to do  that h had to delegate  Permission "property-specifc" to user to write in descreption  attribute
    and that work
    but the problem is the user can update other user descreption if he use secripts
    and i want user to update only his descreption

    Hi,
    This is Exchange server forum. I would like to verify if there is an Exchange server. Actually, we have a dedicated support team regarding the Microsoft Windows server, I recommend you ask your question on our Windows server forum which is staffed by more
    experts specializing in this kind of problems. Thanks for your understanding.
    For your convenience:
    http://social.technet.microsoft.com/Forums/windowsserver/en-US/home?category=windowsserver
    If you have any problem with Exchange server, welcome to our Exchange forum.
    Hope it helps.
    Best regards,
    Amy Wang
    TechNet Community Support

Maybe you are looking for

  • I cant put my music in itunes.somebody help please?

    I have my own music, the same music is on a cd, but i tried to save it on my desktop,and then drag and drop.i did this,dragged and dropped,but no music appeared on the itunes playlist.what is wrong?

  • Please help omg I need music.

    When I plug my iphone into my computer to download music, the device doesn't show up on my itunes. How can I get it to show up? I really wanna download music and it's not working and i'm not a happy camper help

  • Apple Mail constant popup/slows system, want to delete  Mailboxes

    Mail constantly pops up asking for mailbox passwords to be re-entered, runs slow, never truly synced to the actual mail account. I have too many email accounts and never use Mail on my desktop. How do I delete all the mailboxes and reset Mail to fact

  • Error when trying to se smtp over ssl

    Hi all , I have a webdynpro application that sends mail using smtp over ssl . Ihvae imported the ca certificate to trused ca key store , but when I run the application I get the following error : javax.mail.MessagingException: Exception reading respo

  • How to save my files for moving computers??

    recently ive just pre-ordered the new Snow leopard & also got iLife 09 on the way, but rencently ive been having a few problems with my macbook. so i thought when i get all the software, im just gonna re-install MAC OSX again and then add on ilife an