cancel
Showing results for 
Search instead for 
Did you mean: 

java.lang.IllegalArgumentException when I try to get the GUID

Former Member
0 Kudos

Hi there,

I tried to get the GUID from a selected line of the table.

I did this by the following code:


public void onActionLeadSelected(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )
  {
    //@@begin onActionLeadSelected(ServerEvent)
    
	int leadselection = this.wdThis.wdGetContext().nodeAccountResults().getLeadSelection();
	String SelectedBupaNr = this.wdThis.wdGetContext().nodeAccountResults().getElementAt(leadselection).getAttributeAsText("Bp_Number");
	String SelectedBupaGuid = this.wdThis.wdGetContext().nodeAccountResults().getElementAt(leadselection).getAttributeAsText("Bp_Guid");
	wdComponentAPI.getMessageManager().reportSuccess("Selected partner: " + SelectedBupaNr);
	wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + SelectedBupaGuid);
	
	this.wdThis.wdGetCuCoMainController().triggerBuPaDetails(SelectedBupaNr);	
	
	this.wdThis.wdFirePlugOpAccDetails();
	
	//this.wdThis.wdFirePlugToDetails3(SelectedBupaNr);
    
    //@@end
  }

The weird thing is that for SelectedBupaNr everything works perfectly; but when I do the same for SelectedBupaGuid, the following error comes up. What could be the reason?

Thanks & kind regards

Error message:

java.lang.IllegalArgumentException

at com.sap.dictionary.runtime.DdTypeBinary.format(DdTypeBinary.java:60)

at com.sap.tc.webdynpro.progmodel.context.NodeElement.getAttributeAsText(NodeElement.java:905)

at com.bdx.sap.bb.comp.bupa.AccResults.onActionLeadSelected(AccResults.java:165)

at com.bdx.sap.bb.comp.bupa.wdp.InternalAccResults.wdInvokeEventHandler(InternalAccResults.java:175)

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.window.WindowPhaseModel.doHandleActionEvent(WindowPhaseModel.java:420)

at com.sap.tc.webdynpro.clientserver.window.WindowPhaseModel.processRequest(WindowPhaseModel.java:132)

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

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:759)

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:712)

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:261)

at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:149)

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)

Edited by: Allan Duinslaeger on Mar 14, 2008 12:06 PM

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi,

Give a try with the following code



Object obj = wdContext.nodeOrders().getElementAt(1).getAttributeValue("Bp_Guid");
	  obj.toString();
Class class = obj.getClass();

Check the class and type cast to it.


Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj,

Thanks very much;

I did it by the following code:


Object obj = wdContext.nodeAccountResults().getElementAt(leadselection).getAttributeValue("Bp_Guid");
obj.toString();
wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + obj);
Class clss = obj.getClass();
wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + clss);

But the result is:

"Selected partner guid: [B@64c5fe9b"

instead of guid: 44B73D19962D3BBFE10000000A800466

And for the class: class [B

Any idea as to why?

Thanks

Edited by: Allan Duinslaeger on Mar 14, 2008 12:34 PM

Former Member
0 Kudos

Hi,

As I mentioned above that you need to cast to the correct type to get the actual value,

What you see right now is the hash of the object

Selected partner guid: [B@64c5fe9b"

instead of guid: 44B73D19962D3BBFE10000000A800466

getClass().getName() + '@' + Integer.toHexString(hashCode())

now you can type cast this to guid.

I havent tried this, you can give a try


Object obj = wdContext.nodeAccountResults().getElementAt(leadselection).getAttributeValue("Bp_Guid");
Class cls = obj.getClass();
wdComponentAPI.getMessageManager().reportSuccess(cls.getName());
	  
	  if(obj instanceof guid) // Not sure abt the actual datatype above line will give you some hints
	  {
		  guid g = (guid)obj;
		  wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + g);

	  }

Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj;

I've done this in the way you suggested, but first I wanted to see what the classnames would be. For that I implemented the following code:


Object obj = wdContext.nodeAccountResults().getElementAt(leadselection).getAttributeValue("Bp_Guid");
Class cls = obj.getClass();
wdComponentAPI.getMessageManager().reportSuccess(cls.getName());
  	
Object obj2 = wdContext.nodeAccountResults().getElementAt(leadselection).getAttributeValue("Bp_Number");
wdComponentAPI.getMessageManager().reportSuccess(obj2.toString());
Class cls2 = obj.getClass();
wdComponentAPI.getMessageManager().reportSuccess(cls2.getName());

The results:

Class of guid: [B

BP number: 16960

Class of BP nr: [B

Maybe it's important to tell that I've mapped the context in the layout to a table I defined in the layout of the view via table template?

Thanks again

Allan

Former Member
0 Kudos

Hi,

What is the data type shown in the properties when you select this attribute in Design View?

If that is known, why dont you type cast to that?

Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj,

The datatype is not shown in the properties.

By the way, the guid-field isn't used in the table; BP nr also isn't; there is only name1, name2 etc in the table itself.

Former Member
0 Kudos

Hi,

Can you explain the sccenario? How is this nodes and attributes created? are they based on RFC? Dictionary types?

Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj,

Of course, I forgot... (I'm sick right now...)

I made a BAPI with an exporting table (based on table type).

In that exporting table there are these fields:

BP_GUID

BP_NUMBER

BP_TYPE

NAME1

NAME2

NAME3

NAME4

FIRSTNAME

LASTNAME

CITY

I then imported this BAPI as adaptive RFC, and did a model binding in the custom controller.

Then I created the view and did a context mapping to the view (all fields); but for the table in the layout I only chose NAME1, NAME2, NAME3, NAME4 and CITY.

Then I made sure that when you select a line, the BP_NUMBER will be known (necessary to call another BAPI which will give details).

Unfortunately, when you call the second BAPI, there is an exception: "Mandatory parameter BP_GUID of method Z_CRM_BB_BUPA_DETAILS missing". After that, I set the GUID-importing parameter to optional. This didn't help, so I presumed that I also had to pass the value of the guid.. That's why I'm searching for a way to find the (real) value.

FYI, import parameters of second BAPI:

BP_GUID

BP_NUMBER

BP_TYPE

Thanks & regards

Allan

Former Member
0 Kudos

Hi,

As this is a table type ideally a class will be created for you when you imported the model....

you can access the set/get methods to retreive the values.

Regards

Ayyapparaj

Former Member
0 Kudos

Hi there,

I've found this method in the class based on that table type:


public byte[] getBp_Guid() {
    return (byte[])super.getAttributeValue("Bp_Guid");
}

But how can I apply this in my scenario? I have to get a particular element of a selected line..

I'm inside of a view and will then trigger a CuCo method afterwards with the values of bp nr and guid.

By the way, I've tried the following:


Object obj = wdContext.nodeAccountResults().getElementAt(leadselection).getAttributeValue("Bp_Guid");
  	Class cls = obj.getClass();
  	wdComponentAPI.getMessageManager().reportSuccess(cls.getName());

if(obj instanceof byte[]) 
	{
		byte[] guid = (byte[])obj;
		guid.toString();
		wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + guid);
 	}

But the result still is hashed...?

Thanks for helping me out so much, I'm still learning java..

Edited by: Allan Duinslaeger on Mar 14, 2008 2:27 PM

Former Member
0 Kudos

Hi,

have you tries this




if(obj instanceof byte[]) 
	{
		byte[] guid = (byte[])obj;
                                String str = new String(guid);
		wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + str);
 	}

Regards

Ayyapparaj

Former Member
0 Kudos

Hey,

I've tried that and the next result comes up:

Selected partner guid: D�=�-;���f

Weird, huh? Is there any way to unhash it?

Former Member
0 Kudos

Hi,

This is bcoz the character set differs .

Have you executed the bapi??

If you connect this context attribute to an UI element does this give you the desired value???

It would be helpfull if you could post your context structure..

Regards

Ayyapparaj

Former Member
0 Kudos

Hi,

Yes, the BAPI has been executed. In CRM; the guid has the right value.

I did not bind the guid to an UI-element as it has to be hidden from the user (the user doesn't need to know this value).

My context structure in the Custom Controller:

Model node: InputSearch

Bp_Type

Fuzzy

Search_Mode

Model node: OutputSearch

Search result

Bp_Guid

Bp_Number

Bp_Type

City

Firstname

Lastname

Name1

Name2

Name3

Name4

Context in the view

Model node: AccountResults

Bp_Guid

Bp_Number

Bp_Type

City

Firstname

Lastname

Name1

Name2

Name3

Name4

View Layout (table template)

Name1 Name2 Name3 Name4 City

By the way, I just tried to see what it would look like when you bind the guid to a ui-element (just by applying a form and choosing the guid element) and this error comes up:

java.lang.IllegalArgumentException

at com.sap.dictionary.runtime.DdTypeBinary.format(DdTypeBinary.java:60)

at com.sap.tc.webdynpro.clientserver.data.DataContainer.doFormat(DataContainer.java:1405)

at com.sap.tc.webdynpro.clientserver.data.DataContainer.getAndFormat(DataContainer.java:1098)

at com.sap.tc.webdynpro.clientserver.data.DataContainer.getAndFormat(DataContainer.java:1070)

at com.sap.tc.webdynpro.clientserver.uielib.standard.impl.AbstractInputField.getValue(AbstractInputField.java:1270)

at com.sap.tc.webdynpro.clientserver.uielib.standard.uradapter.InputFieldAdapter.getValue(InputFieldAdapter.java:582)

at com.sap.tc.ur.renderer.ie6.InputFieldRenderer.render(InputFieldRenderer.java:58)

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.MatrixLayoutRenderer.renderMatrixLayoutCellFragment(MatrixLayoutRenderer.java:790)

at com.sap.tc.ur.renderer.ie6.MatrixLayoutRenderer.renderMatrixLayoutRowFragment(MatrixLayoutRenderer.java:376)

at com.sap.tc.ur.renderer.ie6.MatrixLayoutRenderer.renderMatrixLayoutFragment(MatrixLayoutRenderer.java:326)

at com.sap.tc.ur.renderer.ie6.MatrixLayoutRenderer.render(MatrixLayoutRenderer.java:79)

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.ur.renderer.ie6.ViewContainerRenderer.renderViewContainerFragment(ViewContainerRenderer.java:134)

at com.sap.tc.ur.renderer.ie6.ViewContainerRenderer.render(ViewContainerRenderer.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.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.ur.renderer.ie6.ViewContainerRenderer.renderViewContainerFragment(ViewContainerRenderer.java:134)

at com.sap.tc.ur.renderer.ie6.ViewContainerRenderer.render(ViewContainerRenderer.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.ViewContainerRenderer.renderViewContainerFragment(ViewContainerRenderer.java:134)

at com.sap.tc.ur.renderer.ie6.ViewContainerRenderer.render(ViewContainerRenderer.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.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:1055)

at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.fillDynamicTemplateContext(HtmlClient.java:455)

at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.sendResponse(HtmlClient.java:1239)

at com.sap.tc.webdynpro.clientimpl.html.client.HtmlClient.retrieveData(HtmlClient.java:252)

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

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessingStandalone(ClientSession.java:759)

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doApplicationProcessing(ClientSession.java:712)

at com.sap.tc.webdynpro.clientserver.session.ClientSession.doProcessing(ClientSession.java:261)

at com.sap.tc.webdynpro.clientserver.session.RequestManager.doProcessing(RequestManager.java:149)

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)

Former Member
0 Kudos

Hi,

Give an atempt in this way


Object obj = null;
	  byte[] guid = (byte[])obj;
	  UUID uuid = UUID.nameUUIDFromBytes(guid);
	  
wdComponentAPI.getMessageManager().reportSuccess("Selected partner guid: " + uuid.toString());

Regards

Ayyapparaj

Former Member
0 Kudos

Hi Ayyapparaj,

UUID cannot be resolved or is not a type. Even after doing "organize imports"

Is there a JAR needed for this or something?

Former Member
0 Kudos

Hi,

import java.util.UUID;

Regards

Ayyapparaj

Former Member
0 Kudos

Hi there,

I hardcoded that import to my code, but it seems my system doesn't know that UUID.

Even tried to do " import java.util.;* ", which did not help. You sure you didn't import some JAR or something into your project?

Thanks a lot

Allan

Former Member
0 Kudos

Hi,

I think its available from jdk1.5 onwards

regards

Ayyapparaj

Former Member
0 Kudos

Indeed, apparently we're not working on >= JDK 1.5...

Is there any other way to import that uuid into our project? Because that code you wrote last looks like it could be the solution.!

Kind regards,

Allan

Former Member
0 Kudos

It has been decided to just use the BuPa number because of our JDK version.

Thanks anyway for all your help Ayyapparaj!

Answers (0)