Friday, 11 December 2009
WCSF po naše.....
CodeSnippetsAndTemplates\Microsoft Web Client Software Factory February 2008.zip
Sem objavil en zip, ki vsebuje popravke/posodobitve WCSFja. Vse kar je potrebno narediti je da si ta zip razpakirate v program files mapo, kjer je nameščen WCSF. Vse ostalo uporabljate kot sedaj.
Znani problemi....
Ponekod je potrebno dodati reference do microsoft....... in mogoče kje do PBRT4WCSF, ki pa se nahaja na TFS-ju v PBRT4Web\PBRT4Web\Infrastructure\PBRT4WCSF
Če pa še kdo najde kaj naj sporoči da preverimo.
Wednesday, 9 December 2009
ManyToOne - Hack; ( ko imamo več kot en "ključ" )
UPDATE : pri atributu KEY je potrebno dodati : Update = false
CODE :

1.) Uporabimo SET in nastavimo WHERE ; to je naš fiksni pogoj za join.
2.) Definiramo "primarni" ključ, kjer moramo eksplicitno navesti "pk" tabele za join (Column) in ime propertija, ki ga bomo uporabili za filter (PropertyRef).
3.) Definiramo OneToMany relacijo ( jup ... prav si prebral "One To MANY" in ne "Many To One" kot bi si mogoče želel :) )
4.) Public property in v get; s pomočjo Linq poizvedbe dobimo željen element.
Zadeva je "dirty-hack" ampak naredi to kar potrebujemo.
Thursday, 3 December 2009
Splošna polja BO
- ActiveRecord; uporablja za beleženje aktivnosti posameznega zapisa [ mehko brisanje ]
- Notes ; uporablja kot vnos opisa [ npr. v šifrantih je vedno polje OPIS ].
Oba propertija sta public tako, da večjih težav z implementacijo nebi smelo biti.
Monday, 22 June 2009
An item with the same key has already been added.
Thursday, 21 May 2009
CSLADataSource vs. ObjectDataSource
S tem načinom ni mogoče uporabiti Presenterja in nanjga vezano logiko zato je bolj sprejemljiva uporaba
CSLAdataSource, kjer preko metod SelectObject, UpdateObject in InsertObject bolje lahko nadzorujemo uporabo objektov in manipulacijo podatkov, caching, ViewState, ... Slaba stran je ta, da je potrebno uporabljati CSLA.DataMaper, ki pare Name-Value preslika v propertyje objekta in je potrebno paziti na pravilnost vnešenih podatkov.
primer:
IOView.aspx.cs
protected void CslaDataSourceInput_UpdateObject(object sender, Csla.Web.UpdateObjectArgs e)
{
_presenter.OnSave(e);
}
protected void CslaDataSourceInput_InsertObject(object sender, Csla.Web.InsertObjectArgs e)
{
_presenter.OnSave(e);
}
IOViewPresenter.cs
public void OnSave(Csla.Web.UpdateObjectArgs e)
{
Csla.Data.DataMapper.Map(e.Values, _wInput.Value);
_wInput.Value.Save();
_wInput.Value = WInput.NewEntity();
}
Wednesday, 20 May 2009
Povezava knjižnic iz različnih projektov
Če ni primera v .config datoteki, potem mi javi ti ga bom posredoval. Ko bo dokončano b vključen tusi xsd za intelisens.
Tuesday, 12 May 2009
Windows [Templates ]- Complex Add form -
Na TFS sem naložil nove predloge za kompleksni vnos [ parent - child ].Celoten sistem je zelo spremenjen ... saj predhodni sistem ni deloval 100% [ težave pri kreiranju več "workspace" objektov -- npr. želel si imeti odprti 2 formi za urejanje kontaktov ]
Nov sistem je nastavljen tako, da ob kreiranju vsake ChildForme nastavimo njen Parent --- tako dobimo dostop do njenih objektov izpostavljenih v vmesniku.
1. ) Parent forma implementira vmesnik IComplexForm
2. ) Child forma implementira vmesnik IComplexChildForm
Formi PartnerMaEdit in ContactMaEdit sta že bili spremenjeni --- za referenco !.
Lp,
Thursday, 23 April 2009
Lokalizacija DevExpress ASPxPerience (web komponent)
(1) Langugage resource datoteke (.resx) je potrebno skopirati iz direktorija, kjer imamo instalirane DevExpress komponente. Privzeto so instalirane v direktoriju
'C:\Program Files\Developer Express .NET vX.Y\Sources\DevExpress.Web.ASPxGlobalResources\'
v direktorij:
'~/App_GlobalResources/'
kjer se nahaja naša spletna aplikacija.
Posamezne kontrole imajo svoj pripadujoč resource file.
(2) Prevedemo polja v resx datotekah komponent, ki jih želimo lokalizirat in spremenimo ime datoteke v 'DevExpress_Web_vX_Y.sl.resx', kjer je .sl "cultrue code" glede na standard, ki se nahaja na naslovu:
http://download1.parallels.com/Sitebuilder/Windows/docs/4.5/en_US/sitebuilder-4.5-win-l10n-guide/index.htm?fileName=38330.htm
primer: DevExpress_Web_ASPxGridView_v9_1.sl.resx
Skopiramo prevedene in preimenovane datoteke v '~/App_GlobalResources/' direktorij naše spletne aplikacije, poleg datotek, ki smo jih skopirali v prvem koraku.
(3) V web.config vstavimo pod <system.web> </system.web> node naslednjo vrstico
<globalization culture="sl-SI" uiculture="sl">
Pri nekaterih vrednostih za cultrue je treba upoštevat tole:
http://support.microsoft.com/kb/939949
Tuesday, 21 April 2009
NHibernate - ANY
Sometimes, well known associations just don’t cut it. We sometimes need to be able to go not to a single table, but to a collection of table. For example, let us say that an order can be paid using a credit card or a wire transfer. The data about those are stored in different tables, and even in the object model, there is no inheritance association them.
< any name="Payment" id-type="System.Int64" meta-type="System.String" cascade="all">
< meta-value value="CreditCard" class="CreditCardPayment"/>
< meta-value value="Wire" class="WirePayment"/>
< column name="PaymentType"/>
< column name="PaymentId"/>
< /any>
Monday, 20 April 2009
NHibernate - Join
< joinOn the face of it, it looks like a nice way to merge tables together, but that isn’t actually the primary reason for this feature. You can use it for that, for sure, but that is mostly useful in legacy databases. In most cases, your object model should be more granular than the database model, not the other way around.
The really interesting part about this feature is that it allows us to mix & match inheritance strategies. It let us create a table per hierarchy that store all the extra fields on another table, for example. That significantly reduce the disadvantage of using a table per hierarchy or table per subclass, since we can tell very easily what is the type of the class that we are using, and act appropriately.
table="tablename" (1)
schema="owner" (2)
catalog="catalog" (3)
fetch="join|select" (4)
inverse="true|false" (5)
optional="true|false"> (6)
< key ... />
< property ... />
< /join>
Tuesday, 14 April 2009
XML Komentraji in priprava projekta za dokumentiranje
>> Članek
Osnovni in OBVEZNI elementi so
- summary
remarks
V primeru daljšega opisa je priporočena uporaba tag-a
NHibernate - Set
<set
name="propertyName" (1)
table="table_name" (2)
schema="schema_name" (3)
lazy="true|false" (4)
inverse="true|false" (5)
cascade="all|none|save-update|delete|all-delete-orphan" (6)
sort="unsorted|natural|comparatorClass" (7)
order-by="column_name asc|desc" (8)
where="arbitrary sql where condition" (9)
fetch="select|join|subselect" (10)
batch-size="N" (11)
access="field|property|ClassName" (12)
optimistic-lock="true|false" (13)
outer-join="auto|true|false" (14)
/>
<key .... />
<one-to-many .... />
>
Friday, 10 April 2009
NHibernate - Many-To-One
Podroben članek
Definicija
<many-to-one
name="PropertyName" (1)
column="column_name" (2)
class="ClassName" (3)
cascade="all|none|save-update|delete" (4)
fetch="join|select" (5)
update="true|false" (6)
insert="true|false" (7)
property-ref="PropertyNameFromAssociatedClass" (8)
access="field|property|nosetter|ClassName" (9)
unique="true|false" (10)
optimistic-lock="true|false" (11)
not-found="ignore|exception" (12)
/>
Wednesday, 11 March 2009
Povezava Tabele na samo sebe.
Thursday, 19 February 2009
Group By in dodatne SQL funkcije
Monday, 16 February 2009
Brisanje zapisov [CSLA]
Collections that inherit from BusinessListBase automatically have Remove(), Contains(), and
ContainsDeleted() methods. Each of these accepts a reference to a child object as a parameter, and
often that is sufficient.
For this collection, however, it turns out that the UI code in Chapters 9 and 10 is much simpler
if it is possible to remove or check for a child object based on a resource Id property value rather
than a child object reference. To provide this capability, each of these three methods is overloaded
with a different implementation. For instance, here’s the Remove() method:
public void Remove(int resourceId)
{
foreach (ProjectResource res in this)
{
if (res.ResourceId == resourceId)
{
Remove(res);
break;
}
}
}
This method accepts the resourceId value as a parameter, and that value is used to locate the child
object (if any) in the collection. The Contains() and ContainsDeleted() overloads follow the same basic
approach.
Not all collections will need overloads of this type, but such overloads are often useful to simplify
the use of the collection and reduce code in the UI.
Wednesday, 28 January 2009
Authorization
Saturday, 24 January 2009
Razširjanje obstoječih razredov FCLja
Recimo, da potrebujemo na obstoječem tipu String novo metodo, ki bo preverila ali stanje objekta ustreza določemu pravilu. Lahko bi z regular expressions preverili ali je obstoječa vrednost objekta pravilen e-mail naslov ali ne.
V našem primeru bomo razširili tip String z metodo, ki bo preverila ali je vrednost palindrom.
Napišemo extensiom method takole:
1 public static class String
2 {
3 public static bool isPalindrome(this string s)
4 {
5 string result = string.Empty;
6 char[] charArray = s.ToCharArray();
7
8 for (int i = 0; i < s.Length; i++)
9 {
10 result = result + charArray[s.Length - (i + 1)];
11 }
12
13 if (s == result)
14 return true;
15 else
16 return false;
17 }
18 }
Lame implementacija palindrom-checker funkcije, če ve kdo boljšo naj pove :)
Za test naredimo array stringov in za vsak element v arraju pokličimo naš nov extension method isPalidrome()
Loop izpiše, F, T, T, F, T1 var words = new string[] { "kaj", "ata", "bab", "bla", "radar" };
2
3 var foo = words.Select(x => x.isPalindrome());
4
5 foreach (bool b in foo)
6 Console.WriteLine(b);
Primer s preverjanjem stringa, če ustreza vzorcu veljavnega email naslova. User defined extension metode so lahko tudi v poljubnem razredu. Smotrno je, da imamo vse extension metode na enem mestu npr. v MyExtensions razredu. Če so splošno uporabne, lahko naredimo tudi code library(assembly) in ga vključimo v nadaljnje aplikacije, ki jih bomo razvijali.
1 public static class MyExtensions
2 {
3 public static bool IsValidEmailAddress(this string s)
4 {
5 Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
6 return regex.IsMatch(s);
7 }
8 }
Preverjanje nove extension metode na listi stringov:
Action
Na generični kolekciji uporabimo default extension metodo ForEach() in ji damo
za parameter delegat(pointer na anonimno metodo).
1 Action<string> email = e => Console.WriteLine(e.IsValidEmailAddress());
2
3 var emailList = new List<string>
4 {
5 "bla@bla",
6 "matjaz.curic@pro-bit.si",
7 "localhost",
8 "root@google.com.com.com.si"
9 };
10
11 emailList.ForEach(email);
Izpiše, F, T, F, T (Zadnji T verjetno ni vredu ... tako se je sparsal string na podlagi regular izraza, obstajajo tudi boljši pattern marcheri( za maile, ampak to zdaj ni tema ...).
Friday, 23 January 2009
Generične kolekcije, anonimne metode, lambda izrazi
Kadar predvidevamo, da bomo neko funkcijo uporabili samo enkrat, jo definiramo kar "in-line". Drugi funkciji lahko damo kot parameter funkcijo samo. Izrazno močen in eleganten način pisanja anonimih funkcij je s pomočjo lambda izrazov.
Primer:
Izpis kvadratov celih števil od 1 do 10
1 var squares = Enumerable.Range(0, 10).Select(x => x * x);
2
3 foreach (int num in squares)
4 {
5 Console.WriteLine(num);
6 }
7
Iz naslednjega primera bo še bolj razvidna moč fluent interface-a.
Primer:
Na množici celih števil od 1 do 10, izberimo podmnožico lihih števil razvrščene od največjega do namanjšega. Vsak element podmnožice korenimo s kvadratnim korenom. Ustvarimo močno tipizirano generično kolekcijo z novim anonimnim tipom, ki naj ima dva propertija, osnovo in kvadratni koren osnove.
Omenjeno transformacijo je možno naredit v eni vrstici, zaradi preglednosti je koda zapisana v "več" vrsticah.
var collection = Enumerable.Range(0, 10)
.Where(x => x % 2 != 0)
.Reverse()
.Select(x =>
new { Original = x,
SquareRoot = Math.Sqrt(x)
});
V parameter listi metode Select() smo na desni strani lambda izraza uporabili object initializer in s keywordom "new" ustvarili nov anonimni tip. Compiler v compile time-u v odzadju ustvari nov anonimni razred, njegovo definicijo pa izpelje(type inference) iz object initializerja.
Vsaka od generičnih metod na IEnumerable
Primer iz PBRT4Lividature, kjer je bilo potrebno zgenerirat argumente za eksterni program za risanje grafov:
Na objektu List
1 var documentFlow = (List<Posta_referent>)p.ForwardedTo;
2
3 documentFlow.ForEach(refer =>
4 {
5 edge = edge + refer.Referent_posredoval + " -> " + refer.Referent + ";";
6 });
Torej kadar delamo operacije nad elementi v kolekcijah, pride prav obsoječi interface "extension" method, ki jih je microsoft dodal v tipe generičnih kolekcij. Anonimne metode ni potrebno več izražati z delegati, saj so na voljo lambda izrazi, s katerimi je možno definirati anonimne metode še bolj kompaktno.
Sprememba tipa polja na bazi
Monday, 19 January 2009
povezave na bazo
Updgrade podatkovne baze
Friday, 16 January 2009
Naredimo Text polje na bazi.
Monday, 12 January 2009
Uporaba Default Sheme
Monday, 5 January 2009
Osnovna Aplikacija
Zaporedje namestitve komponent
1. Enterprise Library May 2007 [3.1]
2. Guidance Automation Extension
3. Guidance Automation Toolkit for VS 2008
4. Smart Client Software Factory [April]
NHibernate Profiler
A Profiler For NHibernate? What’s The Point?
If you’re not very experienced with NHibernate, it’s not always clear what NHibernate is doing behind the scenes. What kind of queries is it generating? How many entities are we loading? How often does it go the database? Even experienced NHibernate users can make mistakes which may result in inefficient data access, high memory usage, slow response times, etc. When used properly however, you can get excellent performance out of NHibernate.
http://davybrion.com/blog/2009/01/nhibernate-profiler-review/