How to use Contextual panel ?
Hi,
Can u please expalin me what are the properties of contextual panel ? and How to use contextual panel with in Contextual panel?
Thanks,
kishore.
Check out this link
http://help.sap.com/saphelp_nwce10/helpdata/en/45/01754e5ba20c4be10000000a11466f/frameset.htm
Similar Messages
-
How i use multi panel in single applet
hi master
sir i need three panel in single applet
i use this code but not set the panel
pnl.setBounds(20, 10, 10, 20);
and
pnl.setLocation(12, 12);
and
pnl.setSize(12, 20);
this is my class code
JTable table = new JTable(rdata, columnNames);
getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
getContentPane().add(table);
JPanel pnl = new JPanel();
//pnl.setBounds(20, 10, 10, 20);
//pnl.setLocation(12, 12);
pnl.setSize(12, 20);
pnl.add(new JScrollPane(table));
getContentPane().add(pnl);
//pnl.setBounds(10, 10, 10, 20);
please sir give me idea how i use multi panel and how i set panel boundry
thanking you
aamirhttp://forum.java.sun.com/thread.jspa?threadID=5118094&tstart=0
-
How to create Contextual Panel?
Dear Friends..
I want to make Contextual Panel in WD4A..
But I don't know..how to create Contextual Panel..
Please answer me..^^
Thanks..Oh... I'm Sorry.
I can't write english well..and I can't understand Navigation list and contexual panel.
So.. I can study that.
But..
I make Contextual Panel reference CTX_NAV_PANEL View in WDR_TEST_EVENTS Component.
'com.lang.abap.sap' line has right arrow just like '>'
i think.. '>' click then.. another action happens..
for example.. display sublist..
'comp.lang.abap.sap.webdynpro'
'comp.lang.abap.sap.webdynpro.viewdesigner'
'comp.lang.abap.sap.webdynpro.runtime,X'
'comp.lang.abap.sap.webdynpro.libraries'
and so on..
But nothing happens..
How can I display sublist.. -
How to use another panels in status line
Hi Everyone:
Can anybody tell me how can i use another panels in the
Console's status line, I'm using the message line but i need to
show the user's name and Date-Tiem in another section of the
status line and not in display controls as i'm already doing it.
Thanks.Do you really need a JSF component for that? You can use h:panelGroup and some JS. But a simple div with some JS is also sufficient.
-
Tint2 question how to use 2 panels
Hi again!
THis might seem a noobish question , but i would like to put the system tray with the clock on the top of the desktop and at the bottom the tasks .
How do i do that ? Do i need to make two tint2 configuration files ?
Thanks !Nearly the same situation. I did split up the panel int two parts, one of them dedicated to clock and tray which I wanted to show with different colors on my display. I solved this with these two configuration files.
tint2rc, the main panel display:
# Tint2 config file
# Generated by tintwizard (http://code.google.com/p/tintwizard/)
# For information on manually configuring tint2 see http://code.google.com/p/tint2/wiki/Configure
# Background definitions
# ID 1
rounded = 7
border_width = 0
background_color = #000000 00
border_color = #ffffff 18
# ID 2
rounded = 5
border_width = 2
background_color = #ffffff 60
border_color = #00007f 60
# ID 3
rounded = 5
border_width = 1
background_color = #303030 50
border_color = #5f5f00 50
# Panel
panel_monitor = all
panel_position = bottom left
panel_size = 88% 30
panel_margin = 0 0
panel_padding = 7 0 7
panel_dock = 0
wm_menu = 0
panel_layer = top
panel_background_id = 1
# Panel Autohide
autohide = 0
autohide_show_timeout = 0.3
autohide_hide_timeout = 2
autohide_height = 4
strut_policy = follow_size
# Taskbar
taskbar_mode = single_desktop
taskbar_padding = 2 3 2
taskbar_background_id = 0
taskbar_active_background_id = 0
# Tasks
urgent_nb_of_blink = 8
task_icon = 1
task_text = 1
task_centered = 1
task_maximum_size = 400 35
task_padding = 6 3
task_background_id = 3
task_active_background_id = 2
task_urgent_background_id = 2
task_iconified_background_id = 3
# Task Icons
task_icon_asb = 70 0 0
task_active_icon_asb = 100 0 0
task_urgent_icon_asb = 100 0 0
task_iconified_icon_asb = 70 0 0
# Fonts
task_font = sans 8
task_font_color = #ffff00 70
task_active_font_color = #00007f 85
task_urgent_font_color = #00007f 85
task_iconified_font_color = #ffff00 70
font_shadow = 0
# System Tray
systray = 1
systray_padding = 0 4 5
systray_sort = ascending
#systray_sort = right2left
systray_background_id = 0
systray_icon_size = 0
systray_icon_asb = 100 0 0
# Clock
#time1_format = %H:%M:%S
#time1_font = sans bold 8
#time2_format = %A %d. %B
#time2_font = sans bold 6
#clock_font_color = #ffff00 100
#clock_padding = 1 0
#clock_background_id = 0
#clock_lclick_command = plan -S
# Tooltips
tooltip = 0
tooltip_padding = 2 2
tooltip_show_timeout = 0.7
tooltip_hide_timeout = 0.3
tooltip_background_id = 1
tooltip_font = sans 10
tooltip_font_color = #OOOOOO 80
# Mouse
#mouse_left = toggle_iconify
mouse_middle = maximize_restore
mouse_right = close
mouse_scroll_up = toggle
mouse_scroll_down = iconify
# Battery
#battery = 0
#battery_low_status = 10
#battery_low_cmd = notify-send "battery low"
#battery_hide = 98
#bat1_font = sans 8
#bat2_font = sans 6
#battery_font_color = #ffffff 76
#battery_padding = 1 0
#battery_background_id = 0
# End of config
tint2rc-clock for the clock and trayer part:
# Tint2 config file
# Generated by tintwizard (http://code.google.com/p/tintwizard/)
# For information on manually configuring tint2 see http://code.google.com/p/tint2/wiki/Configure
# Background definitions
# ID 1
rounded = 7
border_width = 0
background_color = #000000 40
border_color = #ffffff 18
# ID 2
rounded = 5
border_width = 2
background_color = #ffffff 80
border_color = #00007f 30
# ID 3
rounded = 5
border_width = 1
background_color = #7f7f7f 80
border_color = #0f0f0f 30
# Panel
panel_monitor = all
panel_position = bottom right
panel_size = 12% 30
panel_margin = 0 0
panel_padding = 7 0 7
panel_dock = 0
wm_menu = 0
panel_layer = bottom
panel_background_id = 1
# Panel Autohide
autohide = 0
autohide_show_timeout = 0.3
autohide_hide_timeout = 2
autohide_height = 4
strut_policy = follow_size
# Taskbar
#taskbar_mode = single_desktop
#taskbar_padding = 2 3 2
#taskbar_background_id = 0
#taskbar_active_background_id = 0
# Tasks
#urgent_nb_of_blink = 8
#task_icon = 1
#task_text = 1
#task_centered = 1
#task_maximum_size = 400 35
#task_padding = 6 3
#task_background_id = 3
#task_active_background_id = 2
#task_urgent_background_id = 2
#task_iconified_background_id = 3
# Task Icons
#task_icon_asb = 70 0 0
#task_active_icon_asb = 100 0 0
#task_urgent_icon_asb = 100 0 0
#task_iconified_icon_asb = 70 0 0
# Fonts
#task_font = sans 8
#task_font_color = #ffff00 70
#task_active_font_color = #00007f 85
#task_urgent_font_color = #00007f 85
#task_iconified_font_color = #ffff00 70
#font_shadow = 0
# System Tray
#systray = 1
#systray_padding = 0 4 5
#systray_sort = ascending
#systray_sort = right2left
#systray_background_id = 0
#systray_icon_size = 0
#systray_icon_asb = 100 0 0
# Clock
time1_format = %H:%M:%S
time1_font = sans bold 8
time2_format = %A %d. %B
time2_font = sans bold 6
clock_font_color = #ffff00 100
clock_padding = 10 0
clock_background_id = 0
clock_lclick_command = plan -S
clock_rclick_command = xclock
# Tooltips
tooltip = 0
tooltip_padding = 2 2
tooltip_show_timeout = 0.7
tooltip_hide_timeout = 0.3
tooltip_background_id = 1
tooltip_font = sans 10
tooltip_font_color = #OOOOOO 80
# Mouse
#mouse_middle = toggle_iconify
#mouse_right = close
#mouse_scroll_up = toggle
#mouse_scroll_down = iconify
# Battery
#battery = 0
#battery_low_status = 10
#battery_low_cmd = notify-send "battery low"
#battery_hide = 98
#bat1_font = sans 8
#bat2_font = sans 6
#battery_font_color = #ffffff 76
#battery_padding = 1 0
#battery_background_id = 0
# End of config
This is run from my openbox autostart.sh as
# Panel
( sleep 3 && tint2 ) &
( sleep 3 && tint2 -c /home/bp/.config/tint2/tint2rc-clock ) & -
How to save report in PersonalCategory after creating it using java panel?
Hi,
Anybody knows How to save report in PersonalCategory after creating it using java panel?
I dont want to save it in public folder. I want to save report (webi) in user's personal category.
can anybody send me source code?
It will help me a lot.
Thanks in advance
Amol MaliHi teda,
i'm assuming that you have seen my post that i did successfuly save report in user's personal category.
Actually the report is created in webi java panel using RE SDK and is saved in Report Sample Folder then i'm saving it in user's personal category by following code
string query = "Select SI_PERSONAL_CATEGORIES From CI_INFOOBJECTS Where "
+ "SI_INSTANCE=0 And SI_ID=" + reportID;
InfoObjects infoObjects = infoStore.Query(query);
InfoObject infoObject = infoObjects[1];
Webi wreport = (Webi)infoObject;
ObjectRelativeIDs personalIDs = wreport.PersonalCategories;
/personalIDs.Add(Convert.ToInt32(categoryID));
infoStore.Commit(infoObjects);
But the report is presents in the Folder also and in user's personal category also.
I dont want the report to be in the folder (Report Sample) if i saved it in user's personal category.
How can i do that?
any idea.
Please help me.
Thanks in advance
Amol Mali
Edited by: amol mali on Jan 9, 2009 7:55 PM -
I am trying to generate an application that saves a copy of its front panel on completion. This is easy to do using an invoke node with Print VI to HTML but this does not work in an .exe format. I have seen elsewhere that you have to use the Get Panel Image method, but no details are supplied in LV 5.0.1 documentation of how to use the "image" data (1-D Unsigned Byte array) that is generated. I want to save this in a format that can then be read as a bitmap in any standard graphics package. Any assistance?
Hi,
If you'd upgrade to LV5.1 or 6 you could use the 'standard' vi's for this.
You need a VI called "Write BMP File.vi". It's not shipped with LV5.0.1.
This vi only uses 3 subVI's, so perhaps someone at NI can convert it and
send it to you (sorry, I won't, it's copywrited).
If you cannot get this VI anywhere, you'll need to figure out the BMP file
format yourself. It's not too complicated, but still could take some days.
Perhaps someone figured it out before LV5.1 was released.
Regards,
Wiebe.
"RDK" wrote in message
news:[email protected]..
> I want to use Get Panel Image in Labview 5.0.1 and need details on how
> to save the BMP data generated
>
> I am trying to generate an application that saves a copy
of its front
> panel on completion. This is easy to do using an invoke node with
> Print VI to HTML but this does not work in an .exe format. I have seen
> elsewhere that you have to use the Get Panel Image method, but no
> details are supplied in LV 5.0.1 documentation of how to use the
> "image" data (1-D Unsigned Byte array) that is generated. I want to
> save this in a format that can then be read as a bitmap in any
> standard graphics package. Any assistance? -
Example on how to use the NI "saving a front panel img to file" on a prog.
New to the labview program - I'm trying to save the front panel of the displayed output to file. I downloaded "Panel_Image_to_File.zip" from the NI site. But I'm having problem using the code to our program so as to save the image as a jpeg.
A simple example on how to use the code or any other code that will be able to save the front panel to a specified folder will be great.All you should need is an invoke node of VI class and the the method Get Panel Image. Wire the Image Data output to the Write JPEG File on the Graphics & Sound>Graphics Formats palette. The Invoke Node is on the application Control palette. When it's on the diagram, right click and select Class>VI Server>VI. Right click on it again and select Methods>Get Panel Image.
Attachments:
Save to jpg.jpg 10 KB -
How can i use control panel in win vista
Can i get an old version of icloud ( may be V.2 ) to install an use control panel in win Vista. The newest version (v. 3.1) only works in win 7 or win 8
You can get ver. 2.1.2 here: http://support.apple.com/kb/DL1687.
-
How to display SubVI on secondary monitor using remote panels?
I am trying to have a SubVI called from a Main VI open on a secondary monitor. I am using Remote Panels to control my Main application, which is opened in a web browser on the secondary monitor. I have tried setting the VI Properties - Window Run-Time Position - Monitor to "1" and also tried setting this value programatically using the Front Panel Property Node but neither seems to work. My SubVI still appears on my primary monitor.
I'm using LV 8.6.1 RT and my application is running on a CRIO.
I'd appreciate any help.
Thanks
Dan
Solved!
Go to Solution.Mike,
All the SubVI does is prompt the user for some text. The front panel is a simple string control. The SubVI is called from my Main application (not using VI Server) and I have the Window Properties for the SubVI set so that the front panel opens when called, and closes when finshed. The SubVI displays teh fornt panel when called but does not open a new browser window. I have attached the SubVI in case you want ot have a look.
Attachments:
New Name.vi 25 KB -
I don't understand how to use the System Font Panel with iMovie.
I need an explanation of how the System Font Panel works. I guess there's a way to get some of those fonts to the iMovie Font Panel, but I can't see how.
Thank you.I have had good success with the System Font Panel. Now all of a sudden, I only get part of it. Any suggestions on how to restore the entire panel? There are no change size options in the corners like in some dialog boxes. I was going to paste what I have here, but for some reason, paste is not available.
-
Contextual Panel of GP in collapsable window like Navigation Panel
hi all
i want to put the Contextual Panel of Guided Procedure in the collapsable window LIKE the Navigation Panel of the portal (not in Navigation Panel).
For this to achieve, In Portal Content,
I created a copy of "Navigation Panel & Content Area Layout" and made its "Object is a Template" as TRUE.
Then I created a new page of Default Page Template so that i can use my "Navigation Panel & Content Area Layout" and put the Contextual Panel of GP in "Navigational Panel".
Now when I added this page into "Portal Content -> Content Provided by SAP -> Platform Add-Ons -> Guided Procedures -> Pages -> Process Instance" page, a warning message appears saying "The object you have added is not fully compatible with the page. Therefore, its Isolation Method property has been set to URL and read only." and does so, and because of this the Contextual Panel of GP comes in the collapsable Navigational Panel as per my requirement but the height of the page is not sufficient enough to display the whole page in the required format.
Thus, defeats my sole purpose.
So please help to solve this problem.
Thanks & Regards
Vivekhi all
lets leave the above requirement aside.
even if that works, it won't solve my purpose because
i found that even if i get the gp's Contextual Panel / Process Activies Panel in a collapsable window
or i hide the it, this won't appear in the collapsable window or get hidden when i initiate the process using the generated URL.
As per my requirement, i need a URL which will initiate a new GP process and doesn't show
Contextual Panel / Process Activies Panel on the left side.
But the generated URL doesn't hide it.
I think there should be some additional parameter which I should pass along the URL and the started process won't show the Contextual Panel / Process Activies Panel.
If anyone knows how to get rid of Contextual Panel / Process Activies Panel, please reply.
Thanks & Regards
Vivek -
Hi,
I have created an application which has a contextual panel.I am Filling the panel using the below code in SUPPLY_VIEW_SWITCH function:
DATA TAB TYPE WD_THIS->ELEMENTS_N_VIEW_SWITCH.
DATA LINE TYPE WD_THIS->ELEMENT_N_VIEW_SWITCH.
LINE-TEXT = 'Invoice'. "#EC NOTEXT
LINE-ENABLED = ABAP_TRUE.
APPEND LINE TO TAB.
LINE-TEXT = 'Delivery Status'. "#EC NOTEXT
LINE-ENABLED = ABAP_TRUE.
APPEND LINE TO TAB.
Now I want to show an ALV report when the user presses the Invoice button. Please suggest how to write code in method ONACTIONON_VIEW_SWITCH (Action on Selection in View Switch). I guess we have tohandle it using the cases, but dont know the coding part of it.Hi Ashutosh,
In order to use ALV, you have to define the usage of the component SALV_WD_TABLE in your component.
You could refer the below link for the detailed step by step procedure.
[ALV Document|http://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/3439404a-0801-0010-dda5-8c14514d690d?overridelayout=true]
You can alternatively use Table UI Element to achieve the same.
Edited by: Anurag Chopra on Dec 9, 2009 2:44 PM -
How to open front panel of a VI running in RT.
Hi,
I have an application to read the encoder position using the cRIO program. I have made an executable and this application runs as startup application whenever the controller reboots. Right now, i am accessing the VI of the startup exe through Remote Panel connection. This works fine but everytime i close the remote panel , i have to reboot the controller for the next view.
So is there any alterntaive to open the front panel of the VI.
I tried using VIServer but ran into errors. (i tried using front panel -open property node.did not work)
Also i do not have any VIs stored on the controller. Only the exe is stored on the ni-rt/startup folder on the RT controller.
Please let me know how to open this VI.
Thanks.Hi Ben,
When i close the remote front panel the first time, i am terminating the RT VI which is running on startup.
So i had to reboot everytime to access the remote VI. I guess that the VI (exe) should be continuosly running when the RT is started up. The remote panel only should be opened and closed. After I close the remote panel , i want a windows VI to be opened up.
I have a Windows VI which programmatically opens connection to the RT server for opening the remote panel. The VI runs. When the user clicks Exit on this RT VI, the VI running is stopped and then another windows VI opens up. This works fine for first time. Since the RT VI is terminated, second time , if I run, it says, VI not in server memory.
Is there a method to close the remote panel programmatically in the RT VI itself. I have a Exit button in this RT VI, so if the user clicks, Exit, the program has to be running, but the remote panel has to close. There is a method called close connection to client , but this does not work in RT , as this requires VI path.. Right now , when the remote panel RT VI is launced, to close the remote panel, i click on the 'close' button on the VI title bar. Again when the remote panel is launched, there is no error. but is there a method to close the remote panel in the server(RT VI itself). i have attached the VI.
Thank you.
Attachments:
Dummytest.vi 39 KB -
How to use tree tables with CRUD operation for begineers ADF 11g
This is Friday night call for help.
This is only few sample ressources on the web for tree table and only one with CRUD operation.
I used this one http://jobinesh.blogspot.com/2010/05/crud-operations-on-tree-table.html because this is the only one that address CRUD.
And it is shaky. Deletion works fine but insertion not very well. This is working using custom code provided below.
Depending if the user selection in the tree, the code insert from the master node to the children node.
Any other options because it is not working well.
Also where Oracle describes how to use the row, rowset, itorator API? This is really hard to understand like almost if we should not use it.
then if not how can I insert in tree with two nodes and insert in the parent or children depending the users selection.
Lately I 'been posting questions on this forum with no response. This hurts. I understand developers cannot spend their time on this but People from Oracle, please help. We pay licenses...
public void createChildren(RowIterator ri, Key selectedNodeKey) {
final String deptViewDefName = "model.DepartmentsView";
final String empViewDefName = "model.EmployeesView";
if (ri != null && selectedNodeKey != null) {
Row last = ri.last();
Key lastRowKey = last.getKey();
// if the select row is not the last row in the row iterator...
Row[] found = ri.findByKey(selectedNodeKey, 1);
if (found != null && found.length == 1) {
Row foundRow = found[0];
String nodeDefname =
foundRow.getStructureDef().getDefFullName();
if (nodeDefname.equals(deptViewDefName)) {
RowSet parents =
(RowSet)foundRow.getAttribute("EmployeesView");
Row childrow = parents.createRow();
parents.insertRow(childrow);
} else {
RowSet parents =
(RowSet)foundRow.getAttribute("EmployeesView");
Row childrow = parents.createRow();
childrow.setAttribute("DepartmentId",
foundRow.getAttribute("DepartmentId"));
parents.insertRow(childrow);
} else {
System.out.println("Node not Found for " + selectedNodeKey);
}I am looking for a sample that describe how to design a jsf page with a tree table.
So you have Department and employees. In the tree first comes Department and if you click the node you see the employees assigned to this department.
I need to be able to insert a new department or a new employee from the tree table by clicking on a insert button in the panel collection toolbar depending on user selection in the tree.
I got part of it working but not good enough.
By problem is the get insertion working
I have a createChildren method in my AM implementation that get in input a RowIterator and selected node key.
To goal is to create new records depending of the user selection and the input parameters get populated by the binding like this:
#{backing_treeSampleBean.selectedNodeRowIterator} #{backing_TreeSampleBean.selectedNodeRowkey} via method binding with parameters.
Is it the right approach?
First to be able to insert a parent record, I select nothing in the tree and ri and selectedNodeKey comes to null
we run this code
ViewObjectImpl vo = getSchHolidaySchedExceptionsView1();
//ViewObjectImpl vo = getDepartmentsView1();
Row foundRow = vo.first();
Row childrow = vo.createRow();
vo.insertRow(childrow);
A new blank entry appears in the parent node and we enter a value.
The the problem starts when we want to add a child to this parent.
We select the created parent and press the insert button, this code get executed
if (nodeDefname.equals(deptViewDefName))
//list of the children of the parent and create an new row
RowSet childRows = (RowSet)foundRow.getAttribute("SchHolidayExceptionDatesView");
Row childrow = childRows.createRow();
childRows.insertRow(childrow);
But the new entry does not appear, it is almost like it would be created for a different parent because this is a mandatory field that is not feel in yet and the interface complaints of a missing value. It is created somewhere just not a the right place... This is my guess.
Do you see something wrong with the code?
The full code og my create children method is there below
I am using jdeveloper 11.1.1.3.0 any issues with tree table to know about with this version?
Thanks for your help
public void createChildren(RowIterator ri, Key selectedNodeKey) {
final String deptViewDefName = "com.bcferries.app.pdfroutesched.model.SchHolidaySchedExceptionsView";
final String empViewDefName = "com.bcferries.app.pdfroutesched.model.SchHolidayExceptionDatesView";
if (ri != null && selectedNodeKey != null) {
// last row
Row last = ri.last();
Key lastRowKey = last.getKey();
// if the select row is not the last row in the row iterator...
Row[] found = ri.findByKey(selectedNodeKey, 1);
if (found != null && found.length == 1) {
// foundRow is the row selected
Row foundRow = found[0];
// The row selected can be the parent node or the child node
String nodeDefname = foundRow.getStructureDef().getDefFullName();
// if parent row
if (nodeDefname.equals(deptViewDefName))
//list of the children of the parent and create an new row
//works but we try to resolve the creation of a parent
RowSet childRows = (RowSet)foundRow.getAttribute("SchHolidayExceptionDatesView");
Row childrow = childRows.createRow();
//childrow.setAttribute("HolidayDate", new java.util.Date().getDate());
System.out.println("insert child row from master");
childRows.insertRow(childrow);
} else
//RowSet ParentRow = (RowSet)foundRow.getAttribute("SchHolidaySchedExceptionsView");
//RowSet childRows = (RowSet)ParentRow.first().getAttribute("SchHolidayExceptionDatesView");
Row childrow = ri.createRow();
System.out.println("insert child row from child ");
} else {
System.out.println("Node not Found for " + selectedNodeKey);
} else {
System.out.println(" param null try creating for first row : " +
ri + " * " + selectedNodeKey);
ViewObjectImpl vo = getSchHolidaySchedExceptionsView1();
Row foundRow = vo.first();
Row childrow = vo.createRow();
vo.insertRow(childrow);
}
Maybe you are looking for
-
HT5012 Can't get face time on my iPhone 4 now why
I for some reason now the face time isn't on my phone as well as the plus sign for three way calling
-
Unable to Communicate with Printer - Photosmart 6520
A few days ago this issue popped up out of no where. I've been using the printer for a few months now with out an issue, but all of a sudden all of our computers can no longer print. When ever I try an error pops up that the computer cannot communica
-
Unable to start Apps after cloning
Hi, I cloned my VISION instance on linux to "VISION1". The "perl adcfgclone.pl appsTier" command failed to start the apps tier services. I am getting the following error. You are running adfrmctl.sh version 115.33 Cannot reconnect to gateway Cause: A
-
Trouble downloading Cinema 4d Lite update.
Can't download update for 2 days. Maxon says come back later. Updates from Adobe work fine during same time period.
-
I was given an iPhone4 by a friend who bought it in Singapore. However the phone has been dropping calls so I plan to have it replaced. I am unable to contact my friend to find out which shop he bought it from. Can I go to any Apple store in Singapor