Thursday, December 13, 2012

BIRT: Writing BIRT ODA's

New article on writing ODA's for BIRT has been published on IBM Developerworks. As an added bonus, learn about cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIRT Data Extraction Task. Two kinds of awesome in one place. Check it out.

http://www.ibm.com/developerworks/library/ba-birtextpoints/

Tuesday, September 18, 2012

BIRT: Emitters Tutorial Posted

Finally got around to writing some articles. I have one published for IBM DeveloperWorks about writing for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIRT Emitter Framework. Check it out.

http://www.ibm.com/developerworks/library/ba-birt-emitter/index.html

Sunday, June 17, 2012

BIRT: The Pipeline

So many different things in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 works at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 moment. I have several proposals out for articles to be published relating to BIRT. It seems I can't stray too far from BIRT, which is great because now I have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 freedom to pick and choose what I do with it. I'm also working with a lot of GWT stuff ramping up for a major development effort with my new job. This is great because I am getting a chance to catch up on a lot of newer technologies that have been introduced into GWT over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 past few years that I have fallen behind on, such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 RequestFactory framework. I will also starting writing a little more. I need to keep track of all cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se new findings, and I enjoyed sharing that work with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 community when I was more active in writing. I'll keep things posted here.

Thursday, May 03, 2012

GWT: Getting Maven Generated GWT Project working within Eclipse

Recent events have thrust me back into cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 world of GWT Development. So much has changed. RequestFactories, EventBuses, all sorts of improvements. I haven’t had to dig this deep in a while. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se are great improvements, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y take GWT that extra mile.

The source of my recent aggravations hasn’t been with GWT. It has been with Maven. Maven is a wonderful build tool. There is something really nice about being able to say “Hey, Maven, I want to build this project, and it has cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se dependencies”, and having Maven go out and fetch everything, set up a class path, and build. Awesome. Or at least in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ory. One of my biggest headaches has been building Eclipse Plugins, but that will wait until anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r blog post.

This one is about GWT, Eclipse, and Maven. Now my Eclipse setup is pretty straight forward. I use cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIRT All-In-One 3.7.2 distribution, with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 m2eclipse plugin installed separately (because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIRT distribution has an incomplete m2eclipse plugin installed), cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GWT Designer and Window Builder Plugins, and Googles Eclipse GWT Plugin (well, technically GWT Designer and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GWT Eclipse Plugin are BOTH Googles now….).
“So why so glum, chum?” I ask myself. Well, because things don’t quite work as advertised out of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 box. GWT Designer and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GWT Eclipse Plugin provide AWESOME support for creating new projects and making things just work. Maven, no so much. What doesn’t work? Well, besides cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 thousands of red ‘X’ everywhere in Eclipse, GWT Designer doesn’t work, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Google Eclipse Plugin run doesn’t quite work. At least with GWT 2.4, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 3.7.2 Indigo setup of Eclipse. So, let me outline how I fixed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se annoying issues with a step by step on creating a new GWT project with Maven and making cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 necessary fixes in Eclipse to make things work. I won’t cover getting RequestFactory working, I’ll leave that for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next post.
1.       Create a new Maven. Start by going to New/Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r.

2.       Select Maven/Maven Project.

3.       Leave everything alone on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next page of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 wizard.

4.       On cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next screen, for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 archetype, enter “gwt-maven-plugin”. (Note: m2eclipse does something really stupid in my environment (or maybe all environments in general, I havent investigated it furcá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r) where it will refuse to create more than one project of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same archtype in my workspace. In order to resolve this, I need to go and completely delete my .m2 respository, located at /.m2, and let it re-index). If you haven’t indexed your Maven repository before, it might take a while, so be patient and let it pop up in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 grid.

5.       Fill out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate info for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Maven project, such as Group and Artifact ID.

6.       Click Finish.
OK, cool, now we have a GWT project in Eclipse. In fact, you can run it if you right-mouse click on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 project, Run/Maven Build…, and set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 goal to gwt:run.



But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 project will have a lot of Red ‘X’.
And it won’t run in Eclipse, which means I can’t debug it. But it will run just fine in Maven. But I don’t want it to run in Maven, I want it to run in Eclipse. Why do I want it to run in Eclipse? Because I want to use all of those really nifty debug capabilities. Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise, why bocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r using GWT, I could just use some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r Javascript framework, like Jquery, or Dojo. So, how do I get to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 point where I can run and debug?
First things last. Lets get rid of all of those ugly errors. One of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 biggest causes of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 red ‘X’ is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reliance on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 generated source files that Maven builds for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Internationalization and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Asyncronous interface. So I need to get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se files cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re. The easiest way is to have Maven generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source files for me and copy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m over.
First, I go to Run/Maven – Generate Sources.

This will create cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 source files under /target/generated-sources/gwt//. Since most of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se errors are coming from missing client source, I just need to copy cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365m all over to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 /src/main/java//client folder. 

Now, I need to tell Maven not to generate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se files, ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise I will get an error telling me cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are duplicate classes. Edit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 POM, and remove cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 generateAsync and i18n goals. That section should look like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following when done.

<groupId>org.codehaus.mojogroupId>
        <artifactId>gwt-maven-pluginartifactId>
        <version>2.4.0version>
        <executions>
          <execution>
            <goals>
              <goal>compilegoal>
              <goal>testgoal>
            goals>
          execution>
        executions>

But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are still some Red X. Why? The field verifier class is not being found. To fix this, I just went to Project/Clean. Strange, but that fixed it.

So, I still have a red X on my project, but I will ignore that since this is some Maven specific junk.

So, I want to try to run my project in Eclipse now to see what happens.
Run/Maven Build…, and set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 goal to gwt:eclipse.
This will generate a Launch file. Refresh cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 project and it will appear. But cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is a problem. If I try to launch it, I will get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following error.
This will resolve itself if I go to Run Configuration, and edit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Run configuration for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 new project, and go to any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r tabs. If it doesn't, find cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 DevMode class from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Search Dialog. But anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r problem manifests itself at this point. No modules appear under Available Modules.
You’re killing me… If I try to run this, I just get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 help dialog for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GWT Dev Mode. But this is a simple fix also. All I need to do is Close this dialog. Right-Mouse click on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 project or hit Alt-Enter to bring up cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Projects Property Editor, and go under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Source section. Under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Source section, select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Excluded item under Sample/src/main/resource, and hit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Remove button.
When I go back to edit cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Run Configuration, my SampleModule will be back.
And not only did this step fix cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Launch configuration, it also fixed anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r issue where files could not be opened with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 GWT Designer Window Builder editor.
I visited a lot of sites researching this issue, and that last step was nowhere to be found, and was erroneously reported as being some issue with Eclipse not finding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 gwt.xml unless it was in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first source directory it encounters. This may have been cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 case in previous version of Eclipse, but in Indigo this solved my problem.

So cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re you go. If you followed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se steps, you should have a setup that is as close to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 project that Maven generated and still be able to run in Eclipse so you can use it’s debugging capabilities. This definitly isn’t as nice as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 New Project wizards, but hey, its Mavenized, and it’s a GWT project. Or at least it’s a GWT-RPC based GWT project, and not a RequestFactory one. But that’s anocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r story…

Tuesday, April 10, 2012

BIRT: Dynamically Hiding/Showing Table Columns in a Report Design

This question gets asked quite often in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 BIRT Exchange Forums. How can I dynamically show/hide columns in a table based on user input/some object property.

The first inclination is to try to dynamically build cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 table on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fly. This is an often time consuming and cumbersome way of approaching cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 problem, and will more often than not cause unforeseen errors. The easiest approach is to just have cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 table display normally, and hide cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 column using Visibility Expressions.

So for example, I have a table that displays Customer information. I want to give cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ability to show/hide columns that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y want displayed in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365ir reports.

1. Select cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 table in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 report

2. Select a column

3. In cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Property Editor, select Visibility Expression.

4. Check cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Hide Element option.
5. Enter an expression that will return True when cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 column should be hidden.


In my case, I have a function defined globally that will check for cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existence of a keyed value in a global map. This map gets set in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 reports beforeFactory event. Realistically, you would just test cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 report parameters value, but I am demonstrating this from objects instead of report parameters.

The example report is below. In it, if you check/uncheck a parameter, it will show or hide that field in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 table.



Eclipse BIRT Designer Version 3.7.1.v20110905 Build <3.7.1.v20110905-1820>
in
//Predefined function to help check if a field is set to be hidden in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 map
//
function checkField(fieldToCheck)
{
//make sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 global variable is not null
if (reportContext.getGlobalVariable("hideMap") != null)
{
//get cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate field. If this is set, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n we know this is set and
//we can return true. Ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365rwise return false, meaning we want to show cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 field.
if (reportContext.getGlobalVariable("hideMap").get(fieldToCheck) != null)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}

]]>

reportContext.setGlobalVariable("hideMap", new Packages.java.util.HashMap());

//set cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 appropriate values in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 global HashMap based on if it is set in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 report parameter
if (params["ShowCustomerNumber"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("CUSTOMERNUMBER", Boolean.TRUE);
}

if (params["ShowCustomerName"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("CUSTOMERNAME", Boolean.TRUE);
}

if (params["ShowCONTACTLASTNAME"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("CONTACTLASTNAME", Boolean.TRUE);
}

if (params["ShowCONTACTFIRSTNAME"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("CONTACTFIRSTNAME", Boolean.TRUE);
}

if (params["ShowPHONE"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("PHONE", Boolean.TRUE);
}

if (params["ShowADDRESSLINE1"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("ADDRESSLINE1", Boolean.TRUE);
}

if (params["ShowCITY"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("CITY", Boolean.TRUE);
}

if (params["ShowSTATE"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("STATE", Boolean.TRUE);
}

if (params["ShowPOSTALCODE"].value == false)
{
reportContext.getGlobalVariable("hideMap").put("POSTALCODE", Boolean.TRUE);
}]]>

/templates/blank_report.gif
ltr
96


Uncheck to hide field CustomerNumber
static
boolean
true

True


simple
check-box



Uncheck to hide field CustomerName
static
boolean
true

True


simple
check-box



Uncheck to hide field CONTACTLASTNAME
static
boolean
true

True


simple
check-box



Uncheck to hide field CONTACTFIRSTNAME
static
boolean
true

True


simple
check-box



Uncheck to hide field PHONE
static
boolean
true

True


simple
check-box



Uncheck to hide field ADDRESSLINE1
static
boolean
true

True


simple
check-box



Uncheck to hide field CITY
static
boolean
true

True


simple
check-box



Uncheck to hide field STATE
static
boolean
true

True


simple
check-box



Uncheck to hide field POSTALCODE
static
boolean
true

True


simple
check-box







contentBidiFormatStr
ILYNN


metadataBidiFormatStr
ILYNN


org.eclipse.birt.report.data.oda.sampledb.Driver
jdbc:classicmodels:sampledb
ClassicModels






CUSTOMERNUMBER
measure
CUSTOMERNUMBER
CUSTOMERNUMBER


CUSTOMERNAME
attribute
CUSTOMERNAME
CUSTOMERNAME


CONTACTLASTNAME
attribute
CONTACTLASTNAME
CONTACTLASTNAME


CONTACTFIRSTNAME
attribute
CONTACTFIRSTNAME
CONTACTFIRSTNAME


PHONE
attribute
PHONE
PHONE


ADDRESSLINE1
attribute
ADDRESSLINE1
ADDRESSLINE1


ADDRESSLINE2
attribute
ADDRESSLINE2
ADDRESSLINE2


CITY
attribute
CITY
CITY


STATE
attribute
STATE
STATE


POSTALCODE
attribute
POSTALCODE
POSTALCODE


COUNTRY
attribute
COUNTRY
COUNTRY


SALESREPEMPLOYEENUMBER
measure
SALESREPEMPLOYEENUMBER
SALESREPEMPLOYEENUMBER


CREDITLIMIT
measure
CREDITLIMIT
CREDITLIMIT





1
CUSTOMERNUMBER
integer


2
CUSTOMERNAME
string


3
CONTACTLASTNAME
string


4
CONTACTFIRSTNAME
string


5
PHONE
string


6
ADDRESSLINE1
string


7
ADDRESSLINE2
string


8
CITY
string


9
STATE
string


10
POSTALCODE
string


11
COUNTRY
string


12
SALESREPEMPLOYEENUMBER
integer


13
CREDITLIMIT
float



Data Source


1
CUSTOMERNUMBER
CUSTOMERNUMBER
integer
4


2
CUSTOMERNAME
CUSTOMERNAME
string
12


3
CONTACTLASTNAME
CONTACTLASTNAME
string
12


4
CONTACTFIRSTNAME
CONTACTFIRSTNAME
string
12


5
PHONE
PHONE
string
12


6
ADDRESSLINE1
ADDRESSLINE1
string
12


7
ADDRESSLINE2
ADDRESSLINE2
string
12


8
CITY
CITY
string
12


9
STATE
STATE
string
12


10
POSTALCODE
POSTALCODE
string
12


11
COUNTRY
COUNTRY
string
12


12
SALESREPEMPLOYEENUMBER
SALESREPEMPLOYEENUMBER
integer
4


13
CREDITLIMIT
CREDITLIMIT
float
8


from CLASSICMODELS.CUSTOMERS]]>


2.0






CUSTOMERNUMBER
1

4
10
0
Nullable

CUSTOMERNUMBER



CUSTOMERNUMBER

11






CUSTOMERNAME
2

12
50
0
Nullable

CUSTOMERNAME



CUSTOMERNAME

50






CONTACTLASTNAME
3

12
50
0
Nullable

CONTACTLASTNAME



CONTACTLASTNAME

50






CONTACTFIRSTNAME
4

12
50
0
Nullable

CONTACTFIRSTNAME



CONTACTFIRSTNAME

50






PHONE
5

12
50
0
Nullable

PHONE



PHONE

50






ADDRESSLINE1
6

12
50
0
Nullable

ADDRESSLINE1



ADDRESSLINE1

50






ADDRESSLINE2
7

12
50
0
Nullable

ADDRESSLINE2



ADDRESSLINE2

50






CITY
8

12
50
0
Nullable

CITY



CITY

50






STATE
9

12
50
0
Nullable

STATE



STATE

50






POSTALCODE
10

12
15
0
Nullable

POSTALCODE



POSTALCODE

15






COUNTRY
11

12
50
0
Nullable

COUNTRY



COUNTRY

50






SALESREPEMPLOYEENUMBER
12

4
10
0
Nullable

SALESREPEMPLOYEENUMBER



SALESREPEMPLOYEENUMBER

11






CREDITLIMIT
13

8
15
0
Nullable

CREDITLIMIT



CREDITLIMIT

22







]]>












html
new Date()]]>






setGetCustomers


CUSTOMERNUMBER
CUSTOMERNUMBER
dataSetRow["CUSTOMERNUMBER"]
integer


CUSTOMERNAME
CUSTOMERNAME
dataSetRow["CUSTOMERNAME"]
string


CONTACTLASTNAME
CONTACTLASTNAME
dataSetRow["CONTACTLASTNAME"]
string


CONTACTFIRSTNAME
CONTACTFIRSTNAME
dataSetRow["CONTACTFIRSTNAME"]
string


PHONE
PHONE
dataSetRow["PHONE"]
string


ADDRESSLINE1
ADDRESSLINE1
dataSetRow["ADDRESSLINE1"]
string


ADDRESSLINE2
ADDRESSLINE2
dataSetRow["ADDRESSLINE2"]
string


CITY
CITY
dataSetRow["CITY"]
string


STATE
STATE
dataSetRow["STATE"]
string


POSTALCODE
POSTALCODE
dataSetRow["POSTALCODE"]
string


COUNTRY
COUNTRY
dataSetRow["COUNTRY"]
string


SALESREPEMPLOYEENUMBER
SALESREPEMPLOYEENUMBER
dataSetRow["SALESREPEMPLOYEENUMBER"]
integer


CREDITLIMIT
CREDITLIMIT
dataSetRow["CREDITLIMIT"]
float





all
checkField("CUSTOMERNUMBER");






all
checkField("CUSTOMERNAME")






all
checkField("CONTACTLASTNAME")






all
checkField("CONTACTFIRSTNAME")






all
checkField("PHONE")






all
checkField("ADDRESSLINE1")






all
checkField("CITY")






all
checkField("STATE")






all
checkField("POSTALCODE")






































CUSTOMERNUMBER




CUSTOMERNAME




CONTACTLASTNAME




CONTACTFIRSTNAME




PHONE




ADDRESSLINE1




CITY




STATE




POSTALCODE