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 ...

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

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 "

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
[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

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;

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

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.

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 :

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()
{
}
}

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)
var numbers = Enumerable.Range(10, 20);
2. Generiranje naključnih številk
Random rand = new Random();
var randomSeq = Enumerable.Repeat(0, N).Select(i => rand.Next());
3. Ponavljanje "stringa" za X krat
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 :
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

Wednesday, 20 October 2010

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.

Thursday, 6 May 2010

Citat dneva






















od : http://vi.sualize.us/view/ec2de4dec64a1a18a95647318e3a9fd4/

Wednesday, 5 May 2010

Friday, 30 April 2010

Validacija pB_GridLookUp


Nastavitev za prikaz klicaja pri validaciji, če uporabljamo pB_GridLookUp kontrolo

V Properties od kontrole odpremo DataBindings in kliknemo na Advanced, kjer propertyu EditValue nastavimo bindings. Primer je na sliki.

Wednesday, 28 April 2010

Novi Dialect


Novi PB dialect, uporabimo na zgornji način v datoteki, v kateri specificiramo povezavo do podatkovne baze. Glavna sprememba dialecta je da uporabalja namesto NVARCHAR tipa, VARCHAR.

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)

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.
  • 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.
In 2 Dodatna razreda, ki skrbita za unikatne nastavitve na posameznem modulu.
  • Module – ki nosi nazive tabele in ime modula v konstantah.
  • ModuleSettings – definiramo vse možne nastavitve in njihove privzete vrednosti.
2. Uporaba Nastavitev na posameznih modulih. Dedujemo od zgoraj omenjenih objektov in dopolnimo glavo, kjer zapišemo tabelo v katero se shranjujejo podatki. Tako se bodo nastavitve zapisovale za vsak module posebej v svojo tabelo. Dopolniti je potrebno:
  • 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.
3. Imamo kontrolni class, ki ima implementirane vse funkcije in kako dostopamo do podatkov, in kako jih shranjujemo. ConfigurationHandler, tudi ta class je potrebno deodovati in naredit svojega, ki implementira samo public dostopne metode in skrbi za pravilne sklice, katero konfiguracijo želimo dostaviti. To je za uporabo na formah in kjer se direktno sklicujemo na nastavitev.
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.


Friday, 15 January 2010

Kdo bo to prebral pred 12:30 @ 15.01.2010 dobi pivo...




- Posted using BlogPress from my iPhone