OLAP API to get child nodes ?

Hi, I am new to OLAP API (Java), I spend some months in Hyperrion Essbase JAPI, now turn to Oracle but feel quite confused about a lot of concept. Here is a task in my hand that is to present the dimension tree in XML format, just like:
<?xml version="1.0" encoding="GBK"?>
     <Member name="Market" gen="1">
          <Member name="East" gen="2">
               <Member name="New_York" gen="3" />
               <Member name="Boston" gen="3" />
               <Member name="Chicago" gen="3" />
          </Member>
          <Member name="West" gen="2">
               <Member name="San_Francisco" gen="3" />
               <Member name="Seattle" gen="3" />
               <Member name="Denver" gen="3" />
               <Member name="Los_Angeles" gen="3" />
          </Member>
          <Member name="South" gen="2">
               <Member name="Dallas" gen="3" />
               <Member name="Houston" gen="3" />
               <Member name="Phoenix" gen="3" />
          </Member>
     </Member>
     <Member name="Product" gen="1">
          <Member name="Audio" gen="2">
               <Member name="Stereo" gen="3" />
I didn't find ways on how to get child nodes for a given node, for example, how can I get East,West,South,North nodes (called "member" in Essbase) from "Market" node?

Hi, I am new to OLAP API (Java), I spend some months in Hyperrion Essbase JAPI, now turn to Oracle but feel quite confused about a lot of concept. Here is a task in my hand that is to present the dimension tree in XML format, just like:
<?xml version="1.0" encoding="GBK"?>
     <Member name="Market" gen="1">
          <Member name="East" gen="2">
               <Member name="New_York" gen="3" />
               <Member name="Boston" gen="3" />
               <Member name="Chicago" gen="3" />
          </Member>
          <Member name="West" gen="2">
               <Member name="San_Francisco" gen="3" />
               <Member name="Seattle" gen="3" />
               <Member name="Denver" gen="3" />
               <Member name="Los_Angeles" gen="3" />
          </Member>
          <Member name="South" gen="2">
               <Member name="Dallas" gen="3" />
               <Member name="Houston" gen="3" />
               <Member name="Phoenix" gen="3" />
          </Member>
     </Member>
     <Member name="Product" gen="1">
          <Member name="Audio" gen="2">
               <Member name="Stereo" gen="3" />
I didn't find ways on how to get child nodes for a given node, for example, how can I get East,West,South,North nodes (called "member" in Essbase) from "Market" node?

Similar Messages

  • Get Child node rowkey of a richtreetable in Javascript

    Hello,
    I ve been trying for a while now and any help is greatly appreciated.
    Using Javascript, when clicked on a tree node, i would like to traverse to the first child node and get the rowkey.
    Thanks.

    Hi,
    Basically, we have a rich tree table with child nodes as well.
    When a user discloses a node, the selected row key stays at the top node but i would like to focus it on the child node.
    We already do that through managed bean ((JUCtrlHierNodeBinding)node.getChildren().get(0)) but on the client side, it s still not making child node as selected
    even though in the bean, we have tree.SetSelectedRowKeys with the child node.
    So, our CSS highlight on the child node goes away once we do any other click.
    This does not happen if we click on the child node specifically.
    Hence , we would like to do that traverse down at script level as well and do the selection part.
    Another problem with this is that since the top node behaves as selected(which is correct bcos the expand-collapse is at the top node and we click that icon), user is not
    able to click on top node to see some other data.
    Pls guide me on this where i ve gone wrong.
    and i do have addPartialTarget code in the bean as well but it s not behaving the way we want.
    Thanks.
    Edited by: Jay on Apr 7, 2011 10:19 AM

  • Getting child nodes using sax

    How can i get the value of childnodes in java using sax?

    Just wait a while. The child nodes will be passed to you after the parent nodes. Of course, you will have to keep track of which child nodes of which parent elements you want, but you probably know this already. If you want to process the entire file first and then decide which child nodes are of interest, read up on one of the DOM-ish approaches.
    Dave Patterson

  • Can't get child node in tree selection listener

    I am making a fusion web application using JDeveloper 11G (11.1.1.2.0).
    I have created two view objects linked together. Let's call them VoDepartments and VoEmployees, linked on DepartmentId.
    I hava made a tree with a af:switcher
    <af:switcher id="s1" facetName="#{node.hierType.structureDefName}">
    <f:facet name="view.VoDepartments">
      <af:outputText value="#{node}" id="ot1"/>
    </f:facet>
    <f:facet name="view.VoEmployees">
      <af:outputText value="#{node}" id="ot2"/>
    </f:facet>
    </af:switcher>I made a selection listener based on a guide by Frank Nimphius
    RichTree tree1 = (RichTree) selectionEvent.getSource();
    RowKeySet rks2 = selectionEvent.getAddedSet();
    Iterator rksIterator = rks2.iterator();
    if (rksIterator.hasNext()){
      List key = (List)rksIterator.next();
      JUCtrlHierBinding treeBinding = null;
      treeBinding = (JUCtrlHierBinding) ((CollectionModel)tree1.getValue()).getWrappedData();
      JUCtrlHierNodeBinding nodeBinding = nodeBinding = treeBinding.findNodeByKeyPath(key);
      String nodeStuctureDefname = nodeBinding.getHierTypeBinding().getStructureDefName(); //Here is the nullpointerexception for employees
      String employees = "view.VoEmployees";
      String departments = "view.VoDepartments";
      if (nodeStuctureDefname.equalsIgnoreCase(departments)){
       String dept = (String) nodeBinding.getAttribute("Department_name");  
       System.out.println("Department = "+dept);
      else if (nodeStuctureDefname.equalsIgnoreCase(employees)){
       String emp = (String) nodeBinding.getAttribute("First_name");  
       System.out.println("Employee = "+emp);
      else{
       //what the heck did the user click on? Ask him ;-)
    }Pagedef:
    Executables:
    <iterator Binds="VoDepartments2" RangeSize="25" DataControl="AppMainDataControl" id="VoDepartments2Iterator"/>
    Bindings:
    <tree IterBinding="VoDepartments2Iterator" id="VoDepartments2">
    <nodeDefinition DefName="view.VoDepartments" Name="VoDepartments20">
      <AttrNames>
       <Item Value="DepartmentId"/>
      </AttrNames>
      <Accessors>
       <Item Value="VoEmployees"/>
      </Accessors>
    </nodeDefinition>
    <nodeDefinition DefName="view.VoEmployees2" Name="VoDepartments21">
      <AttrNames>
       <Item Value="First_name"/>
       <Item Value="Last_name"/>
      </AttrNames>
    </nodeDefinition>
    </tree>The tree works just fine and list all it should list. I can click the department and my selection listener print the departments name in the console.
    I can expand a department and list all employees. The problems is when I click an employee, I get null pointer exception.
    I have found out that the selectin listener can't find nodeBiding for employees. So nodeBinding.getHierTypeBinding().getStructureDefName(); throw NullpointerException.
    Anyone have an idea of what's wrong? Please help.
    -Thomas
    Edited by: Thomas H on Mar 22, 2010 8:21 AM

    Hi,
    if you open the tree binding editor, it has an entry "Target Data Source" for each of the node levels that you can use and point to an iterator binding representing the node. Not sure if this solves the issue, but chaces are.
    1. create an iterator for a child VO (using the not dependent child VO instance)
    2. Edit Target Data Source for the binding to e.g. ${bindings.EmployeesView1Iterator}
    Frank

  • Get child nodes and only child nodes from a tree?

    Hi all,
    Relatively simple table
    create table replaced_parts
    old_part_number varchar(7),
    replaced_part_number varchar(7),
    updated_date date
    insert into Replaced_parts values('AAAAA/1', 'BBBBB/1', '2012-Feb-16');
    insert into Replaced_parts values('BBBBB/1', 'FFFFF/1', '2012-Feb-23');
    insert into Replaced_parts values('YYYYY/3', 'ZZZZZ/3', '2012-Mar-17');
    insert into Replaced_parts values('FFFFF/1', 'LLLLL/1', '2012-Mar-18');
    insert into Replaced_parts values('LLLLL/1', 'HHHHH/1', '2012-Mar-19');The question is how do I issue a select using 'AAAAA/1' and get the result 'HHHHH/1'
    i.e. (A... -> B, B->F, F->L, L->H)
    and select using 'YYYYY/3' to get 'ZZZZZ/3' (Y... ->Z)?
    It would be really nice if I could also get my original value, say, 'CCCCC/1' if there is no entry
    for 'CCCCC/1' in the replaced_parts table (maybe NVL?).
    I have googled and tried various combinations of CONNECT BY, PRIOR, ISLEAF... &c. but
    am beating my head off a brick wall at the moment.
    TIA,
    Paul...

    >
    Hi, Paul,Hi again Frank - couldn't sleep and am back at the "£$%^&* computer...
    Yeah - it's a pity they weren't correct - I'll make doubly sure in future - see
    my edited post (with DROP TABLE commands inter alia - I also removed
    Order_Parts.User_Number since it was redundant - all that's needed is
    Order_Number (normalisation) so now your SQL doesn't work - sorry
    about that.
    Just saying something "doesn't work" isn;t very helpful. What exactly is wrong with the SQL
    statements I posted? Point out a couple of places where they are wrong, and explain how
    you get the right results in those places.Nothing is wrong with your SQL - I meant *sorry* about the confusion in the DDL/DML from my end.
    Now, I'm sorry again about the ambiguity of my English.
    I'll reconstruct the original data that I gave you and re-run your SQL against that data - again,
    this is *totally* my fault.
    My tables creation script seems to work fine now - I've edited my reponse to Solomon - the definitive scripts
    are now there - with Order_Parts.User_Number gone and the TO_DATE(...) as
    you suggested - the VARCHARs seemed to give the right result though - but I
    agree that if there's a correct way of doing it, then it should be done that way.
    Remember why you need to go to the trouble of posting CREATE TABLE and INSERT statements
    for some sample data here. It's to allow the people who want to help you to re-create the prolem
    and test their ideas. I know, and that's why I did it - the OR REPLACE that I added (stupidly and without thinking or testing) was
    so that people wouldn't have to go to the trouble of dropping the tables - I have now added
    DROP TABLE blah... to the beginning of the script so it won't be necessary.
    I have over 600 posts on this forum and only 26 questions - most of my time
    spent here is trying to help (to the best of my limited ability - I'm not a guru
    like yourself) and learning - it's amazing the number of times problems that
    I've seen here have subsequently arisen at work - and I am frequently
    frustrated by some posters' inability to explain their problem or at least give test
    cases.
    I can forgive bad English (except my own) - not everybody is a fluent speaker of the language,
    but SQL should run no matter what language one speaks.
    I appreciate that people are volunteering their time and effort here and I really do
    try and make it as easy as possible for them when I ask questions - I messed up
    this time, I'm afraid. It might also be the fact that I'm moving between SQL*Plus
    and SQL Developer and a text editor that I got confused (plus, fatigue didn't help...)
    In general, other people are not going to test anything on your system. I'm going to test
    things on my system, Solomon will test things on his system, and other people will test things
    on other systems. Well, if ever you're in Dublin ;). Again, I appreciate the effort that you, Solomon and sKr have
    gone to in helping me.
    Your INSERT earlier statements did not work on my system, because you were using a VARCHAR2
    in a place where a DATE was required. The correct thing to do is to use DATEs where DATEs are required. Indeed, and I agreed with you that if there's a right way of doing it, then it should be done that way.
    If your NLS settings are such that this is not causing you any errors right now, it's still a good
    idea for you to fix it; but, at any rate, whether it works on your system isn't what's important in
    this case; you're posting it to run on other peoples' systems.Ahhh.... <the blinding light of a moment of epiphany descends on Paul> I didn't realise it was
    an NLS setting - of course Americans will be different - it's just that I thought that YYYY-Mon-DD
    worked everywhere (I tried to avoid the day-first/month-first pitfall ) but now that you've explained
    it to me, I'll *never* make that mistake again.
    Yes - my mistake - I've now corrected the error
    Where are the desired results? Don't merely hide them in an old message; post them in a new message.OK. I'll put it in a reply to this post. I really am endeavouring to be as clear as possible - please
    excuse my errors - I will do better in future. I'm also very annoyed at my own incompetence and at
    having put you to more trouble than you would have had to go to if I had my wits about me.
    - should I keep Order_Parts.User_Number even
    if it isn't conformant to normalisation rules?
    If you have a good reason, it's okay to store de-normalized data. For example, some address tables in
    the US contain both state and ZIP code, even though state is fucntionally depenedent on ZIP code. I think that in this case, denormalisation is not called for.
    Re. the ZIP code thing, yeah, sure AIUI, the first two digits are dependent on the state, but the
    last three? They're more or less random - at least in the sense that there's no way to type
    in an address and calculate (mathematically, using a formula) them - so unless one were
    to have weird SQL lookups to a "State" table for the first two digits and then take the final
    three from a user-entered string field, then do a TO_CHAR on the returned 2-digit state number and add
    this to the 3-character one - I can't see how the ZIP code is an example of this? But, maybe
    (unless you wish to discuss that) we're getting side-tracked. Perhaps I'll ask this question
    on comp.databases.theory?
    Oracle actually added a new feature in version 11 (virtual columns) to make de-normalizing easier.Hmmm... is adding virtual columns denormalisation per se? My favourite "cheap'n'cheerful"
    db server (Firebird) has had a COMPUTED BY clause (same idea) for yonks (> 12yrs) - no data
    is actually stored - rather it is calculated on the fly. Another one for comp.databases.theory
    perhaps?
    BTW, wouldn't triggers remove all this hassle? It was my first idea, but trying to do it
    purely through SQL is now *obsessing* me ;)
    That would be another example of de-normalization. If the benefits of doing that outweigh the
    costs, then go ahead. A trigger will take some effort to maintain, and it will make all DML slower, regardless
    of how often that derived value is needed. Having the extra column will make some queries simpler and faster. Disk is cheap. Have an Original_Orders table (never changes) and a Revised_Orders table. When
    a part replacement occurs - for orders that haven't been fulfilled (boolean flag?), change the
    old part number to the new one. I can't imagine that replacement occurs very frequently, so
    the expense of a trigger would IMHO be minimal - plus the down side of any trigger would
    be mitigated by greatly simplifying the production of the Revised_Orders report?
    ... I'll experiment with what you've given me so far - but it's 23:40 here now, so I won't
    get a chance to do it tonight - unfortunately, I *do* have to sleep.
    If you haven't tested it yet, why did you start this message saying "your SQL doesn't work"?Sorry - what I meant was it obviously doesn't work when this eejit (i.e. me) has changed
    the table structure - I did run it quickly (your 1st statement) against the (revised table
    structure, the one you hadn't seen and I don't think even a man of your great SQL talents
    can be expected to write working queries against unknown table structures :)).
    Again, thanks for your help so far - I'll post the *_correct_* DDL and DML as a reply to this post
    with the desired result. I'll also reconstitute the old (i.e. the one you worked against) tables
    and data and let you know - again as a reply to this post - if I can at least learn something
    from my fiasco, it won't have been a total waste of my time, and again, apologies for
    wasting yours.
    Thanks again and rgs.
    Paul...
    Edited by: Paulie on 22-Mar-2012 02:50

  • How to get Parent nodes and corresponding child nodes in BI Hierarchy

    Hi all,
    I have a standard function module 'RSNDI_SHIE_STRUCTURE_GET3'  to get child node if i pass parent node. But I need child nodes along with the provided parent node as I use this in a loop in BI.
    Thanks

    Could any one help me in this regards .
    Thanks in advance
    Regards,
    sri

  • HOw to get parent node name value through its child node?

    Hi,
    Experts,
    I am able to get child node name values but according to attribute name value i want to  get its parent name value how to achieve that. For that i have used If_Ixml_element->Get_parent. Please pass some idea on it.
    Thanks in advance,
    Shabeer ahmed.

    Hello Shabeer
    I think the coding should be straightforward:
    DATA: lo_element   TYPE REF TO if_ixml_element,
              lo_child        TYPE REF TO if_ixml_node,
              lo_parent      TYPE REF TO if_ixml_node.
    " NOTE: LO_ELEMENT holds your child node
      lo_child ?= lo_element.
      lo_parent = lo_child->get_parent( ).
    Regards
      Uwe

  • Getting the value of a child node in an array

    How do you get the value of a child node in an array titled "entries"?  I used to do this in AS2, and now I'm trying in AS3.  To top it off, I'm forced to use an XML format I'm unfamiliar with.  So I'm not sure how to access these nodes in AS3.  An example of the XML is;
       <Row>
        <Cell><Data ss:Type="String">Absorption Areas</Data></Cell>
        <Cell><Data ss:Type="String">Drain fields where left over liquid from the septic system soak into the ground.</Data></Cell>
       </Row>
    How would I access ether of the <Cell> rows?
    Thanks

    Given that you declared ss namespace (otherwise it will throw an error) you have two options:
    xml.Cell[0].Data - will output:
    Absorption Areas
    xml.Cell.Data will output:
    <Data ss:Type="String">Absorption Areas</Data>
    <Data ss:Type="String">Drain fields where left over liquid from the septic system soak into the ground.</Data>
    So, xml.Cell.Data[1] will output:
    Drain fields where left over liquid from the septic system soak into the ground.

  • Getting list of possible child nodes

    I'm trying to find an automated way to get a list of all the possible child nodes for a given element based on a schema. How does one go about doing that in Java? The closest match I could find was the class ElementEditAS, but it's deprecated with no mentioned replacement or alternative.
    Any help would be greatly appreciated.

    You are right, but what may seem simple is not.
    1) You can have combinations of choice and sequence constructs in the contents.
    2) The element definitions are just references to true definitions somewhere else.
    3) You can include other schema files, so you need to work with an arbitrary number of files at the same time.
    Basically, all you have to do is read one or more schema files as XML files, probably using DOM or JDOM or whatever you know. Avoid SAX, since you need the full tree structure of the schema file.
    Having done something similar, be aware that element names are described in attributes of the element tag, and attributes are defined as elements. Be ready to redo your code a time or two because the names you use (attribute and element) are not working as you expected.
    Dave Patterson

  • How to i get the connect to database with OLAP API 9.2.0.0

    hi all,
    when i use the OLAP API (9.2.0..0) to connect the database,i gained the message of the following:
    java.lang.NoClassDefFoundError: com/sun/java/util/collections/HashMap
    void oracle.express.olapi.transaction.ExpressTransactionProvider.<init>()          ExpressTransactionProvider.java:40
         void mypackage3.APPEX.init()
              APPEX.java:51
         void sun.applet.AppletPanel.run()
              AppletPanel.java:344
         void java.lang.Thread.run()
              Thread.java:484
    JDev=9.0.3
    OLAP API=9.2.0.0
    Oracle 9i 9.2.0.1
    and how can i get the OLAP API 9.2.0.4.1?
    anyone can help me !
    thanks!!!

    Hi, yes, there are at least two known ways:
    1. if you happen to have a UCCX premium, you can create an HTTP application that serves up the prompt file,
    2. you can try to access the prompt file like this: http://<uccxip>:9080/prompts/dirname/promptfilename.wav
    G.

  • Xpath: get attributes from first child node

    Hi,
    I have some problems by getting the attributes from the first child node, if i try to get child elements everything works fine, but whenever i need the elementvalue from a node with attributes i doesn't return anything.
    The xpath expression works fine if i want to get the element value from all childs, but not when i just want from one of them.
    This one works,
    XPathFactory factory1 = XPathFactory.newInstance();
        XPath xpath = factory1.newXPath();
        xpath.setNamespaceContext(new PersonalNamespaceContext());
        XPathExpression expr
         = xpath.compile("//default:DeviceExchange[1]/default:Status/text()");
       // gets the value of the node picked out
        Object result = expr.evaluate(doc, XPathConstants.NODESET);
        NodeList nodes = (NodeList) result;
        for (int i = 0; i < nodes.getLength(); i++) {
          names[i] = nodes.item(i).getNodeValue();
          String a = names;
    // checks if status is exchanged, if it is sets status to 1
    if (a.length() == 9){
    names[i] = "1"; }
    else{  names[i] = "0";}
    System.out.println(names[i]);This doesn'tXPathFactory factory2 = XPathFactory.newInstance();
    XPath xpath2 = factory2.newXPath();
    xpath2.setNamespaceContext(new PersonalNamespaceContext());
    XPathExpression expr2 = xpath2.compile("//default:DeviceExchange[1]/default:Field[@names='MLPKTID']/text()");
    Object result2 = expr2.evaluate(doc, XPathConstants.NODESET);
    NodeList nodes2 = (NodeList) result2;
    for (int i = 0; i < nodes2.getLength(); i++) {
    names2[i] = nodes2.item(i).getNodeValue();
    System.out.println(names2[i]);}Does anyone have any ideas? I will apreciate all help!
    Edited by: fusen on Oct 25, 2007 1:12 AM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    Sorry, solved myself. Just � typo that that i couldn't detect.

  • Error getting schema root with OLAP API

    I am getting the following error:
    java.sql.SQLException: Io exception: Connection reset by peer: JVM_recv in socket input stream read
         void oracle.jdbc.dbaccess.DBError.throwSqlException(java.lang.String, java.lang.String, int)
         void oracle.jdbc.dbaccess.DBError.throwSqlException(int, java.lang.Object)
         void oracle.jdbc.dbaccess.DBError.throwSqlException(java.io.IOException)
         void oracle.jdbc.driver.OracleStatement.executeNonQuery(boolean)
         void oracle.jdbc.driver.OracleStatement.doExecuteOther(boolean)
         void oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout()
         int oracle.jdbc.driver.OraclePreparedStatement.executeUpdate()
         boolean oracle.jdbc.driver.OraclePreparedStatement.execute()
         oracle.express.idl.ExpressMdmModule.MetadataPropertyBagUnion[] oracle.express.idl.ExpressMdmModule.MetadataProviderInterfaceStub.getMetadataPropertyBags(java.lang.String[])
         oracle.express.mdm.MetadataPropertyBag[] oracle.express.mdm.MetadataPropertyBagFetcher.fetchMetadataPropertyBags(java.lang.String[])
         oracle.express.mdm.MdmObject oracle.express.mdm.MdmMetadataProvider.getMetadataObject(java.lang.String)
         oracle.express.mdm.MdmSchema oracle.express.mdm.MdmMetadataProvider.getRootSchema()
         void mypackage3.olaptest.<init>()
         void mypackage3.olaptest.main(java.lang.String[])
    java.lang.NullPointerException
         oracle.express.mdm.MetadataPropertyBag[] oracle.express.mdm.MetadataPropertyBagFetcher.fetchMetadataPropertyBags(java.lang.String[])
         oracle.express.mdm.MdmObject oracle.express.mdm.MdmMetadataProvider.getMetadataObject(java.lang.String)
         oracle.express.mdm.MdmSchema oracle.express.mdm.MdmMetadataProvider.getRootSchema()
         void mypackage3.olaptest.<init>()
         void mypackage3.olaptest.main(java.lang.String[])
    ***Exception encountered : java.lang.NullPointerException
    Process exited with exit code 0.
    ... when running the following code
    try {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    String url = "jdbc:oracle:thin:@jonm2000:1521:jonm";
    String user = "sh";
    String password = "sh";
    oracle.jdbc.OracleConnection conn = (oracle.jdbc.OracleConnection)java.sql.DriverManager.getConnection(url, user, password);
    ExpressTransactionProvider tp = new ExpressTransactionProvider();
    ExpressDataProvider dp = new ExpressDataProvider(conn, tp);
    dp.initialize();
    MdmMetadataProvider mp = null;
    mp = (MdmMetadataProvider) dp.getDefaultMetadataProvider();
    MdmSchema root = mp.getRootSchema();
    dp.close();
    conn.close();
    catch(Exception e) {
    System.out.println("***Exception encountered : " + e.toString());
    e.printStackTrace();
    It is also brings down the Oracle database.
    I am running:
    JDeveloper 9.0.2.822.0
    Oracle Database 9.0.2.1.0
    The code I am running is pretty much copied from the Oracle OLAP API guide - does anyone know why I am getting problems?

    It appears to be missing metadata. Since you are trying to get the schema, this is most likely a field that is required but not present (something silly, like labels). Try the following scripts posted below that verify metadata.
    When creating solved level hierarchies, all of these dimensions require 4 special dimension attributes. All 4 of these dimension attributes require a level attribute to be mapped to a populated column in each of the solved hierarchies.
    The 4 special attributes are:
    GID
    PARENT_GID
    ET
    PARENT_ET.
    You can check if these attributes exist with the following query:
    SELECT DA.OWNER,\n\
    DA.DIMENSION_NAME,\n\
    DA.ATTRIBUTE_NAME,\n\
    NVL(DA.DISPLAY_NAME, DA.ATTRIBUTE_NAME),\n\
    NVL(DA.DESCRIPTION, DA.ATTRIBUTE_NAME),\n\
    (CASE WHEN D.DESCRIPTOR_VALUE = 'Long Description' THEN 4\n\
    WHEN D.DESCRIPTOR_VALUE = 'Short Description' THEN 5\n\
    WHEN D.DESCRIPTOR_VALUE = 'End Date' THEN 1\n\
    WHEN D.DESCRIPTOR_VALUE = 'Time Span' THEN 2\n\
    WHEN D.DESCRIPTOR_VALUE = 'Year Ago Period' THEN 3\n\
    WHEN D.DESCRIPTOR_VALUE = 'Grouping ID' THEN 6\n\
    WHEN D.DESCRIPTOR_VALUE = 'Parent Grouping ID' THEN 7\n\
    WHEN D.DESCRIPTOR_VALUE = 'ET Key' THEN 8\n\
    WHEN D.DESCRIPTOR_VALUE = 'Parent ET Key' THEN 9\n\
    ELSE 0\n\
    END)\n\
    FROM ALL_OLAP2_DIM_ATTRIBUTES DA,\n\
    all_olap2_entity_desc_uses edu,\n\
    all_olap_descriptors d\n\
    where\n\
    DA.OWNER = EDU.ENTITY_OWNER (+)\n\
    AND DA.DIMENSION_NAME = EDU.ENTITY_NAME (+)\n\
    AND DA.ATTRIBUTE_NAME = EDU.CHILD_ENTITY_NAME (+)\n\
    AND EDU.DESCRIPTOR_ID = D.DESCRIPTOR_ID (+)\n\
    ORDER BY DA.OWNER, DA.DIMENSION_NAME, DA.ATTRIBUTE_NAME
    For these 4 attributes, it's not enough that they just exist, (note you can name them whatever you want) but they also have to be marked as the appropriate type as per the above SQL.
    Note also that the above SQL checks for other specially marked attributes such as Long/Short Description and End Date/Time Span. These attributes can exist without being marked as such (and can even be missing completely), and OLAP API will still function. However, I believe the OLAP API functions "better" if these attributes exist and are marked as special.
    The below SQL will check your column mappings for all attributes. (As a general rule, you shouldn't have to worry too much about mapping any CWMLITE logical entity to a valid table/column, because the CWMLITE API should catch if you don't use a valid table/column.)
    select owner,\n\
    dimension_name,\n\
    hierarchy_name,\n\
    level_name,\n\
    attribute_name,\n\
    table_owner,\n\
    table_name,\n\
    column_name,\n\
    (case when dtype = 'NUMBER' then 0\n\
    when dtype = 'DOUBLE' then 5\n\
    when dtype = 'FLOAT' then 4\n\
    when dtype = 'DATE' then 7\n\
    else 1 end)\n\
    from\n\
    all_olap2_dim_level_attr_maps\n\
    ORDER BY OWNER, DIMENSION_NAME, HIERARCHY_NAME, ATTRIBUTE_NAME
    Finally, note that any hierarchy which you map as coming from an AW will be a solved level hierarchy.

  • OLAP API does not finish Template code sample, can I get it?

    I am using the OLAP API JavaDoc as well as the OLAPAPI Guide, specifically referring to the Templates and how to use them, Chapter 10 in the guide. Example 10-4...
    Where is the code for the SingleSelectionTemplate as well as the MetadataState and Source Generator implementations that would have to be implemented for this? Both the javadoc and the code example talk about this, but there is not an example of implementation and I'd like to see what it is...Can you please provide all the code necessary to get example 10-4 to compile and run?
    Thank you,
    Lisa Cox
    OCLC Inc.

    You can get the complete code for the SingleSelectionTemplate class by downloading the
    Oracle OLAP Java API Reference for Oracle Database Release 1 (10.1.0.4) from the Oracle OTN website at http://otn.oracle.com/products/bi/olap/olap.html.
    After extracting the files from the zip file, open the toc.htm or index.html file in a browser. From the Overview page, select Example Oracle OLAP Java API Programs. At the bottom of the examples page are links to the Java files that contain the code for the TopBottomTemplate and SingleSelectionTemplate classes and the TopBottomTest class that uses the Template classes.
    The MedatadataState and SourceGenerator classes for the TopBottomTemplate class are implemented as inner classes of TopBottomTemplate. The same is true for the SingleSelectionTemplate.
    From that same OTN website you can download the Global Schema for Documentation, which is the schema that the example programs use.

  • ContextException: DataNodeInfo(AdminView): unknown child node IO

    Hi all,
    I am getting this exception while creating a Web Dynpro application which provides a drop-down menu (containing a list of tables from SQL server) for the user. The user can select a table from the drop-down, and when he clicks Submit, the contents of the table selected has to be displayed.
    For this, I am creating a node in the context of the view dynamically and also adding attributes to the node corresponding to the columns of the table selected. I am doing this dynamic creation in the wdModifyView(). I am creating the view layout which displays the table-contents dynamically too.
    But when I run the application, I am getting this exception. Following is the complete stack trace,
    com.sap.tc.webdynpro.progmodel.context.ContextException: DataNodeInfo(AdminView): unknown child node IO
         at com.sap.tc.webdynpro.progmodel.context.Paths.followMetaPath(Paths.java:794)
         at com.sap.tc.webdynpro.progmodel.context.Paths.getAttributeInfoFor(Paths.java:234)
         at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.TableAdapter._getAlignment(TableAdapter.java:11239)
         at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.TableAdapter._calculateColumnHAlign(TableAdapter.java:12455)
         at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.TableAdapter.setViewAndNodeElement(TableAdapter.java:398)
         at com.sap.tc.webdynpro.clientserver.uielements.adaptmgr.URAdapterManager.getAdapterFor(URAdapterManager.java:285)
         at com.sap.tc.webdynpro.clientserver.uielements.adaptmgr.URAdapterManager.getAdapterFor(URAdapterManager.java:93)
         at com.sap.tc.webdynpro.clientserver.uielements.adaptbase.AbstractAdapter.getAdapterFor(AbstractAdapter.java:495)
         at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.FlowLayoutAdapter$Items.getControl(FlowLayoutAdapter.java:368)
         at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutItemFragment(FlowLayoutRenderer.java:288)
         at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.renderFlowLayoutFragment(FlowLayoutRenderer.java:244)
         at com.sap.tc.ur.renderer.ie6.FlowLayoutRenderer.render(FlowLayoutRenderer.java:49)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
         at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.renderScrollContainerFragment(ScrollContainerRenderer.java:619)
         at com.sap.tc.ur.renderer.ie6.ScrollContainerRenderer.render(ScrollContainerRenderer.java:74)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.UiWindowRenderer.render(UiWindowRenderer.java:52)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:434)
         at com.sap.tc.webdynpro.clientimpl.html.renderer.uielements.base.RenderManager.render(RenderManager.java:133)
         at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendHtml(HtmlClient.java:1057)
         at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.fillDynamicTemplateContext(HtmlClient.java:457)
         at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendResponse(HtmlClient.java:1245)
         at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.retrieveData(HtmlClient.java:253)
         at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.doRetrieveData(WindowPhaseModel.java:595)
         at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:156)
         at com.sap.tc.webdynpro.clientserver.window.WebDynproWindow.processRequest(WebDynproWindow.java:335)
         at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:143)
         at com.sap.tc.webdynpro.clientserver.session.ApplicationSession.doProcessing(ApplicationSession.java:321)
         at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:713)
         at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:666)
         at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:250)
         at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:150)
         at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:62)
         at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:53)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:401)
         at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:365)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:944)
         at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:266)
         at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
         at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:175)
         at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
         at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)
    Please help...

    Here it is,
    public static void wdDoModifyView(IPrivateAdminView wdThis, IPrivateAdminView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime)
        //@@begin wdDoModifyView
              if (firstTime) {
              } else {
                   String[] retString = null;
                   java.util.ArrayList arList = new java.util.ArrayList();
                   Context ctx = null;
                   DataSource ds = null;
                   String dataSource = "jdbc/WebCASDS";
                   try {
                        ctx = new InitialContext();
                        if (ctx == null) {
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Error - No Context");
                        ds = (DataSource) ctx.lookup(dataSource);
                        if (ds == null) {
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Error - No dataSource: " + ds);
                   } catch (ContextException ce) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Inside catch1: Context Exception" + ce);
                   } catch (Exception e) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("DataSource Look up Exception ");
                   try {
                        IWDDropDownByKey key =
                             (IWDDropDownByKey) view.getElement("DropDownByKey");
                        String TableName1 = key.getSelectedKey();
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Selected Table : " + TableName1);
                        Statement stmt = null;
                        ResultSet rs = null;
                        ResultSetMetaData rsmtadta = null;
                        int colCount;
                        int x = 0;
                        int i;
                        String[] colName = null;
                        String[] colType = null;
                        String sqlQuery = null;
                        stmt = conn1.createStatement();
                        sqlQuery = "select * from " + TableName1 + "";
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("SQL Query:" + sqlQuery);
                        stmt.execute(sqlQuery);
                        rs = stmt.executeQuery(sqlQuery);
                        rsmtadta = rs.getMetaData();
                        colCount = rsmtadta.getColumnCount();
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Column Count " + colCount);
                        colName = new String[colCount + 1];
                        colType = new String[colCount + 1];
                        for (i = 1; i <= colCount; i++) {
                             colName[i - 1] = rsmtadta.getColumnName(i);
                             colType[i - 1] = rsmtadta.getColumnTypeName(i);
                             if (colType[i - 1].equalsIgnoreCase("varchar")) {
                                  colType[i - 1] = "ddic:com.sap.dictionary.string";
                             } else if (colType[i - 1].equalsIgnoreCase("datetime")) {
                                  colType[i - 1] = "ddic:com.sap.tut.wd.languages.myDate";
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Column Name " + colName[i - 1]);
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Column Type " + colType[i - 1]);
                        //Creating a node corresponding to the selected table
                        IWDNodeInfo rootNodeInfo = wdContext.getNodeInfo();
                        IWDNodeInfo tableNodeInfo =
                             rootNodeInfo.addChild(
                                  "TableSelected",
                                  null,
                                  true,
                                  false,
                                  true,
                                  false,
                                  false,
                                  true,
                                  null,
                                  null,
                                  null);
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("After node creation");
                        //Creating the attributes for the node created.. corresponding to the columns present in the selected table
                        for (i = 1; i <= colCount; i++) {
                             tableNodeInfo.addAttribute(colName[i - 1], colType[i - 1]);
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("After attribute creation");
                        IWDNode tableNode = wdContext.getChildNode("TableSelected", 0);
                        int rowCount = 0;
                        while (rs.next()) {
                             try {
                                  IWDNodeElement tableElement = tableNode.createElement();
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess("Inside while before for, element initialized");
                                  for (i = 1; i <= colCount; i++) {
                                       wdContext
                                            .wdGetAPI()
                                            .getController()
                                            .getComponent()
                                            .getMessageManager()
                                            .reportSuccess(
                                                 "values1..."
                                                      + rs.getObject(
                                                           colName[i - 1].toString()));
                                  for (i = 1; i <= colCount; i++) {
                                       tableElement.setAttributeValue(
                                            colName[i - 1],
                                            rs.getObject(colName[i - 1].toString()));
                                       wdContext
                                            .wdGetAPI()
                                            .getController()
                                            .getComponent()
                                            .getMessageManager()
                                            .reportSuccess("Inside for, element row created");
                                  tableNode.addElement(tableElement);
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess("Element created :" + tableElement);
                                  rowCount++;
                             } catch (ContextException ce) {
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess(
                                            "Inside catch2: Context Exception" + ce);
                             } catch (ClassCastException e) {
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess("Class cast exception" + e);
                        IWDTable table =
                             (IWDTable) view.createElement(IWDTable.class, null);
                        IWDNodeInfo tableNodeCreatedInfo = tableNode.getNodeInfo();
                        table.bindDataSource(tableNodeCreatedInfo);
                        IWDCaption tableCaption =
                             (IWDCaption) view.createElement(IWDCaption.class, null);
                        tableCaption.setText("Table Contents");
                        table.setHeader(tableCaption);
                        for (i = 1; i <= colCount; i++) {
                             IWDTableColumn column =
                                  (IWDTableColumn) view.createElement(
                                       IWDTableColumn.class,
                                       "ColCaption" + i);
                             IWDCaption caption =
                                  (IWDCaption) view.createElement(
                                       IWDCaption.class,
                                       "TableCaption" + i);
                             String header = colName[i - 1];
                             caption.setText(header);
                             column.setHeader((IWDCaption) caption);
                             table.addColumn(column);
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Inside for after creating column header");
                        //                                        IWDUIElementContainer root =
                        //                                                                 (IWDUIElementContainer) view.getRootElement();
                        //                                                            root.addChild(table);
                        int k = 1;
                        while (k <= rowCount) {
                             wdContext
                                  .wdGetAPI()
                                  .getController()
                                  .getComponent()
                                  .getMessageManager()
                                  .reportSuccess("Inside while layout creation after headers are in");
                             for (i = 1; i <= colCount; i++) {
                                  IWDTableColumn innerColumn =
                                       (IWDTableColumn) view.createElement(
                                            IWDTableColumn.class,
                                            null);
                                  IWDNodeElement nodeElement =
                                       tableNode.getElementAt(k - 1);
                                  String attribValue =
                                       nodeElement.getAttributeAsText(colName[i - 1]);
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess(
                                            "Inside inner for, attrib value "
                                                 + attribValue);
                                  IWDTextView nameTextview1 =
                                       (IWDTextView) view.createElement(
                                            IWDTextView.class,
                                            "nameTextview" + k + i);
                                  wdContext
                                       .wdGetAPI()
                                       .getController()
                                       .getComponent()
                                       .getMessageManager()
                                       .reportSuccess("After text-view creation");
                                  nameTextview1.bindText(attribValue);
                                  innerColumn.setTableCellEditor(
                                       (IWDTableCellEditor) nameTextview1);
                                  table.addColumn(innerColumn);
                             k++;
                        IWDUIElementContainer root =
                             (IWDUIElementContainer) view.getRootElement();
                        root.addChild(table);
                   } catch (ContextException ce) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Inside catch3: Context Exception" + ce);
                   } catch (RuntimeException e) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Inside catch : runtime exception" + e);
                   } catch (SQLException e) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("Inside catch : SQL exception" + e);
                   } catch (Exception e) {
                        wdContext
                             .wdGetAPI()
                             .getController()
                             .getComponent()
                             .getMessageManager()
                             .reportSuccess("..normal exc.." + e);
        //@@end

  • Settin singleton property false for child node but entire column populated

    hai all,
           I have set the singleton property of child node as false but still in my wdmodifyview when i load a value help with values from backend based on the user selection in 1st column of table the entire column gets populated.
    coding used by me:
    public static void wdDoModifyView(IPrivateSalesdet wdThis, IPrivateSalesdet.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime)
        //@@begin wdDoModifyView
       try
       String partfn=wdContext.currentTablepartnersElement().getPartnerfn();
         if(partfn.equals("ShiptoParty"))
    IWDAttributeInfo partattributeInfo=wdContext.nodeTablepartners().nodeTablepartnerssubnode().getNodeInfo().getAttribute(IPrivateSalesdet.ITablepartnerssubnodeElement.PARTNERS);
    ISimpleTypeModifiable part  = partattributeInfo.getModifiableSimpleType();
          //     Set field label and populate valueset
      part.setFieldLabel("key");
    IModifiableSimpleValueSet partvalueSet =  part.getSVServices().getModifiableSimpleValueSet();     
      for (int i = 0; i < wdThis.wdGetSalescustomctrllerController().wdGetContext().nodeLt_Kna1().size();i++)
    partvalueSet.put(wdThis.wdGetSalescustomctrllerController().wdGetContext().nodeLt_Kna1().getLt_Kna1ElementAt(i).getKunnr(),wdThis.wdGetSalescustomctrllerController().wdGetContext().nodeLt_Kna1().getLt_Kna1ElementAt(i).getName1());
    I need to populate only the table cell wch is next to the cell in wch user has made a selection  and not the entire column.plz help me in this issue.

    First, you should not place this code in wdDoModifyView().
    Second, I assume you want to have a value help only on a specific table cell, not for all cells in the same column, is that correct?
    This cannot be done by modification of the DDIC type because the type is used for all cells of a column. This has nothing to do with singleton vs. non-singleton.
    What exactly is your use case?
    Armin

Maybe you are looking for

  • Need HTML code to call template from an existing web template

    Hi all, Can someone help me with a HTML code which can call another web template from a field of a table. I have a web template which includes table as web item.The template when executed displays the data of query view in the form of table.One of th

  • Presentation Director error

    I just upgraded to the latest version of Presentation Director on a T61 and now I get the following message when I try to start the program: "Presentation Director detected the Lenovo USB Port Replicator with video.  Please push the button on the fro

  • Standby rebuilding

    Hello! I have previously created a standby environment with one primary and one standby with oracle 11g and realtime apply. After some times we noticed that archives were not being aplpied on standby even though they were shipped, so we decided to re

  • Problemas con Photoshop Album 2.0 y Photoshop CS2

    Hola, Antes tenia photoshop Album 2.0 y hotoshop CS, y desde Album 2.0 podia ir por la opción editar con photoshop al CS2 directamente, en cambio desde que instale el CS2 me ha desaaparecido esta opcion y no puedo ir al CS2 de inguna forma. ¿alguien

  • Putting a playlist on iphone

    I just created a playlist in itunes but now I cannot get it onto my iphone? the steps I have found online here and via google have not helped?