cancel
Showing results for 
Search instead for 
Did you mean: 

no such element inroadmap exception error

Former Member
0 Kudos

Hi,

I have created an roadmap project. The navigation is working. except when i need to skipp a stip.

When i for instance pus a back putton the roadmap shows me that i am at step 2 instead of step 1`

The code i am using in te viewcontroller for the back button:

wdThis.wdGetOm_Webforms_CustController().visibleSelectionContainer();

wdThis.wdGetOm_Webforms_CustController().InvisibleRequestDetailsContainer();

wdThis.wdGetOm_Webforms_CustController().PreviousStep();

code in the custom controller:

String attrName = null;

boolean found = false;

//copy iterator into list to get list iterator

Iterator it = wdContext.nodeRoadMapSteps().getNodeInfo().iterateAttributes();

List steps = new ArrayList();

while (it.hasNext()) {

steps.add(it.next());

}

ListIterator lit = steps.listIterator();

// find current element and deselect it

while (lit.hasNext() && !found) {

//get attribute name

IWDAttributeInfo info = (IWDAttributeInfo) lit.next();

attrName = info.getName();

if (WDRoadMapStepDesign.SELECTED.equals(wdContext.currentRoadMapStepsElement().getAttributeValue(attrName))){

//selected element found

wdContext.currentRoadMapStepsElement().setAttributeValue(attrName, WDRoadMapStepDesign.STANDARD);

found = true;

}

}

found = false;

lit.previous(); // correction

// one step backwards, but skip disabled steps

while(lit.hasPrevious() && !found) {

//get attribute name

IWDAttributeInfo info = (IWDAttributeInfo) lit.previous();

attrName = info.getName();

if (!WDRoadMapStepDesign.DISABLED.equals(wdContext.currentRoadMapStepsElement().getAttributeValue(attrName))) {

// element is not disabled => select it

wdContext.currentRoadMapStepsElement().setAttributeValue(attrName, WDRoadMapStepDesign.SELECTED);

found = true;

}

}

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

what kind of methods did you make?

Answers (3)

Answers (3)

Former Member
0 Kudos

I get a nulpointer exception when i am going to te next step

code i used for next step

int currentIndex = wdContext.currentRoadMapElement().getSelectedStepIndex();

if (currentIndex < 2) {

wdContext.currentRoadMapElement().setSelectedStepIndex(

currentIndex + 1);

erroro message

java.lang.NullPointerException

at com.shell.teamflow.wd.omwebforms.Om_Webforms_Cust.NextStep(Om_Webforms_Cust.java:284)

at com.shell.teamflow.wd.omwebforms.wdp.InternalOm_Webforms_Cust.NextStep(InternalOm_Webforms_Cust.java:205)

at com.shell.teamflow.wd.omwebforms.RequestType_View.onActionCreatePosition(RequestType_View.java:227)

at com.shell.teamflow.wd.omwebforms.wdp.InternalRequestType_View.wdInvokeEventHandler(InternalRequestType_View.java:215)

at com.sap.tc.webdynpro.progmodel.generation.DelegatingView.invokeEventHandler(DelegatingView.java:87)

at com.sap.tc.webdynpro.progmodel.controller.Action.fire(Action.java:67)

at com.sap.tc.webdynpro.clientserver.task.WebDynproMainTask.handleAction(WebDynproMainTask.java:101)

at com.sap.tc.webdynpro.clientserver.task.WebDynproMainTask.handleActionEvent(WebDynproMainTask.java:304)

at com.sap.tc.webdynpro.clientserver.task.WebDynproMainTask.execute(WebDynproMainTask.java:649)

at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:59)

at com.sap.tc.webdynpro.clientserver.cal.ClientManager.doProcessing(ClientManager.java:248)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doWebDynproProcessing(DispatcherServlet.java:154)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:116)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doPost(DispatcherServlet.java:55)

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:390)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)

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:95)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:160)

Former Member
0 Kudos

Where did you add attributes "SelectedStep" and "SelectedStepIndex"? I assumed they are directly in the root context node.

You don't need to put them into some other context node.

Armin

Former Member
0 Kudos

Navigation works now, only the steps are not going with the flow. what code do i need to use for that and should i also put this in Getselection method

Former Member
0 Kudos

code in there is following

// create new steps node element

IRoadMapStepsElement steps = wdContext.nodeRoadMapSteps().createRoadMapStepsElement();

// iterate through node attributes and initialize them

IWDNodeInfo nodeInfo = wdContext.nodeRoadMapSteps().getNodeInfo();

Iterator it = nodeInfo.iterateAttributes();

boolean first = true;

while (it.hasNext()) {

//get attribute name

IWDAttributeInfo info = (IWDAttributeInfo) it.next();

String attrName = info.getName();

// initialize context value

if (first) {

// first step in RoadMap => set to SELECTED

steps.setAttributeValue(attrName, WDRoadMapStepDesign.SELECTED);

first = false;

} else {

// all other steps set to STANDARD

steps.setAttributeValue(attrName, WDRoadMapStepDesign.STANDARD);

}

}

wdContext.nodeRoadMapSteps().bind(steps);

Former Member
0 Kudos

Hi,

can you indicate the statement in your which is in line number 131?.

Former Member
0 Kudos

131: steps.setAttributeValue(attrName, WDRoadMapStepDesign.STANDARD)

Former Member
0 Kudos

Hi,

If all the attributes in your context node RoadMapSteps has the same property (ie.,WDRoadMapStepDesign). if not then exception raises.

Former Member
0 Kudos

Your code looks strange to me. You are working with context metadata instead of context data. Why?

To control the selection of a RoadMap, you simply have to provide a context attribute that stores the ID of the currently selected step.

Say you have 3 steps with IDs "step0", "step1", "step2".

Create context attribute "SelectedStep" of type "string" and bind property RoadMap.<b>selectedStep </b>to that attribute.

If you want to do "step arithmetic", you could create a context attribute "SelectedStepIndex" of type "integer" and make "SelectedStep" a calculated attribute with

String getSelectedStep(IWDNodeElement element)
{
  return "step" + wdContext.currentContextElement().getSelectedStepIndex();
}

Then you can navigate through the steps by the following operations:

- Goto step "step<i>":

wdContext.currentContextElement().setSelectedStepIndex(i)

- Goto next step:

int currentIndex = wdContext.currentContextElement().getSelectedStepIndex();
if (currentIndex < 2)
{
  wdContext.currentContextElement().setSelectedStepIndex(currentIndex + 1);
}

- Goto previous step:

int currentIndex = wdContext.currentContextElement().getSelectedStepIndex();
if (currentIndex > 0)
{
  wdContext.currentContextElement().setSelectedStepIndex(currentIndex - 1);
}

Armin

Former Member
0 Kudos

Armin,

I am pretty new at building roadmaps. I used also the code of Eoan. This code was working so that's why i used it. Do I understand it good that the best is to replace my code for the code you gave me?

where should i Implement this:

String getSelectedStep(IWDNodeElement element)

{

return "step" + wdContext.currentContextElement().getSelectedStepIndex();

}

Then you can navigate through the steps by the following operations:

- Goto step "step<i>":

wdContext.currentContextElement().setSelectedStepIndex(i)

Former Member
0 Kudos

Armin

nodestructure i have is:

RoadMapSteps

step1

step2

step3

step4

step5

SelectedStep

SelectedstepIndex.

where should i Implement the code as the question os Dresen and how should that part look like.

I adjusted already the previous and next step

Former Member
0 Kudos

Hi Cronan,

The first while loop in your code is used to get the selected step.

when the if condition true (inside while) , it finds the current selected element, then you should break the loop to stop the iteration.

insert a break; statement in your while loop as follows,

// find current element and deselect it

while (lit.hasNext() && !found) {

//get attribute name

IWDAttributeInfo info = (IWDAttributeInfo) lit.next();

attrName = info.getName();

if (WDRoadMapStepDesign.SELECTED.equals(wdContext.currentRoadMapStepsElement().getAttributeValue(attrName))){

//selected element found

wdContext.currentRoadMapStepsElement().setAttributeValue(attrName, WDRoadMapStepDesign.STANDARD);

found = true;

<b>break;</b>

}

}

hope this will help you.

Former Member
0 Kudos

I get a null pointer now.

Former Member
0 Kudos

Hi Cronan,

In which line it gives nullpointer exception? and in which step you are in when you click back button?

Former Member
0 Kudos

java.lang.ClassCastException

at com.shell.teamflow.wd.omwebforms.wdp.IPublicOm_Webforms_Cust$IRoadMapStepsElement.wdSetObject(IPublicOm_Webforms_Cust.java:677)

at com.sap.tc.webdynpro.progmodel.context.NodeElement.setAttributeValue(NodeElement.java:876)

at com.shell.teamflow.wd.omwebforms.Om_Webforms_Cust.wdDoInit(Om_Webforms_Cust.java:131)

at com.shell.teamflow.wd.omwebforms.wdp.InternalOm_Webforms_Cust.wdDoInit(InternalOm_Webforms_Cust.java:148)

at com.sap.tc.webdynpro.progmodel.generation.DelegatingCustomController.doInit(DelegatingCustomController.java:73)

at com.sap.tc.webdynpro.progmodel.controller.Controller.initController(Controller.java:215)

at com.sap.tc.webdynpro.progmodel.controller.Controller.init(Controller.java:200)

at com.sap.tc.webdynpro.progmodel.controller.Component.getCustomControllerInternal(Component.java:436)

at com.sap.tc.webdynpro.progmodel.controller.Component.getMappableContext(Component.java:374)

at com.sap.tc.webdynpro.progmodel.controller.Component.getMappableContext(Component.java:403)

at com.sap.tc.webdynpro.progmodel.context.MappedAttributeInfo.initAttributeMapping(MappedAttributeInfo.java:304)

at com.sap.tc.webdynpro.progmodel.context.MappedAttributeInfo.init(MappedAttributeInfo.java:263)

at com.sap.tc.webdynpro.progmodel.context.NodeInfo.initAttributes(NodeInfo.java:669)

at com.sap.tc.webdynpro.progmodel.context.DataNodeInfo.doInit(DataNodeInfo.java:233)

at com.sap.tc.webdynpro.progmodel.context.NodeInfo.init(NodeInfo.java:654)

at com.sap.tc.webdynpro.progmodel.context.Context.init(Context.java:40)

at com.sap.tc.webdynpro.progmodel.controller.Controller.init(Controller.java:199)

at com.sap.tc.webdynpro.progmodel.view.ViewManager.getView(ViewManager.java:540)

at com.sap.tc.webdynpro.progmodel.view.ViewManager.bindRoot(ViewManager.java:422)

at com.sap.tc.webdynpro.progmodel.view.ViewManager.init(ViewManager.java:130)

at com.sap.tc.webdynpro.progmodel.view.InterfaceView.initController(InterfaceView.java:41)

at com.sap.tc.webdynpro.progmodel.controller.Controller.init(Controller.java:200)

at com.sap.tc.webdynpro.clientserver.cal.ClientComponent.displayToplevelComponent(ClientComponent.java:135)

at com.sap.tc.webdynpro.clientserver.cal.ClientApplication.init(ClientApplication.java:392)

at com.sap.tc.webdynpro.clientserver.task.WebDynproMainTask.execute(WebDynproMainTask.java:608)

at com.sap.tc.webdynpro.clientserver.cal.AbstractClient.executeTasks(AbstractClient.java:59)

at com.sap.tc.webdynpro.clientserver.cal.ClientManager.doProcessing(ClientManager.java:248)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doWebDynproProcessing(DispatcherServlet.java:154)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doContent(DispatcherServlet.java:116)

at com.sap.tc.webdynpro.serverimpl.defaultimpl.DispatcherServlet.doGet(DispatcherServlet.java:48)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:390)

at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:264)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:347)

at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:325)

at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:887)

at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:241)

at com.sap.engine.services.httpserver.server.Client.handle(Client.java:92)

at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:148)

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:95)

at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:160)

Former Member
0 Kudos

The getSelectedStep() method is created by Web Dynpro, if you define "SelectedStep" as <b>calculated </b>attribute.

Simply add the implementation as shown below.

In your context, remove attributes "step1" etc.

Armin

Former Member
0 Kudos

so in the get selected step

i should put the following code

String getSelectedStep(IWDNodeElement element){ return "step" + wdContext.currentContextElement().getSelectedStepIndex();

then i get an syntext error after first getselectedStep.

Former Member
0 Kudos

Put the following line

return "step" + wdContext.currentContextElement().getSelectedStepIndex();

inside the //@@begin ... //@@end section of the generated getSelectedStep() method.

Armin

Former Member
0 Kudos

armin, how do you make the steps to be slected. ANd what if i hva e to skipp fi step 2 and go inmediatly to step 3

Former Member
0 Kudos

To select step number i, (i = 0,1,2):

wdContext.currentContextElement().setSelectedStepIndex(i);

RoadMap.<i>selectedStep </i>property must be bound to attribute "SelectedStep" (not "SelectedStepIndex").

Armin

Former Member
0 Kudos

this code i should put in de setselectedStep merthod?