﻿$Id: GENERA_README.txt 237 2014-05-07 08:02:20Z tesoro $:
LLBLGen GENERA v.4.0 (c) 2012-2014 Secretaría Gral. del Tesoro y Política Financiera
LLBLGen ASP.Net GUI Templates Extended (C#), Selfserving & Adapter
Based on:
- ANGTE v.1.0 http://llblgenangte.codeplex.com/ by David Elizondo
- DbEditor. ASP.Net GUI Templates by Solutions Design BV.
License: EUPL v.1.1 https://joinup.ec.europa.eu/software/page/eupl/licence-eupl
Version: v.4.0.1.237
======================================================
First released on: 26-apr-2012

NORTHWIND DEMO SITE
====================
http://northwind.angte-demo.com

KNOWN BETA BUGS (Should be fixed in the final release)
=======================================================
- Llblgen 3.1 specific
  + GUI project generates wrong relations
     
KNOWN ISSUES
=============
- GENERATED PAGES ARE AT THE MOMENT IN SPANISH ONLY (All the code comments & errors are in English though)
- TypedList calculated fields
	+ Cannot be used as search filter
- On TypedViews mapped to a Retrieval Procedures resulset, 
  + Any search filter different from Store Procedure parameters 
    are applied on the web application not the database.
  + There is not role filter applied on results.
- On reports
  + No column hiding by role is available
  + Cannot sort by calculated fields or forf
- On TypedViews' lists, related entities' DescriptiveField is not applied
- On Entities' search, edit & insert forms, fields are not formatted because of validation (requires Validator.Type="Currency", etc.)
	Uncomment SDE_GeneralUtils.ProduceEditControlTagForField code to format

IMPORTANT
=========
These templates are a ASP.Net scaffolding system and should be used as an starting point to generate
ASP.Net UI's. They are a good example of how to use Llblgen template generation functionalities for your own uses.
To customize and extend the code generated, you should first look into extending the templates
or use them as a base for your own templates. The generated UI is fully functional though, and designed
to be scalable even with very large projects, though with very large projects and very large databases,
(i.e. millions of rows in a table) it's key to pay attention to the custom property directives to 
control what the templates generate. ORM Profiler could be really handful here.

The templates are for selfserving and adapter and will generate C# code.

REQUIREMENTS
=============
- LLBLGen Pro v4.x
- ASP.Net v4.0 or above

SUPPORTED FEATURES
===================
ANGTE v.3.5 added features
--------------------------
Mayor changes:
- Multilanguage support
- Roles & UserRoleProfile support based on GuiInfo XML configuration file. 
  The whole application can be filtered by role & user active role's parameters
    + Sitemap filtering. CustomXmlSiteMap to filter page access based on user roles.
    + Data access filtering. Any Entity/TypedView/TypedList can define filters (null, value & CompareSet)
	  based on user role parameters
		(ex. User(Jose).SupplierRole.CategoryId=1 + Product.Role(Supplier).FilterOn(Category.CategoryId)
				 => User "Jose" can only see products on the Beverages category)
    + Hide columns, actions & multiselect custom actions based on user active role.
    + Custom RoleProvider provided.
- Support Forf, enum fields and inheritance
- Support TypedViews mapped to Retrieval Procedures
- Support TypedList calculated fields & DefaultGroupBy
- Support for multiselect custom actions in list & view controls
- Provided entry point methods for integration with custom business logic
    + Before & after all standard actions: OnInsertRequest, OnInserted, OnUpdateRequest, OnUpdated, OnDeleteRequest
	  OnDeleted, OnSearchRequest, OnViewRequest
    + Before & after any multiselect custom action defined. They are executed inside a single transaction
- Entity Search on related fields

Minor changes:
- Generated a full Web application project
- Breadcrumb support. Store filters in session to navigate back to ancestors' pages
- Save page support. The actual filtered page parameters can be saved to session by the user for later access.
  If a roles system is defined it is saved to database for that particular user.
- Can define RelatedField custom property for TypedView fields to navigate to a "related" entity.
- Plenty of minor look & feel improvements. 
	+ WAI AA compliant
	+ CSS
	+ Decorator main page
	+ DropDownLists' values shown in alphabetical order
- List controls have a proper pager.
- Added a Calendar control
- GUI File validation through XSD schema
- Custom Properties validation

ANGTE v.1.0 inherited features
-----------------------------
- TypedList/TypedView list & search controls (added to those of the original DbEditor)
- SSRS 2005 Reports (full & filtered) for Entity/TypedView/TypedList
- Relation aware's views. All forms (view, insert, edit, list, report) 
  generates the appropriate Links, and DropDownLists for the Foreign Keys (FK) 
  you configure in Custom Properties.
- Allow exporting Grid list to a Excel file.
- Labels support for Entity/TypedView/TypedList and its fields
- ASP.Net validation. You can specify validation rules that generates 
  ASP validation controls (CompareValidator, RangeValidator, RequiredValidator, RegexValidator)
  used in Insert & Edit forms.
- Custom format for fields. If it's not the default,
  specify in a Custom Property how the field values should be formatted.
  
DbEditor inherited features
---------------------------
- Entity insert/edit/delete/view.
- Viewing of related entities
- Fields mapped onto related fields
- Image/blob fields (insert / edit only)
- Filtering and searching. 
- Sorting (client side sorting when fields mapped onto related fields are used)
- Pre-selecting of FK values when adding new entities.
- Automatic paging
- much more.

Installation
=============
- Unpack the archive in the LLBLGen Pro installation folder, it already has the correct folders setup in the archive. 
  You can also unpack it into a different folder and specify the 'Tasks' folder in the archive as the additional tasks folder and
  the 'Templates' folder in the archive as the additional templates folder in the preferences or project properties. 

- Open the template SDE_GeneralUtilsGuiFiles or change the file generalUtilsGuiFiles.lpt in directory
  <Llblgen Root>\ESDBEditor_templates\Frameworks\LLBLGen Pro\Templates\ESDbEditor\Net2.x\C#
  Change the reference to System.Xml.Linq.dll and System.XML.dll to your proper .Net FW (3.5 or 4.x) folder

- Require access to the SSRS 2008 Report Viewer dlls (version 10.0.x). Templates for SSRS 2005 exist
	Microsoft.ReportViewer.Common.dll
	Microsoft.ReportViewer.ProcessingObjectModel.dll
	Microsoft.ReportViewer.WebForms.dll
  They can be found in VS2008 or installing Microsoft Report Viewer Redistributable 2010 SP1 (Full Installation)
  http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=6219 

Usage
======
(With 'DAL' the normally produced generated code is meant, i.e. the 'Data Access Layer' LLBLGen Pro generates for you
with the normal adapter presets or selfservicing presets)
These templates come with their own presets, SD.Presets.Adapter.ESWebDbEditor and SD.Presets.SelfServicing.ESWebDbEditor, 
and works with the DAL code generated by the presets SD.Presets.Adapter.General2008/2010 or
SD.Presets.SelfServicing.*.
The WebDbEditor preset will generate a GUI folder with code and a GUI.csproj project file for you, which references the generated DAL code. 

The preset won't generate a .sln file for you, you have to do that yourself within VS.NET. Keep the same rootnamespace for 
the GUI generation action than you used for the DAL generation action. You can combine the two presets to one single preset
to generate DAL code and GUI code in 1 generation action. To do that, use the Merge preset button in tab 3 on the 
generator configuration dialog. See the LLBLGen Pro manual for more details about merging presets. 

There's no middle 'BL' tier in the generated web db editor, all data-access logic is in the code behind classes. 

After generating the GUI project, extract in the GUI folder the associated App_Themes.zip file. It will create a default theme.
Modify it as desired keeping the CSS classes and file names.

Once created the VS Solution, you can add to the DAL project the <root>\ExtendedClasses folder.
It is only required if you use Roles' filters or TypedList calculated fields or defaultGroupBy.

The web.config file will contain the connection string as known in the LLBLGen Pro project. Once generated, 
the web.config file won't be overwritten, so you can alter it to something else and re-generate the code if you want to. 

If you need name overwriting for schema/catalog, you should uncomment the sections in the web.config preserved for that
and add the necessary elements as described in the LLBLGen Pro manual.

The user login (PersonalData.Nif field) is hardcoded to "45000000M" (appCodeCustomProfileCode.lpt, line 184), 
                _data.Nif = "45000000M";
                // _data.Nif = extractUserNifFromCertificate();
In production you can set it to your prefered authentication method: Login form, client digital certificate, etc.

Insert the required Security registries in the database
The example for the northwind database can be found in Northwind_security.sql
Manager
Employee <Davolio>
Customer <Hungry Coyote Import Store>
Supplier <Exotic Liquids>
Shipper <United Package>

============================
CUSTOM PROPERTIES DIRECTIVES
============================
You can control what the templates generate by adding custom properties to the entities, entity fields etc.
The function of these custom properties is described below. Custom properties are case sensitive, so specify
the custom property keys with the same casing. To bulk-set custom properties, for example with data from a file, 
consider the sourcecode of the custom property plug-in and modify it to your own liking so you can bulk-set
custom properties in one go.

GuiInfo file definition
-----------------------
Applied to: Project, add custom property to project
Key: GuiInfoFileName
Value: Optional file with information to generate the ASP.Net code. 
       By default looks for [LLblgenProjectName].llblgengui on the project directory.
Note: See GuiInfo file description at the end of this file

Maximum length of columns in grids
----------------------------------
Applied to: Project, add custom property to project
Key: ListFieldMaximumLength
Value: Maximum length for an element's field of type string to be shown on the list grid.

Require UniqueConstraints for entities' DescriptiveField
------------------------------------------------------
Applied to: Project, add custom property to project
Key: DescriptiveFieldMustHaveUniqueConstraint
Value: If true, where Entity has a DescriptiveField setting defined, must also have a Unique Constraint for that field.

Allow access to Menu Item if it has no roles defined
------------------------------------------------------
Applied to: Project, add custom property to project
Key: AllowMenuItemIfHasNoRoles
Value: Used by CustomSiteMapProvider when security trimming is enabled. 
       If false (default), denies access to a menu node if no roles are specified for that node, allow it if true.

Entity string representation fields:
-------------------------------------
Applied to: Entity, add custom property to entity
Key: DescriptiveField
Value: the exact field / property name of the field / property which returns at runtime the descriptive value for the 
	   entity. This value is used in combo-boxes to fill FK fields (e.g. CompanyName is a good candidate for the Customer
	   entity). If an entity doesn't have a descriptive field, or you want to combine a couple of fields (e.g. first name
	   and lastname), you have to add a partial class to the particular entity, add the property there, and specify the
	   property name as DescriptiveField in the entity's custom properties in the LLBLGen Pro designer. This is a restriction
	   of .NET databinding which can bind to a single field only. 
Note: If there's no DescriptiveField specified on an entity, the first PK field found is used.

Element label
------------------------------------------------------
Applied to: Entity/TypedList/TypedView, add custom property to Entity/TypedList/TypedView
Key: EntityLabel
Value: String to show in the ASP.Net GUI forms and grids instead of the name of the element.

Show validation summary in entity edit/insert forms
---------------------------------------------------
Applied to: Entity, add custom property to entity
Key: ShowValidationSummary
Value: Show the validation summary in the ASP.Net GUI forms. 
Note: Only has effects if any ValidationRule has been set in the GuiInfoFileName.

TypedList default groupBy
------------------------------------------------------
Applied to: TypedList, add custom property to typedList
Key: GetDefaultGroupBy
Value: This setting controls whether the code generator will group results by all the unaggregated fields.
  
Show M:N related entities as multiple select
------------------------------------------------------
Applied to: Entity, add custom property to entity
Key: ShowTheseMnRelatedEntitiesAsMultipleSelect
Value: Comma separated list of M_N related entities. 
       In the edit and insert forms of the current entity,
       the indicated entities can be directly selected through a ListBox.

Field label texts:
-------------------
Applied to: Entity/TypedList/TypedView field, add custom property to Entity/TypedList/TypedView field. 
Key: LabelText
Value: the text the label in front of the field data holding control / column has to have. 

Field custom format:
-------------------
Applied to: Entity/TypedList/TypedView field, add custom property to Entity/TypedList/TypedView field. 
Key: CustomFormat
Value: Format string to show in the ASP.Net GUI forms and grids instead of the default one for its Type.

Lookup combo-boxes for FK fields:
----------------------------------
Applied to: Entity field, add custom property to entity field. Single field FK's only, only m:1 and 1:1 relations supported.
Key: UseLookupDropDownList
Value: not used (can be left empty)
Note: This is only supported on single-field FK's. The combo-box will be created with a custom <Entity>Dropdown control,
	  derived from DropDownList and including a datasourcecontrol.
	  The items can be disabled based on Role, both for entity creation (insert) and updates (edit)
	  using the StateField tag in the .llblgengui file.
      The related entity's DescriptiveField is used as datatextfield. Only add this custom property to fk fields which point to 
      a set of entities which isn't too big, otherwise you run the risk of pulling thousands of entities into memory to fill the
      dropdownlist. 

Exclude field from grid listings:
---------------------------------
Applied to: Entity/TypedList/TypedView field, add custom property to Entity/TypedList/TypedView field. 
Key: ExcludeFromListGrid
Value: Do not show this field in the listing grids.

Define a related entity field for a TypedView field:
----------------------------------------------------
Applied to: TypedView field, add custom property to TypedView field. 
Key: RelatedField
Value: PK field of a Related entity to show a link to. 
Format: EntityName.FieldName
Example: Category.CategoryId

=====================
GuiInfo FILE CONTENTS
=====================
It is an optional XML file validated with the schema located in <Llblgen root>\Xsd\Llblgengui.xsd
It contains all the elements with multiple cardinality that cannot be set through Custom Properties:
For each Entity/TypedList/TypedView:
- Role based security filters. Check SECURITY SCHEMA section on this file.
- Custom actions (multiselect on grid)
TypedList especific:
- Calculated fields
Entity especific:
- Searchfields on related entities
- Field validation rules

For more information see the provided example: <Llblgen root>\Northwind.llblgengui file

CustomActions
-------------
Applied to: Entity/TypedList/TypedView
Use: They define empty multiselect actions for grid and view form.
     The proper action business logic must be manually coded in the GUI\ExtendedControls\Extended_<elementName>_Controls.cs file.
     In that file, fill the included User Code Area inside the method 
     bool <CustomActionName><elementName>(<elementName><elementType> selected<elementType>)
Example: The following code in the GuiInfo file
      <EntityDefinition Name="Product" >
      	<CustomActions>
        	<CustomAction Name="Eliminar"/>        	
      	</CustomActions>
      </EntityDefinition>
generates in GUI\ExtendedControls\Extended_Product_Controls.cs the following empty method:
public static bool EliminarProduct(ProductEntity selectedEntity);

TypedList Calculated fields
---------------------------
Applied to: TypedList
Use: Generates al the DAL logic for a calculated field. It has the following attributes:
	 - Name: The name of the generated field
	 - Type: The .Net type
	 - Expression: The expression to calculate the field according to the rest of fields
	 - Aggregate (optional): If any aggregate must be applied. Use with GetDefaultGroupBy custom property
Example: 
      <EntityDefinition Name="TotalSalesByProduct" >
     		<CalculatedFields>
     			<CalculatedField Name="Total" Type="System.Decimal" 
     				Value="OrderDetailFields.Quantity * OrderDetailFields.UnitPrice * (1 - OrderDetailFields.Discount)"
     				Aggregate = "Sum" />
     		</CalculatedFields>
      </EntityDefinition>

Entity search fields on related entities
----------------------------------------
Applied to: Entity
Use: Allow the inclusion in the search control of filters on related entities' fields
Example: To allow to search the OrderDetails based on the country of the customers.
      <EntityDefinition Name="OrderDetail">
      	<SearchRelatedFields>
        	<SearchRelatedField Name="Customer.Country" Relation="OrderDetail.Orders > Order.Customer"/>
      	</SearchRelatedFields>
      </EntityDefinition>

Entity field validation rules
-----------------------------
Applied to: Entity field
Use: Allow the use of ASP.Net validation controls for insert/edit forms.
     An ErrorMessage attribute can be defined.
Type: - RangeValidator. Has MinValue & MaxValue attributes.
	  - CompareValidator. Has an Operator attribute and either a FieldToCompare or a Value attribute
	  - RegularExpressionValidator. Has a Expression attribute.
Example:
      <EntityDefinition Name="Order">
      	<Fields>
          <Field Name="Freight">
              <!-- Flete debe ser un valor positivo -->
              <ValidationRule Type="RangeValidator" MinValue="0" MaxValue="16000" ErrorMessage="Flete no debe ser negativo."/>
          </Field>         
          <Field Name="RequiredDate">
              <!-- Fecha requerida debe ser mayor que la fecha de Orden -->
              <!-- En el CompareValidator se puede especificar un nombre de campo a comparar -->
              <ValidationRule Type="CompareValidator" Operator="GreaterThan"
                              FieldToCompare="OrderDate"
                              ErrorMessage="Fecha requerida debe ser mayor o igual a la fecha de la orden."/>
              <!-- 
              		<ValidationRule Type="CompareValidator" Operator="GreaterThan" 
              			Value="&lt;%# DateTime.Today.ToShortDateString() %&gt;" 
              			ErrorMessage="Fecha requerida debe ser mayor o igual a la fecha de hoy." />
              -->
          </Field>
          <Field Name="ShipCountry" >
              <!-- Pais de entrega no debe contener numeros y no debe extenderse mas alla de 50 caracteres -->
              <ValidationRule Type="RegularExpressionValidator" Expression="^[A-Za-z']{1,50}$" ErrorMessage="Pais de Entrega solo puede contener letras."/>
          </Field>
      	</Fields>
      </EntityDefinition>

Entity field values controled by role
--------------------------------------
Applied to: Entity primary key field showed in related objects as a DropDownList control
Use: Allow the restriction of the allowed values by security role. Both for new objects (initial states allowed) and
	 object edition (allowed value transitions). Creates a new GUI\DropdownControls\<EntityName>Dropdown.cs file with the control.
Example: For Category, set the CategoryId field (the PK) as a State field, with the following configuration
	- Initial (new) allowed values: 2 for any role, 1 (and 2) for Administrator and Customer
	- Transitions allowed for Administrator role: 1 -> 1,3,4,5; 2 -> 1,2,5;   Any other role: 1->1; 2->1 
	
<EntityDefinition Name="Category" >
      	<StateField Name="CategoryId">
      		<State Value="1" InitialForRoles="Administrator,Customer">
      			<AllowedTransitions RoleName="Administrator">
      				3,4,5
      			</AllowedTransitions>
      		</State>
      		<State Value="2" InitialForRoles="all">
      			<AllowedTransitions RoleName="Administrator">
      				1,5
      			</AllowedTransitions>
      			<AllowedTransitions>
      				1
      			</AllowedTransitions>
      		</State>
		</StateField>
</EntityDefinition>		

===============
SECURITY SCHEMA
===============
In order to use the integrated role system you must import into your Llblgen project a group of security entities:
- Roles. The list of accepted roles.
- PersonalData. People personal data definition
- BaseProfile. The entity all the user profiles derive from. It maps roles with people through the PersonalData.Nif field
(aka login). A UserId has one and only one associated role. A person (PersonalData) can have several associated roles.
- Derived profiles. Entities to store the ProfileFields to filter user data access with.
- SavedLinks. Personal links associated to a particular UserId. Can be stored by the user.
	For each link, stores:
	+ Url
	+ Title (defined by the user)
	+ Level (breadcrumb level of that url)
	+ Bucket (RelationPredicateBucket or internal class for TypedViews associated to a retrieval procedure resultset)
	+ IsStandardBucket (Is a RelationPredicateBucket?)
Each user can have one or many Profiles, each one associated to a role. If a user has several roles, she must select
on the web, which one she will access with for the actual web session.
Each user profile can have one or many ProfileFields defined. 
ProfileFields are not mandatory, but can be used to define through the GuiInfo file fine grain entity filters
(and restrict user data access)

After creating the database security schema, you must insert the required Security registries in the database
The example for the northwind database can be found in Northwind_security.sql

If you want to define additional EntityFilters based on Role Profiles, you can do so in the optional GuiInfo file
Example:
--------
An example for Northwind with five roles an a single user with Nif 45000000M is provided in Security.llblgenproj and Northwind_Security.sql
Manager  (Has full access, UserId = 1)
Employee <Davolio, Employee.EmployeeId = 1>
Customer <Hungry Coyote Import Store, Customer.CustomerId = 'HUNGC'>
Supplier <Exotic Liquids, Supplier.SupplierId = 1>
Shipper <United Package, Shipper.ShipperId = 2>

- CustomerProfile. Has a single ProfileField to filter user data access with:
	+ CustomerId
- EmployeeProfile. Has two ProfileFields
	+ EmployeeId
	+ Country
- ManagerProfile. Has no ProfileFields
- ShipperProfile. Has a single ProfileField
	+ ShipperId
- SupplierProfile. Has a single ProfileField
	+ SupplierId

The companion <Llblgen root>\Northwind.llblgengui file has several example EntityFilters defined:
- To force a employee to see only the customers in her country. Hide the ContactTitle of the customers, too.
			<EntityFilter Entity="Customer">
				<Role Name="Employee">
					<RoleFieldMap EntityField="Country" ProfileField="Country" />
					<RoleHide>
						<HideField Name="ContactTitle" />
					</RoleHide>
				</Role>
			</EntityFilter>
- To force a supplier to see only the orders with any of her products. 
  (Must navegate from Order to OrderDetail to Product)
			<EntityFilter Entity="Order">
				<Role Name="Supplier">
					<RoleFieldMap EntityField="Product.SupplierId" ProfileField="SupplierId"
					Relation="Order.OrderDetails > OrderDetail.Product" />
				</Role>
			</EntityFilter>
- To avoid a shipper can see any OrderDetail. 
  Hide buttoms & associated actions "Add" (standard) and "Eliminar" (custom one) too.
	(Look for OrderDetails with OrderId = null)
			<EntityFilter Entity="OrderDetail">
				<Role Name="Shipper">
					<RoleFieldMap EntityField="OrderId" ProfileField="NULL"/>
				</Role>
				<RoleHide>
					<HideAction Name="Add" />
					<HideCustomAction Name="Eliminar" />
				</RoleHide>
			</EntityFilter>

PENDING ROADMAP
===============
- ViewState reduction
- CalculatedFields para Entity (Busca: "System.String CategoryName" en EntityClasses\CategoryEntity.cs)
- Search forf
- Campos Enum en relatedEntities (ver DMS.EditFile.ascx.cs)
- Adapter:
	TypedView Lists (sólo TVF & SP)
	OnLoadRequest / OnLoaded 

- Modularity (StructureMap)
	- Authentication Method
	- Logging
	- SanitizeValidator
	- Reports (pages)
- Mobile (jQuery)
- REST

CHANGELOG
==========
07-05-2014:
- NEW FUNCTIONALITY:
	- Added CustomSetting in Relation: DefaultShowingInViewRelatedControl
	- Added CustomSetting in Object(Entity, TL, TV): GenerateGuiControls
29-04-2014:
- Security Namespace moved to Genera.Manager
- BUGFIXES
  + Report.Sorting == null
  + App_Themes links
23-04-2014:
- Security BUGFIX. Dropdowns include ProfileFilter
- Dropdowns are cached
- OrmExtensions: RelationPredicateBucket.Merge
16-04-2014:
- Check Entity has PK defined
- New Setting.Field AlwaysIncludeInListGrid
15-04-2014:
- OnLoadRequest tunning
- RoleProvider made optional
10-apr-2014:
- Fine without security
07-apr-2014:
- Moved CustomRoleProvider to 
04-apr-2014:
- WebSecurity Interfaces IGeneraProfile, etc.
25-mar-2014:
- Security Entities are separated (independent DLL).
23-mar-2014: 
- Added ControlState when required
- TVF & SP mapped TV profileFilters supported
21-mar-2014:
Bugfixes:
- PageCrumb revised for new windows (OK)
- GridView sorting works again (with ViewState = false)
	ViewState -> required SetContainingEntity
Added:
- OnLoadRequest / OnLoaded for Edit/List Controls
14-jan-2014: Multilanguage support
02-jan-2014: ViewRelated controls are hidden by default.
02-oct-2013:
Added:
- DataSet
- GridViewExportUtils.Export(DataTable)
Bugfixes:
- Profile.TypedList entityName
- Calendario. ControlState (cuando se daba al pager, se perdía el valor)
- GridDataBind se llama tras set Visible (y si Visible=false, no se cargan los datos)
- GridDataBind fuerza PageIndex = 0
- BreadCrumb. Fallaba abrid Default en new Win
20-jun-2013: Bugfix. NewWindow. 
13-jun-2013: Bugfix. SP_TypedViews optional parameters
04-jun-2013: Bugfix. Sort (also forf and descriptive fields) & pager
20-may-2013: Solved TODOs. Revisado Adapter
17-may-2013: More reshaper and new related entity bug (from view stateEntity). ViewRelated.CheckAll
09-may-2013: Tabs conversion and ReShaper
08-may-2013: EntityDropdown classes with StateField support. Finished
22-apr-2013: ObjectDataSource usage for SP & TVF TypedViews. GridView.EnableViewState = false
13-apr-2013: Now Bucket object supports both RelationPredicateBucket and SpBucket
10-apr-2013: No errors if no Entities
14-feb-2013: Reports migrated to SSRS 2008 (VS 2010)
17-ene-2013:
- SecureSession The name of the Session Cookie is changed to show the Application Name (avoid collisions with apps on the same server with IE8)
12-dic-2012:
- CustomAction.InlineImageFilePath
04-dic-2012:
- List & Edit controls are derived objects
20-nov-2012:
- All pages are derived objects
- BUGFIX: Forf EndVertex
19-nov-2012:
- HtmlEncode / UrlEncode
- QueryString PK fields validation
- GridView.Label -> Literal
16-nov-2012:
- Search.CreateFilter is static now
- QueryString.Count takes windowNameQS into account
14-nov-2012:
- Cambios en las transacciones
- SDE_GeneralUtils.GetListOfFieldsToHideForPreviousSearch
9-nov-2012:
BUGFIXES:
- Sin SecurityEntities. Varias desactualizaciones
- Edit.MnListBox
  -> Suponía que MnFkField.Name == RemotePkField.Name
  -> Verifica RemotePkFields.Count == 1 
8-nov-2012:
- Menu.cs
- CustomIdentity
- Logout lnkBack
- BUGFIXES
	ListSubset.Filter -> Open New window -> Save Page -> Save new window, no listsubset.filter
	ListSubset.Filter -> Menu.CreateChildControls not called on postback: Main.Page_Load: menu1.PersonalLinksList
	SavedLink edit -> Force SavePage.InitializeSavedList (Context.Session[SAVED_SESSION_VAR]=null)
	NewWindow + IsNewSession generaba dos WindowName
5-nov-2012:
- MULTIPLE WINDOWS
- Logout page
BUGFIX: - GridViewExportUtils: remove literals
22-oct-2012:
- LIST: ImageButton -> HiperLink
- securitySecureSession.lpt
- Project settings: AdministratorRoleName y SecurityGroupName
18-oct-2012:
- Automatic generation of filters for Security entities (not required in .llblgengui)
- Savelinks by Rol
17-oct-2012:
- SanitizeValidator
- CAMBIO EN CONTROLES (Pasan a WebControls) Y DIRECTORIOS
16-oct-2012:
- Integration with Log4Net
- IMyProfile renamed to ICustomProfile
15-oct-2012:
- asp:Textbox text pasa a Columns
10-oct-2012:
- Logout button
BUGFIXES:
- List.Delete goes before OnDeleteRequest
- SelectRole & Master now redirect to requested page once Role is selected
04-oct-2012:
BUGFIXES:
- Reshaper: 
	SpTypedViewUtislCode.CreatePredicate	return directly
	Calendario and GridViewExportUtils
- Edit & List: catch ORMQueryExecutionException and show labeled error
24-sep-2012:
BUGFIXES:
- Eliminados ref de (ref UnitOfWork ... y SetDataSourceBucket(ref ds)
- CustomProfile.[]_filter ya no muestra variables no usadas
14-sep-2012:
BUGFIX:
- ViewRelated had no filter
24-aug-2012: 
BUGFIX:
- List Report relations from ancestors.
- Tabify
NEW FUNCTIONALITY: Added Export Table
22-aug-2012:
NEW FUNCTIONALITY:
- Support relations in forfs (links, descriptive field, etc.)
- Support enum type in fields
- Support inheritance (inherited fields, relations and associated features: links, descriptive fields, etc.)
7-jul-2012:
BUGFIXES:
- Edit, List & Search gives errors when multiple FK against the same entity type
- pkFields are not retrieved if marked ExcludeFromListGrid
- Javascript.Confirm delete shows DescriptiveField if available
BACKWARDS COMPATIBILITY BREAK: Field BaseProfile.Nif is renamed to BaseProfile.Identificator
15-jun-2012:
BUGFIXES: Master.css negative values are not loaded by IE
07-may-2012:
BUGFIXES:
- Field format in viewForm & List
- SpMappedTypedView passed the parameters in alphabetical order
04-may-2012:
ADDED:	Show M:N Related Entities as ListBox:
				- Included ShowTheseMnRelatedEntitiesAsMultipleSelect entity setting
				- Modified editControlAscx.lpt & editControlCode.lpt
BUGFIX: Fixed some errors on ExcludeIncludeFieldsList for Entity's List & ListReport:
				- Generated names where wrong when the Navigator name was not that of the related entity
27-apr-2012:
BUGFIX: Fixed some errors on SpMappedTypedViews:
				- Filtered results called fill twice
				- Allow no Parameter default value (defined in Custom Property) if parameter is optional
				- SpMappedTypedViews parameters order
BUGFIX: Include AllowMenuItemIfHasNoRoles project Custom property to be used by CustomSiteMap
26-apr-2012:
ADDED: First release