- XomegaFrameworkSamples.zip
- MyProject4
- MyProject4.Client.Objects
- MyProject4.Client.Web
- Gen
- MyProject4.Client.WPF
- MyProject4.Entities
- MyProject4.Model
- Framework
- base_types.xom
- operators.xom
- global_config.xom
- Import
- _types.xom
- aw_build_version.xom
- database_log.xom
- error_log.xom
- HumanResources
- department.xom
- employee.xom
- employee_address.xom
- employee_department_history.xom
- employee_pay_history.xom
- job_candidate.xom
- shift.xom
- Person
- address.xom
- address_type.xom
- contact.xom
- contact_type.xom
- country_region.xom
- state_province.xom
- Production
- bill_of_materials.xom
- culture.xom
- document.xom
- illustration.xom
- location.xom
- product.xom
- product_category.xom
- product_cost_history.xom
- product_description.xom
- product_document.xom
- product_inventory.xom
- product_list_price_history.xom
- product_model.xom
- product_model_illustration.xom
- product_model_product_description_culture.xom
- product_photo.xom
- product_product_photo.xom
- product_review.xom
- product_subcategory.xom
- scrap_reason.xom
- transaction_history.xom
- transaction_history_archive.xom
- unit_measure.xom
- work_order.xom
- work_order_routing.xom
- Purchasing
- product_vendor.xom
- purchase_order_detail.xom
- purchase_order_header.xom
- ship_method.xom
- vendor.xom
- vendor_address.xom
- vendor_contact.xom
- Sales
- contact_credit_card.xom
- country_region_currency.xom
- credit_card.xom
- currency.xom
- currency_rate.xom
- customer.xom
- customer_address.xom
- individual.xom
- sales_order_detail.xom
- sales_order_header.xom
- sales_person.xom
- sales_person_quota_history.xom
- sales_reason.xom
- sales_tax_rate.xom
- sales_territory.xom
- sales_territory_history.xom
- shopping_cart_item.xom
- special_offer.xom
- special_offer_product.xom
- store.xom
- store_contact.xom
- MyProject4.Model.xomproj
- MyProject4.Services
- Xomega.Fwk_src_1.3.zip
- Xomega.Framework
- xomega.fwk_src_1.3.zip
|
using System;
using System.Collections.Generic;
using System.ServiceModel;
using MyProject4.Services;
using Xomega.Framework;
using Xomega.Framework.Lookup;
using Xomega.Framework.Properties;
namespace MyProject4.Client.Objects
{
public partial class CustomerProperty : EnumIntProperty
{
/// <summary>
/// A constant used for the cached lookup table name
/// </summary>
public const string EnumTypeCustomer = "customer";
/// <summary>
/// Additional attribute for each value to store the formatted id
/// </summary>
public const string AttributeFormattedCustomerId = "formatted customer id";
public CustomerProperty(DataObject parent, string name)
: base(parent, name)
{
EnumType = EnumTypeCustomer;
// display value as 001234 - Joe Doe
DisplayFormat = String.Format("{0} - {1}",
string.Format(Header.AttrPattern, AttributeFormattedCustomerId),
Header.FieldText);
// add custom validation rule
Validator += ValidateCustomer;
bool canUserViewCustomers = true; // TODO: retrieve View Customer privilege
bool canUserEditCustomers = true; // TODO: retrieve Edit Customer privilege
AccessLevel = canUserEditCustomers ? AccessLevel.Full :
canUserViewCustomers ? AccessLevel.ReadOnly : AccessLevel = AccessLevel.None;
}
// override to fine-tune the value conversion rules
protected override object ConvertValue(object value, ValueFormat format)
{
int id;
if (format == ValueFormat.Internal && Int32.TryParse("" + value, out id))
{
// try parsing the id to remove leading zeros, etc.
return base.ConvertValue(id, format);
}
return base.ConvertValue(value, format);
}
// checks if the value has been resolved to a valid customer in the lookup table
public static void ValidateCustomer(DataProperty dp, object value)
{
Header cust = value as Header;
if (value != null && (cust == null || cust.Type != EnumTypeCustomer))
dp.ValidationErrors.AddError("{0} has an invalid customer {1}.", dp, value);
}
// Returns possible customer values from the lookup cache.
// If the values are not yet in the cache, reads them
// from service layer and stores in the cache.
protected override LookupTable GetLookupTable()
{
LookupTable res = base.GetLookupTable();
if (res == null)
{
List<Header> data = new List<Header>();
foreach (Store_ReadListOutput row in ReadList())
{
Header h = new Header(EnumType, "" + row.CustomerId, row.Name);
// store the formatted id as a separate attribute
h[AttributeFormattedCustomerId] = row.CustomerId.ToString("000000");
data.Add(h);
}
res = new LookupTable(EnumType, data, true);
LookupCache cache = LookupCache.Get(CacheType);
if (cache != null) cache.CacheLookupTable(res);
}
return res;
}
// reads the possible customer values from the service layer
protected virtual IEnumerable<Store_ReadListOutput> ReadList()
{
ChannelFactory<IStoreService> factory = new ChannelFactory<IStoreService>("IStoreService");
IStoreService svc = factory.CreateChannel();
IEnumerable<Store_ReadListOutput> output = svc.ReadList(new Store_ReadListInput());
factory.Close();
return output;
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Xomega Team is striving to increase productivity and development quality by utilizing Model Driven Development coupled with Code Generation and the best design practices for application development.
We provide MDD tools, code generators and frameworks for Visual Studio and .Net development.
Visit us at
http://www.xomega.net