Več info :
Google HELP!
Wednesday, 8 December 2010
Tuesday, 7 December 2010
Advanced PICKER forma
In smo dočakali ... vsaj delno :). Za enkrat deluje samo metoda, ki je opisana spodaj.
var modalDialogResult = _viewService.ShowPickerForm ("Naziv modalnega okna", new TravelOrderBrowseList.Criteria());
//pred tem še seveda preverimo ali je uporabnik sploh kliknil "Potrdi" - DialogResult
if (modalDialogResult != null && modalDialogResult.View != null)
{
var selectionView = modalDialogResult.View as IPBAdvancedPickerForm;
if (selectionView!= null)
{
var selectedRows = selectionView.GetSelectedRows;
// DO Your MAGIC!
}
}
Manjka še metoda : ShowPickerForm(object selectionList, string caption) ter seveda možnost obvezne izbire samo ENEGA zapisa.
Če bo čas na moji strani bom probal še narediti tako, da se vrne lista s pravimi objekti ... oz. kakšna helper metoda, ki ti sama pretvori v "pravo" listo ...
To je to ... sedaj pa hitro uporabljat ...
var modalDialogResult = _viewService.ShowPickerForm
//pred tem še seveda preverimo ali je uporabnik sploh kliknil "Potrdi" - DialogResult
if (modalDialogResult != null && modalDialogResult.View != null)
{
var selectionView = modalDialogResult.View as IPBAdvancedPickerForm;
if (selectionView!= null)
{
var selectedRows = selectionView.GetSelectedRows;
// DO Your MAGIC!
}
}
Manjka še metoda : ShowPickerForm(object selectionList, string caption) ter seveda možnost obvezne izbire samo ENEGA zapisa.
Če bo čas na moji strani bom probal še narediti tako, da se vrne lista s pravimi objekti ... oz. kakšna helper metoda, ki ti sama pretvori v "pravo" listo ...
To je to ... sedaj pa hitro uporabljat ...
Friday, 3 December 2010
Init vs Initilize
Vprašanje kdo, kaj, zakaj, metoda Initialize?
Ta metoda se kliče vedno ob kreiranju NH povezav 1:m, m:1, .... ko se naloži objekt iz baze. Na listah se pravi povezavah 1:m naredi NH ISet objekt, ki ga potem naložimo v naš List objekt. ForEach in za vsak objekt posebaj kličemo Init od objekta.
Zaključek:
Init = naš, csla
Initialize = Nhibernate
Ta metoda se kliče vedno ob kreiranju NH povezav 1:m, m:1, .... ko se naloži objekt iz baze. Na listah se pravi povezavah 1:m naredi NH ISet objekt, ki ga potem naložimo v naš List objekt. ForEach in za vsak objekt posebaj kličemo Init od objekta.
Zaključek:
Init = naš, csla
Initialize = Nhibernate
Tuesday, 30 November 2010
Registracija WCF-ja v IIS
Včasih je potrebno "ponovno" registrirati WCF service znotraj IIS-a
komanda je naslednja :
"C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe-i "
komanda je naslednja :
"C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe-i "
NHibernate - Unique-Index
Da zagotovimo unikatnost podatkov tudi na DB nivoju lahko polja kot so "IDENT" opremimo z atributom "Column".
Klasični atribut za property je
Klasični atribut za property je
[Property(Name = "Ident", Column = "Ident", Length = 10)]Če pa želimo narediti unique index pa moramo ločiti Property ter Column atribut na naslednji način:
[Property(0,Name = "Ident")]
[Column(1,Name = "Ident", Length = 20, Unique = true, UniqueKey = "CostCenterIdent")]
Saturday, 27 November 2010
Using The Guid.Comb Identifier Strategy
Alternativa navadnim "Guid" primary key's ... baje je boljše zaradi indexov.
@Mitja : a bomo testirali ? :)
http://nhforge.org/blogs/nhibernate/archive/2009/05/21/using-the-guid-comb-identifier-strategy.aspx
@Mitja : a bomo testirali ? :)
http://nhforge.org/blogs/nhibernate/archive/2009/05/21/using-the-guid-comb-identifier-strategy.aspx
Friday, 26 November 2010
NHibernate in Key Update
Nhibermate rad dela key update. Shrani parent in child objekt, nato pa na childu naredi key update in ga nastavi na null. Rešitev:
[Set(0, Name = "CRDocumentPositionSet", Lazy = CollectionLazy.False)]
[Key(1, Column = "IdDocument", ForeignKey = "none", Update = false)]
[OneToMany(2, ClassType = typeof(CRDocumentPosition), NotFound = NotFoundMode.Ignore)]
private ISet _cRDocumentPositionSet;
[Set(0, Name = "CRDocumentPositionSet", Lazy = CollectionLazy.False)]
[Key(1, Column = "IdDocument", ForeignKey = "none", Update = false)]
[OneToMany(2, ClassType = typeof(CRDocumentPosition), NotFound = NotFoundMode.Ignore)]
private ISet _cRDocumentPositionSet;
Wednesday, 24 November 2010
MSI
Na ptofsju sta objavljena končna MSI-ja za instalacijo Testne in produkcijske verzije aplikacije. Nahajata se "LukaVeKje". Drugače pa za ostale se nahaja msi na nalsednji poti v TFS-ju.
$/pbrt4Development/DevBranch/Desktop/PBRT4_ERP/Source/Infrastructure/ShellRelease/PRO4 ERP Setup/MSITransformTable/
ReleaseMSI- je preveden MSI za produkcijo in ima privzeto vpisan strežnik http://podpora.pro-bit.si
TestMSI - je preveden MSI za testno verzijo aplikacije in ima privzeto vpisan strežni http://protestni
$/pbrt4Development/DevBranch/Desktop/PBRT4_ERP/Source/Infrastructure/ShellRelease/PRO4 ERP Setup/MSITransformTable/
ReleaseMSI- je preveden MSI za produkcijo in ima privzeto vpisan strežnik http://podpora.pro-bit.si
TestMSI - je preveden MSI za testno verzijo aplikacije in ima privzeto vpisan strežni http://protestni
Tuesday, 2 November 2010
Solution File - Sprememba strukture
Vsi, ki uporabljate solution "PBRT4_All_Projects" ... struktura je spremenjena ( optimizirana :) ).
Osnovni folderji (Framework , Infrastructure ) so ostali nespremenjeni. Glavna sprememba je ločevanje modulov ter knjižnic po aplikacijah in ne več generalno ( module , library, ... ).
Nova struktura omogoča lažje iskanje knjižnic ter njihovo vklapljanje ter izklapljanje.
Iz spodnje slike je razvidna nova struktura.
Osnovni folderji (Framework , Infrastructure ) so ostali nespremenjeni. Glavna sprememba je ločevanje modulov ter knjižnic po aplikacijah in ne več generalno ( module , library, ... ).
Nova struktura omogoča lažje iskanje knjižnic ter njihovo vklapljanje ter izklapljanje.
Iz spodnje slike je razvidna nova struktura.
Wednesday, 27 October 2010
Visual Studio - "File Lock" pri buildanju - Rešitev !
Pri buildanju vseh projektov se velikorat pojavi napaka, da je "File Lock" ( access denied ) ali kaj podobne -- predvsem je to Shell ( pbrt4.exe ) ... rešitev je ta, da v Pre-Build event projekta ( ki jezi ! ) kopiramo naslednjo kodo :
to je to :)
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
to je to :)
Tuesday, 26 October 2010
"OnŽeVe" Import
Vse kar je potrebno da "OnŽeVe" import lahko uporabimo in da dela tako kot mora je. Na objektu v katerem smo definirali akcije, ki se lahko izvedejo dodamo attribut [ImportAction(ModuleName = "Modul za katerega uporabljamo import")] in v konstruktorju, brez argumentov, objetka navedemo in registraramo akcije.
Primer:
[ImportAction(ModuleName = "oni novi modul")]
public class noviModulAkcije
{
public novimodulAkcije()
{
ImportList.AddAction("Ime akcije", "natančen opis kako akcija deluje",
MetodaKiSeIzvedeObKlicu);
}
public void MetodaKiSeIzvedeObKlicu()
{
}
}
Primer:
[ImportAction(ModuleName = "oni novi modul")]
public class noviModulAkcije
{
public novimodulAkcije()
{
ImportList.AddAction("Ime akcije", "natančen opis kako akcija deluje",
MetodaKiSeIzvedeObKlicu);
}
public void MetodaKiSeIzvedeObKlicu()
{
}
}
VS Tips'N'Tricks - "Run to cursor"
"Run to cursor" nam omogoča, da v času debugiranja kreiramo začasen break-point.
V delu kode, kjer želimo, da se program ustavi iz menija izberemo "Run to cursor" in aplikacije se izvede do točke, ki smo jo določili.
To je hitrejši način kot pa premikanje po kodi s tipkama F10 / F11 in lovimo "pravi trenutek".
Monday, 25 October 2010
LINQ-Tips'n'Tricks #1
V prvi "seriji" tips'n'tricks bom predstavil t.i. "Generation operators" - kot pove ime so namenjeni generiranju določenih sekvenc ( številk, objektov, ... ).
RANGE in REPEAT
1. Generiranje zaporednih številk ( 10,11,12,13,14,...,20)
RANGE in REPEAT
1. Generiranje zaporednih številk ( 10,11,12,13,14,...,20)
var numbers = Enumerable.Range(10, 20);2. Generiranje naključnih številk
Random rand = new Random();3. Ponavljanje "stringa" za X krat
var randomSeq = Enumerable.Repeat(0, N).Select(i => rand.Next());
var str = Enumerable.Repeat("Yes ",5); //Izpiše "Yes Yes Yes Yes Yes"4. Kreiranje X "praznih" objektov.
var objArray = Enumerable.Repeat(0,5).Select(x => Contact.NewEntity() ).ToArray();
40 Hour Work Week @ Microsoft
Zanimivo ter predvsem poučno branje :)
40 Hour Work Week
Citat :
40 Hour Work Week
Citat :
In my experience, a 40 hour work week is a benchmark of the most effective teams.
- They have work-life balance.
- They have buffer to respond to opportunity and to deal with crunches.
- They have processes in place, they invest in their learning and growth, and they move up the stack instead of always solving the basics.
Instead of perpetual fire-fighting, they are more deliberate about planning and strategy and they anticipate their customers and the market (through empathy and staying connected to customers.)
- They learn and respond and can turn on a dime. They have a dashboard, they know the score, and they can change their approach.
Friday, 22 October 2010
Extension methods
V prihodnjih dneh ( tednih :) ) bova z Mitjem pripravila PBRT4_Extensions knjižnico ( spremenile se bodo tudi druge knjižnice oz. se bo PBRT4_Library ločila na več manjših dll-jev - a o tem drugič ).
Z uporabo extension metod je koda bolj "bralna" in lažje sledljiva.
Primer
if(!ReferenceEquals( myObj, null ) -- zelo nepregledno ( hitro spregledaš ! na začetku )
Alternativa preko ExtensionMethods if ( myObj.IsNotNull() ) -- bolj pregledno
Z uporabo extension metod je koda bolj "bralna" in lažje sledljiva.
Primer
if(!ReferenceEquals( myObj, null ) -- zelo nepregledno ( hitro spregledaš ! na začetku )
Alternativa preko ExtensionMethods if ( myObj.IsNotNull() ) -- bolj pregledno
Wednesday, 20 October 2010
Tuesday, 19 October 2010
Ultimate Guide to speed up Visual Studio
Nekaj trikov za hitrejše delovanje...
http://lennybacon.com/2010/10/18/UltimateGuideToSpeedUpVisualStudio.aspx
http://lennybacon.com/2010/10/18/UltimateGuideToSpeedUpVisualStudio.aspx
Thursday, 17 June 2010
Flowr
http://theflowr.com/
Flowr was created by a small passionate team that believes that we need to change the way we communicate inside groups. Approaching communication using social media already showed us how much more powerful it can be. That is why we think that it can be successfully adapted for use inside Enterprise with a healthy addition of innovation applied to it.
Flowr is a spinoff from Intera, a successful web application development company and Red Herring 100 Europe Winner. Flowr and Intera were created by a successful serial entrepreneur and a few technology geeks who are passionate about Social networks, Real-time Collaboration, Social Knowledge management and Semantic web.
Flowr was created by a small passionate team that believes that we need to change the way we communicate inside groups. Approaching communication using social media already showed us how much more powerful it can be. That is why we think that it can be successfully adapted for use inside Enterprise with a healthy addition of innovation applied to it.
Flowr is a spinoff from Intera, a successful web application development company and Red Herring 100 Europe Winner. Flowr and Intera were created by a successful serial entrepreneur and a few technology geeks who are passionate about Social networks, Real-time Collaboration, Social Knowledge management and Semantic web.
Thursday, 6 May 2010
Wednesday, 5 May 2010
Friday, 30 April 2010
Validacija pB_GridLookUp
Wednesday, 28 April 2010
Novi Dialect
Thursday, 18 February 2010
Button apply oz. shrani spremembe
Na PB_AddEditForm je dodan gumb za sprotno shranjevanje na formi (apply).

1. Najprej na view-u od forme overridamo metodo

2. V presenterju pa se doda naslednja koda (primer za aktivnost)

3. V primerih kot so GoogleMapView forma itd. se naj gumb skrije, nima smisla v funkcionalnosti

*Update - v presenterju je narejena metoda za Rebind vseh child form..
public void RebindChildForms(object bo, Dictionary ChildForms)

1. Najprej na view-u od forme overridamo metodo
2. V presenterju pa se doda naslednja koda (primer za aktivnost)
3. V primerih kot so GoogleMapView forma itd. se naj gumb skrije, nima smisla v funkcionalnosti
*Update - v presenterju je narejena metoda za Rebind vseh child form..
public void RebindChildForms(object bo, Dictionary
Tuesday, 9 February 2010
Uporaba nastavitev
1. Objekt AppSettings, definira vse potrebne lastnosti, njihova polja v bazi, in metode. Polja predstavljena v podatkovni bazi pa so definirana s constantam AppSettingFields. Imamo 6 osnovnih razredov, ki jih je potrebno dedovati.
4. Uporabniški vmesnik je definiran v Admin modulu. Za uporabo je potrebno narediti samo klic na meniju in zraven dopolniti pravilne objekte, ki so specifični za vsak modul posebej.
- AppSettings – definira vsa potrebna polja za nastavitev.
- AppSettingsInfo – prikaz posamezne nastavitve z samo osnovnimi podatki.
- AppSettingsList – lista info objektov.
- AppSettingsEditInfo – prikaz različnih nastavitev.
- AppSettingsListEdit – lista različnih nastavitev.
- ConfigurationHandler – Skrbi za pravilno dostavo nastavitev in pravilno zapisovnaje v bazo.
- Module – ki nosi nazive tabele in ime modula v konstantah.
- ModuleSettings – definiramo vse možne nastavitve in njihove privzete vrednosti.
- Glavo – kjer povemo tableo v katero se zapisuje nastavitev
- DatabaseKey – pove kateri connection string uporabimo.
- FillList metodo – ki nam napolni seznam vseh ostalih nastavitev tega tipa.
- ChangeSetting – skrbi da se pravilno napolni tip in ime, ki je definirano za vsak modul posebej.
- DefaultValue – Ki vrne privzeto vrednost posamezne nastavitve iz objekta ModuleSettings.
- SettingList – Vrne vse nastavitve tega modula iz objekta ModuleSettings.
4. Uporabniški vmesnik je definiran v Admin modulu. Za uporabo je potrebno narediti samo klic na meniju in zraven dopolniti pravilne objekte, ki so specifični za vsak modul posebej.
Monday, 25 January 2010
Integracija reporting service z BrowseView.
Za forme, ki so že implementirane je postopek implementacije sledeč :
1.) V Interfeca od forme je potrebno dodati naslednji dve vrstici
object GetData();
PopupMenu GetReportPopupMenu();
Implemenacija je že na osnovni formi PB_AdvancedBrowse.
2.) V Presenter od brows-a pa naslednje tri metode
public void OnAddReports()
{
AddReportsAndButtons(ReportGroup.ActivityList, View.GetReportPopupMenu());
}
public override void OnAdvancedPrintPreview(object sender, ItemClickEventArgs e)
{
base.OnAdvancedPrintPreview(sender, e);
AdvancedPrintPreview(ReportGroup.ActivityList);
}
public override void ReportButtonClick(object sender, ItemClickEventArgs e)
{
GridData = View.GetData();
base.ReportButtonClick(sender, e);
}
Kar pa zadeva novih form, ki bodo kreiranje z novimi predlogami pa bo (3-metode presenterja) potrebno popraviti ReportGroup.
1.) V Interfeca od forme je potrebno dodati naslednji dve vrstici
object GetData();
PopupMenu GetReportPopupMenu();
Implemenacija je že na osnovni formi PB_AdvancedBrowse.
2.) V Presenter od brows-a pa naslednje tri metode
public void OnAddReports()
{
AddReportsAndButtons(ReportGroup.ActivityList, View.GetReportPopupMenu());
}
public override void OnAdvancedPrintPreview(object sender, ItemClickEventArgs e)
{
base.OnAdvancedPrintPreview(sender, e);
AdvancedPrintPreview(ReportGroup.ActivityList);
}
public override void ReportButtonClick(object sender, ItemClickEventArgs e)
{
GridData = View.GetData();
base.ReportButtonClick(sender, e);
}
Kar pa zadeva novih form, ki bodo kreiranje z novimi predlogami pa bo (3-metode presenterja) potrebno popraviti ReportGroup.





