Retrieving form groups using freeASPUpload - forms

Sorry for the noob question. Is it possible to replicate something like this when using freeASPUpload which uses enctype="multipart/form-data" encrypted forms.
For i = 1 to Request.Form.Count
Response.Write(Request.Form.Key(i))
Response.Write(Request.Form.Item(i))
Next
I know I can access individual form fields using something like Upload.Form("Name"), but I'm trying to work out how to access all the form as a group.
Thanks.

Untested, but this should work for you...
For each x in Upload.FormElements
Response.Write(x)
Response.Write(Upload.Form(x))
Next

Don't have a upload setup to check right now, but wont this work ?
For each x in Upload.Form
Response.Write(x)
Response.Write(Upload.Form(x))
Next
Here's the link for the component:http://www.freeaspupload.net/freeaspupload/documentation.asp

Related

Stable ID's in fiori launchpad

I am using a FlexColumnLayout for my app.
In the mid column I need to access a controll of the begin column of the FlexColumnLayout. Here is the problem:
Since it is a different view I cannot use
this.getView().byId("myId")
My first solution was to use stable ID's, by giving the views (XML) IDs.
Like that I could use:
sap.ui.getCore().byId("application---viewId--myId")
At first it worked just fine, but now that I integrated my app into the fiori launchpad the first part of the stable ID (the part before "viewId") changed and when I transport into productive it will change again.
Is there a way to access the mid column controls without sap.ui.getCore().byId?
Or is there a way to load the first part dynamically so I don't need to change my IDs when tranporting?
Sadly I don't know how to reproduce a Launchpad for testing purposes, but for those who want to test their ideas about my problem, my FlexColumnLayout is build just like in the DemoApp: https://sapui5.hana.ondemand.com/#/entity/sap.f.FlexibleColumnLayout
Ok guys i found a solution:
this.getView().getParent().getParent()
returns the FlexColumnLayout. This has a method called "getBeginColumnPages", which returns an array of the views representing the begin column. Now that i can access the view in which my control is found, i can access it with the sap.ui.core.mvc.View.byId() method.
Now I have
this.getView().getParent().getParent().getMidColumnPages()[0].byId("myId")
Since the doulbe .getParent() doesn't seem to be ideal, please post a better solution if you know one : D
You have to use createId() function, this will return the complete ID of your control.
this.byId(this.createId("myid"));

In the qbXML ItemQuery request , how do I get the description for a service item?

I am creating a tool that will synchronize our production database with QuickBooks (QB). I am trying to get a list of all the items in QB using ItemQuery and I want to get the description of each item as well. However, it seems that different types of items have different ways of specifying the description. Using IncludeRetElement, I am able to get the SalesDesc for ItemInventoryRet, but I am struggling with getting the description for ItemServiceRet (and a few others, but I think if I can figure this one out, I will be able to figure out the others).
Here is my request...
<?qbxml version="12.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<ItemQueryRq requestID="2">
<IncludeRetElement>ListID</IncludeRetElement>
<IncludeRetElement>Name</IncludeRetElement>
<IncludeRetElement>FullName</IncludeRetElement>
<IncludeRetElement>ParentRef</IncludeRetElement>
<IncludeRetElement>SalesAndPurchase_SalesDesc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
<IncludeRetElement>ItemDesc</IncludeRetElement>
<IncludeRetElement>SalesDesc</IncludeRetElement>
</ItemQueryRq>
</QBXMLMsgsRq>
</QBXML>
And here is the response I'm getting (shortened for clarity)...
<QBXML>
<QBXMLMsgsRs>
<ItemQueryRs requestID="2" statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<ItemServiceRet>
<ListID>240000-1071531214</ListID>
<Name>Delivery</Name>
<FullName>Delivery</FullName>
</ItemServiceRet>
<ItemInventoryRet>
<ListID>270000-1071524193</ListID>
<Name>1/2" Line</Name>
<FullName>Irrigation Hose:1/2" Line</FullName>
<SalesDesc>1/2" Vinyl Irrigation Line</SalesDesc>
</ItemInventoryRet>
<ItemGroupRet>
<ListID>1E0000-934380927</ListID>
<Name>Walkway</Name>
<ItemDesc>Walkway lighting</ItemDesc>
</ItemGroupRet>
</ItemQueryRs>
</QBXMLMsgsRs>
</QBXML>
According to the documentation (pick ItemQuery from the dropdown), the description I think I want is ItemServiceRet > ORSalePurchase > SaleOrPurchase > Desc. The request includes one way I've tried, but I've tried quite a few other ways as well...
<IncludeRetElement>ORSalesPurchase:SalesOrPurchase:Desc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase.SalesOrPurchase.Desc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase_SalesOrPurchase_Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase:Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase.Desc</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase_Desc</IncludeRetElement>
<IncludeRetElement>Desc</IncludeRetElement>
So the question is, how do you retrieve sub elements in qbXML queries?
I have found that if I remove all the IncludeRetElements, I do get the values. But I would like to learn how to only get the data I care about. We have a HUGE QB database so this could be a major performance issue if I have to get everything.
As a note, I switched to using QBFC10Lib instead of creating the XML myself hoping it would help me solve this issue, but it didn't. I am still having the exact same issue. I'm guessing that an answer to one will resolve both qbXML and QBFC.
I figured it out. You have to add each level separately, like this...
<?qbxml version="12.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<ItemQueryRq requestID="2">
<IncludeRetElement>ListID</IncludeRetElement>
<IncludeRetElement>Name</IncludeRetElement>
<IncludeRetElement>FullName</IncludeRetElement>
<IncludeRetElement>ItemDesc</IncludeRetElement>
<IncludeRetElement>SalesDesc</IncludeRetElement>
<IncludeRetElement>ORSalesPurchase</IncludeRetElement>
<IncludeRetElement>SalesOrPurchase</IncludeRetElement>
<IncludeRetElement>SalesAndPurchase</IncludeRetElement>
<IncludeRetElement>Desc</IncludeRetElement>
</ItemQueryRq>
</QBXMLMsgsRq>
</QBXML>
I had tried this earlier, but I think I missed a level. Anyway, hopefully this answer will help somebody else from wasting half their day :).

Getting success message from a form that posts data to google spreadsheet

I have been developing a form and have linked it to the Google Docs spreadsheet. So when a user enters details it goes straight to the spreadsheet and populates it. I took the advice from this bit of code here;
http://mashe.hawksey.info/2011/10/google-spreadsheets-as-a-database-insert-with-apps-script-form-postget-submit-method
It works perfectly here: http://betaburo.markdunbavan.co.uk
My only problem is that I want to create a success message and error messages.
There is a bit of code in the main.js file that basically validates it but it is not working or recognising the errors or the success.
Any help would be much appreciated.
Thanks,
Mark
If you use jQuery you can check to see that something has been entered. There are a couple ways to do this.
For example, if you wanted to validate your first name field you could do:
if ($('input#field1').val() == ''){
$('span.successMessage').hide();
$('span.errorMessage').show();
}
else {
$('span.successMessage').show();
$('span.errorMessage').hide();
}
You could also use .serialize on the input, then display the success/error message depending on the length of the serialized entry (i.d. use .length on the serialized entry).

WebDriver and GWT Suggest Boxes

Ok...I give up :)
What is the best way to select values out of a GWT Suggest Box using
WebDriver? I'm using FirefoxDriver, and so far nothing seems to pick
values out of a GWT suggestBox...not sendKeys, not selenium.keyUp,
anything.
I've even tried executing javascript directly to get those values to populate, like this (to no avail):
((JavascriptExecutor) driver).executeScript("document.getElementById('spSelect').value='verizon'");
Is there a better
way? If not, what is the "best" way to get values out of a GWT suggest
Box?
Many thanks in advance.
Cheers
Pedro
Ok, we've figured out our problem.
We were setting explicit IDs on our elements, so our tests can grab
them easier. In GWT this is done via:
usernameLabel.getElement().setId("consoleLoginPageUserNameInput");
This works fine for most GWT inputs, but for the SuggestBox it is
handled a bit differently:
spSelect.getElement().getElementsByTagName("input").getItem(0).setId("spSelect");
After grabbing the correct inner table, we are able to interact with
this input with Selenium just fine. Hope this helps someone.
Cheers
Pedro
Try this javascript (from here):
To set the value:
document.getElementById("spSelect")["value"] = "verizon"
To retrieve it:
var value = document.getElementById("spSelect")["value"];

How do I get the text-form verification code when doing auto site access in Perl?

I'm playing around with Win32::IE:Mechanize to try to access some authentication-required sites automatically. So far I've achieved moderate success, for example, I can automatically log in to my yahoo mailbox. But I find many sites are using some kind of image verification mechanism, which is possibly called CAPTCHA. I can do nothing to them. But one of the sites I'm trying to auto access is using a plain-text verification code. It is comnposed of four digits, selectable and copyable. But they're not in the source file which can be fetched using
$mech->content;
I searched for the keyword that appears on the webpage but not in the source file through all the files in the Temporary Internet Files but still can't find it.
Any idea what's going on? I was suspecting that the verification code was somehow hidden in some cookie file but I can't seem to find it :(
The following is the code that completes all the fields requirements except for the verification code:
use warnings;
use Win32::IE::Mechanize;
my $url = "http://www.zjsmap.com/smap/smap_login.jsp";
my $eccode = "myeccode";
my $username = "myaccountname";
my $password = "mypassword";
my $verify = "I can't figure out how to let the script get the code yet"
my $mech = Win32::IE::Mechanize->new(visible=>1);
$mech->get($url);
sleep(1); #avoids undefined value error
$mech->form_name("BaseForm");
$mech->field(ECCODE => $eccode);
$mech->field(MEMBERACCOUNT => $username);
$mech->field(PASSWORD => $password);
$mech->field(verify => $verify);
$mech->click();
Like always any suggestions/comments would be greatly appreciated :)
UPDATE
I've figured out a not-so-smart way to solve this problem. Please comment on my own asnwer posted below. Thanks like always :)
This is the reason why they are there. To stop program like yours to do automated stuff ;-)
A CAPTCHA or Captcha is a type of
challenge-response test used in
computing to ensure that the response
is not generated by a computer.
This appears to be an irrelevant number. The page uses it in 3 places: generating it; displaying it on the form next to the input field for it; and checking for the input value being equal to the random number chosen. That is, it is a client-only check. Still, if you disable javascript it looks like, I'm guessing, important cookies don't get set. If you can execute JavaScript in the context of the page (you should be able to with a get method call and a javascript URI), you could change the value of random_number to f.e. 42 and fill that in on the form.
The code is inserted by JavaScript – disable JS, reload the page and see it disappear. You have to hunt through the JS code to get an idea where it comes from and how to replicate it.
Thanks to james2vegas, zoul and Shoban.
I've finally figured out on my own a not-so-smart but at-least-workable way to solve the problem I described here. I'd like to share it here. I think the approach suggested by #james2vegas is probably much better...but anyway I'm learning along the way.
My approach is this:
Although the verification code is not in the source file but since it is still selectable and copyable, I can let my script copy everything in the login page and then extract the verification code.
To do this, I use the sendkeys functions in the Win32::Guitest module to do "Select All" and "Copy" to the login page.
Then I use Win32:Clipboard to get the clipboard content and then Regexp to extract the code. Something like this:
$verify = Win32::Clipboard::GetText();
$verify =~ s/.* (\d{4}).*/$1/msg;
A few thoughts:
The random number is generated by something like this in Perl
my $random_number = int(rand(8999)) + 1000; #var random_number = rand(1000,10000);
And then it checks if $verify == $random_number. I don't know how to catch the value of one-session-only $random_number. I think it is stored somewhere in the memory. If I can capture the value directly then I wouldn't have gone to so much trouble of using this and that extra module.