SAPUI5 chart not visible...when running from within the portal - sapui5

I have a really bizarre one here...I have developed and deployed to my back end system a launchpad application that currently works OK. Part of this application is a report that, based on certain filters, returns a table and a chart (see snapshot below).
After finishing deployment next step is configuring the app so it runs from the launchpad within the SAP portal. Not familiar with the portal, another colleague undertook the task, application is now running from within the portal as well. With one exception - the chart above is not visible (see 2nd snapshot below).
Noticing the "No Data" message and NO exception in the Chrome debugger, thought as a good idea to debug the OData methods in the back end. To my big surprise, found out that while filters pass to the method just fine both for table and chart (two different entities but almost identical and accepting exactly the same parameters) when running outside portal, when running from within (the portal) parameters "get lost" on their way to the chart entity - no parameters for the chart method. See snapshots below and pay attention to the IT_FILTER_SELECT_OPTIONS at the bottom right.
Outside portal (parameter table filled)
Within Portal (parameter table empty)
Furthermore, the filter table passed to both OData tables is common, you can see the code underneath - just two lines: one for table and one for chart binding.
Closing with a clarification. Mentioned above that there are no errors in the debugger when calling the back end methods. There are actually a couple of them but they take place during the initialization of the app and do not seem to affect anything else in the app, which aside a set of reports has a lot of data operations (dialogs, tables etc), everything else works fine. These errors can be seen below.
Does this situation ring any bells to anyone?
Thanks in advance

Issue solved, it was a deployment issue...

Related

How to generate system alias in /iwfnd/maint_service?

I have following problem:
I created an app and the according oData in frontend system. Everything worked fine. Then I was taught, that this was not correct and I have to create the oData in backend system.
So I made this. I created just the same oData in backend system, created another service for the new oData in transaction /iwfnd/maint_service in frontend system, changed the data source in the manifest of my app, and everything seemed to work fine. To add the app to the launchpad I needed one (or two?) more services in transaction SICF (paths sap/bc/bsp/sap and sap/bc/ui5_ui5/sap). Those were generated automatically for my "frontend-oData". As those weren't generated automatically in frontend system for my new "backend-oData", I added them manually. This seemed to work as well. So I transported everything into quality system (the app from WebIDE to SAP was transported as "updating an already existing application").
And now my problem:
Yesterday after transporting my app ran perfectly in just updated version. Today I get an error in quality system, that says:
"No systemalias for service 'ZEXAMPLE_SRV_0001' and user 'USER1234' found" (I translated this error message from german). This error is new to me and I did not have this before. The settings for my "frontend-oData" were different ones (no systemalias & service processing mode = "Co-deployed only") and they were generated automatically.
Now for my "backend-oData" in development system there is the setting "Routing-based" and the correct systemalias is maintained and the app runs perfectly there. But in quality system there is no systemalias maintained. So I transported the systemalias from development system to quality system, but that didn't work, because the systemalias has to be a different one in quality system.
I tried to make exact the same settings in quality system for my "backend-oData" as the "frontend-oData" has, but then in /IWFND/ERROR_LOG I get the message "No service for namenspace /SAP/, Name ZEXAMPLE_SRV, Version 0001 found."
So can anyone tell me the secret which step I need to do, that everything runs correctly again? I am desperated by now.
Many thanks and best regards
In your dev system open transaction /IWFND/MAINT_SERVICE and select the service in the service catalogue.
You should see the system aliases in the bottom right:
Press on Customizing and in the following view switch to edit mode:
As soon as you are in edit mode, you can select Table view > Transport. It will ask you to select an existing transport or to create a new one.
Two buttons will appear in the customizing view. Add to transport and Remove from transport.
Select the system alias row from the table and press Add to transport.
Now press save!!! Otherwise the alias will not be part of the transport. It's only "put on hold" when you press "Add to transport". Press save!!!
Move the transport to your next system (and eventually into production) if you want to use your OData service in other systems.

Causes for "report source could not be retrieved from the state object"

I have a legacy system that has a CMS server set up to generate Crystal Reports all from the same database. Users will input the required parameters in a front end application, which then passes it to the CMS to generate the report in a CrystalReportViewer.jsp page. The report titles as shown in both the CMC console and InfoView is as follows:
PersonnelDetailsA
PersonnelDetailsB
PersonnelDetailsC
After a recent update to the application (which did not touch on the Crystal Report functionality at all), users reported that they were unable to generate a report for PersonnelDetailsB (A and C were both working fine). The stated error message that they got was
Report source could not be retrieved from the state object
After some googling and trial and error on our development setup, I figured out that the error was caused by the CMS not being able to find the report requested, so my immediate, and actually only, hypothesis was that the report name my application passed to the CMS was wrong (the only way I've managed to reproduce the error). So I went and verified it in the production InfoView.
Turns out I was dead wrong. All the report names are correct.
As far as I know, nothing has changed with the set up of the CMS in production. The reports worked fine prior to our application update and I've verified that we did not make any changes in our application that would affect the Crystal Report functionality. In fact all the reports work perfectly in our development setup. Yet something clearly went wrong when we deployed to production. All 3 reports are in the same folder, and yet one of them cannot be found even when the correct report name is provided.
What am I missing here? What other way would cause the CMS to throw that specific error beside not being able to find the report in question?

How do you set up an Optimizely test for a single-page app?

I have a single-page web app that presents a multi-step photo management "wizard", split up across several discrete steps (photo upload, styling, annotation, publishing) via a tab strip. On switching steps I set the URL hash to #publishing-step (or whichever step was activated).
How do I set up Optimizely tests to run on the various discrete steps of the wizard?
The browser never leaves the page, so it only gets a single window.load event. Its DOM isn't getting scrapped or regenerated, but just switches what page elements are visible at any one time via display: none or block, so the part I am trying to figure out is really mostly about in what way I go about the Optimizely test setup itself - it's fine (and likely necessary) if all edits get applied at once.
This thing unfortunately has to work in IE9, so I can't use history.pushState to get pretty discrete urls for each step.
There's actually several ways you could go about doing this, and which option you choose will largely depend on what's easiest for you AND how you plan to analyze the data.
If you want to use Optimizely's analytics dashboard:
I would recommend creating one experiment which will activate a bunch of other experiments at different times. The activation experiment will be targeted to everyone and run immediately when they get to your wizard. The other experiments will be set up with manual activation and triggered by this experiment.
The activation experiment would have code like:
window.optimizely = window.optimizely || [];
function hashChanged() {
if(location.hash === 'publishing-step') {
window.optimizely.push(['activate', 0000000000]);
}
if(location.hash === 'checkout-step') {
window.optimizely.push(['activate', 1111111111]);
}
}
window.addEventListener('hashchange', hashChanged, false);
Or you could call window.optimizely.push(['activate', xxxxxxxxx]); directly from your site's code instead of creating an activation experiment and listening for hashchange.
If you want to use a 3rd party analytics tool like Google Analytics:
You could do this all in one experiment with code similar to above, but in each "if" section instead of activating an experiment, you could run your variation code that makes changes to the wizard and sends special tracking information to your analytics sweet for later reporting. You'll have to do your own statistical significance calculation for this method (as Optimizely's data won't be "clean"), but this method actually works out better usually if properly configured.
Alternatively you could use the method outlined above but still try to use the Optimizely analytics dashboard by creating custom events on your experiment and sending data to them using calls like window.optimizely.push(["trackEvent", "eventName"]);
This article may also be helpful to you.
You'll probably need to do this yourself, using Optimizely's JS API to trigger actions on their end and tell it what your users did: https://www.optimizely.com/docs/api

how can I improve iPhone UI Automation?

I was googling a lot in order to find a solution for my problems with UI Automation. I found a post that nice summarizes the issues:
There's no way to run tests from the command line.(...)
There's no way to set up or reset state. (...)
Part of the previous problem is that UI Automation has no concept of discrete tests. (...)
There's no way to programmatically retrieve the results of the test run. (...)
source: https://content.pivotal.io/blog/iphone-ui-automation-tests-a-decent-start
Problem no. 3 can be solved with jasmine (https://github.com/pivotal/jasmine-iphone)
How about other problems? Have there been any improvements introduced since that post (July 20, 2010)?
And one more problem: is it true that the only existing method for selecting a particular UI element is adding an accessibility label in the application source code?
While UI Automation has improved since that post was made, the improvements that I've seen have all been related to reliability rather than new functionality.
He brings up good points about some of the issues with using UI Automation for more serious testing. If you read the comments later on, there's a significant amount of discussion about ways to address these issues.
The topic of running tests from the command line is discussed in this question, where a potential solution is hinted at in the Apple Developer Forums. I've not tried this myself.
You can export the results of a test after it is run, which you could parse offline.
Finally, in regards to your last question, you can address UI elements without assigning them an accessibility label. Many common UIKit controls are accessible by default, so you can already target them by name. Otherwise, you can pick out views from their location in the display hierarchy, like in the following example:
var tableView = mainWindow.tableViews()[0];
As always, if there's something missing from the UI Automation tool that is important to you, file an enhancement request so that it might find its way into the next version of the SDK.
Have you tried IMAT? https://code.intuit.com/sf/sfmain/do/viewProject/projects.ginsu . It uses the native javascript sdk that Apple provides and can be triggered via command line or Instruments.
In response to each of your questions:
There's no way to run tests from the command line.(...)
Apple now provides this. With IMAT, you can kick off tests via command line or via Instruments. Before Apple provided the command line interface, we were using AppleScript to bring up Instruments and then kick off the tests - nasty.
There's no way to set up or reset state. (...)
Check out this state diagram: https://code.intuit.com/sf/wiki/do/viewPage/projects.ginsu/wiki/RecoveringFromTestFailures
Part of the previous problem is that UI Automation has no concept of discrete tests. (...)
Agreed. Both IMAT and tuneup.js (https://github.com/alexvollmer/tuneup_js#readme) allow for this.
There's no way to programmatically retrieve the results of the test run. (...)
Reading the trailing plist file is not trivial. IMAT provides a jUnit like report after a test run by reading the plist file and this is picked up by my CI Tool (Teamcity, Jenkins, CruiseControl)
Check out http://lemonjar.com/blog/?p=69
It talks about how to run UIA from the command line
Try to check the element hierarchy, the table can be placed over a UIScrollView.
var tableV = mainWindowTarget.scrollViews()[0].tableViews()[0].scrollToElementWithName("Name of element inside the cell");
the above script will work even the element is in 12th cell(but the name should be exactly the same as mentioned inside the cell)

WatiN SelectList Methods - Page not refreshing/actions not being fired after interacting with a select list

Preface:
If you don't care about the preface, skip down to the section marked "Question."
Hi,
Recently my company has upgraded to the latest version of WatiN for its test automation framework. We upgraded to avoid a problem where interacting with a select list would cause an ACCSES DENIED error. This error seems to be a product of the fact that our web application reloads the page it is on (which sits in a frame which sits in a frameset) with new fields after certain select lists options are selected. It could also be that our framework, which wraps around WatiN, often does actions on the same SelectList after the page refresh (I'm still looking into this, I'm new to the framework).
The new version of WatiN does solve the ACCESS DENIED error, but also seems to stop select lists from firing the action that causes the page to reload w/ its new options. In fact, if you use WatiN to make the selection, the select list won't work correctly, even if manually interacted with, until the page has been forced to refresh.
Question:
When selecting an option in a SelectList using the newest WatiN code, the event that causes our web app's page to reload with new fields/values does not execute. What are some possibilities that could cause this?
The term i've seen used most often to describe the refreshing that occurs when our select lists are used is "double post-back".
Many thanks,
Chad
This is part of the new WatiN code. The new code, if you look into the SelectList class has comments about the fact that it has been changed so that these events don't exactly fire. It says something along the lines of "you may need to use a key press or other event to get a select list to fire its events".
This didn't work for me so we went back to the old code.
One thing that has helped is wrapping calls to the select list w/ a try/catch(System.UnauthorizedAccess e) and then doing a .Refresh on the select list object. Afterwards, the call can be retried and it seems to work pretty well.