Mike, I'll offer what help I can...
If you are fairly new to .Net, you will need to bone up fast and hard on data classes. Everything in AC7 is managed through a (surprisingly well designed) collection of data classes and methods.
If you try creating your own records in AC7 tables and rely solely on SQL referential integrity, you will simply frustrate yourself and SQL Restore will become your best friend. That's not a great start to any learning process.
Start by studying existing AC7 page code files and follow how Able stores information. Walk yourself through the Add/Edit product page code first. Every order starts with a product to be purchased.
From there, walk through the code for checkout. That's how an order gets created. Order creation is final sum of many tables, relationships and data classes. It's not simple but it is learn-able.
My best method was to fire up my VWD debugger and pause a checkout process. Then I could examine data classes, methods and current values without the usual time-sink of trial-and-error.
keats76 wrote:1) What constitutes an order?
That's a pretty general question, no answer is really possible.
keats76 wrote:2) Do I need to create a basket to place the order in? Or can my order exist without a basket (as I don't really need one)?
No. You can create a new order data class and just set it's values. Once you're ready, fire the Save() method on the data class to write the order to the table. The basket class is used as an instance holding place for customer-selected products for purchase. You don't need to create one to create an order so far as I know.
keats76 wrote:3) Can I create an auto generated product that doesn't have a corresponding database entry? Or should I create a base product in the DB that will represent all of my line items, and then update the description and price on the fly?
Everything in AC7 is dependent on finding a product record of some kind, so I'm not sure where you're going with this question. If you don't need to save the product record, don't. Data classes can exist in memory without having to be written to disk. I do it all the time, especially when retrieving products or orders for information using a criteria not designed as a method on the data class.
keats76 wrote:4) Also, on a side note, I noticed that the User Profile is pretty limited. Could I add fields to the profile? Would it be as easy as extending the User object and adding some fields for data persistence, and updating some GUI screens etc?
The user profile could be considered limited, but it does include all the basics for managing an online order history. There are several aspects of AC7 where CRM is lacking - those should improve over time.
There is a "custom field" data class tied to the store data class. However I have not experimented with it yet. The Product data class has an awesome custom field subclass, I use it all the time now.
The User class does not have a custom field class that I can see. Your best option would be to build a new table and tie the records back to ac_Users using the UserId value.
Some General Thoughts
Never modify the existing ac_tables. The data classes depend on the existing field structure. In cases where you need additional fields, build a separate table and link it with the (whatever)Id field.
Many, many times there will be a method already in place to accomplish what you want with AC7 data. Whether it's loading all products for a store, pulling in all orders for a specific customer or auto-creating the manufacturer when the product is saved.
Every table has an associated datasource class i.e. ac_Products has a ProductsDataSource class with many useful methods. Studying those next and learning the pattern Able uses will aid you greatly.