|
|

|
Tervetuloa Ohjelmistokehityksen asiantuntijaryhmän sivuille!
Allaolevaa blogia pitävät ryhmän jäsenet. |
|
|
| Azuren parhaisiin puoliin kuuluu, että siellä pyörivää sovellusta voidaan skaalata ylös- ja alaspäin nappia painamalla – näin ainakin teoriassa. Totuus kuitenkin on, että tällainen skaalautuvuustuki vaatii myös teknisiä kyvykkyyksiä ohjelman sisällä. Toisin sanoen, ainakaan vielä lounas ei ole aivan ilmainen. Microsoft julkisti joulukuun lopulla MSDN:n Patterns & Practices -palvelussa uuden valmiiksi mietityn rakennusmallin skaalautuville sovelluksille. Rakennusmalli on nimeltään Autoscaling Application Block ja se sisältää sekä dokumentaatiota että lähdekoodia. Mallin avulla Azure-sovellukselle voidaan määrittää konemäärien raja-arvot esimerkiksi siten, että ruuhkahuippuina käytetään 10–15 konetta, ja muina aikoina vähemmän.  Koska Azuressa maksetaan (muun muassa) käytettävistä konetunneista, vaikuttaa skaalautuminen suoraan palvelun kuukausimaksuihin. Asiaan liittyy myös Channel 9 -video, joka kannattaa kurkata. |
| Ohjelmistokehityksen asiantuntijaryhmä toivottaa pienen runon muodossa kaikille ITPro.fi-yhteisön jäsenille ja lukijoille hyvää Joulua ja menestyksekästä alkavaa vuotta 2012! Koko vuoden koodia kirjoitin välillä mieltäni energiajuomalla virvoitin Turvallisesti käsittelin kaikki keksit ja piparit kuuliaisesti suunnittelin pyydetyt rapparit Kaiken mahdollisen ja mahdottoman testasin vielä konsultinkin avukseni pestasin Nyt soljuu viidellä säikeellä yhtä aikaa täytyy ytimissä olla jotain erikoista taikaa sillä Seattlen ikkuna-ohjelmat pysyi auki eikä mennyt msdn-tilaukseni rauki Joskus tuli poikkeuksista aavistuksen takkiin mutta sainpahan TechDaysistä pinssin lakkiin Tietokantapalvelinta komensin: päivitykset asenna ei paikkaamattomat aukot enää mieltäni jäsennä Siispä on aika joulunviettoon käydä hetkeksi hiljaa jääköön koneen väylä. Hyvää Joulua ja Uutta Vuotta 2012! |
| Näin lähellä vuoden 2011 loppua on hyvä hengähtää hetki ja samalla pohtia pian alkavaa uutta vuotta. Vuoden vaihtumiseen liittyy monella jonkinlainen uudenvuodenlupaus, jota sitten yritetään noudattaa ainakin tammikuun pari ensimmäistä viikkoa. Yhtä kaikki, näihin lupauksiin kuuluu keskeisesti toive tehdä seuraavana vuonna jotakin paremmin kuin kuluneena vuonna. Koodarin työlupaus liittyy usein tehokkaampaan työskentelyyn, parempaan tiimityöhön ja virheiden välttämiseen. Mitä Visual Studio -kehittäjä voisi sitten luvata tekevänsä vuonna 2012 aiempaa paremmin? Ideoita on varmasti yhtä monta kuin kehittäjiäkin, mutta yksi ajatus voisi olla koodin testattavuuden parantaminen ja sitä kautta korkeamman laadun tuottaminen pienemmällä vaivalla. Tässä hengessä otetaan esille .NET 4.0:aan parisen vuotta sitten ilmestynyt ominaisuus nimeltä Code Contracts, vapaasti suomennettuna koodisopimukset. Tekniikan käyttöönotto voisi siis olla yksi kehittäjän lupauksista alkavalle vuodelle.  Koodisopimusten ideana on tarjota kehittäjälle mahdollisuus ilmaista paremmin luokkien ja metodien ennakkovaatimukset, tulokset sekä olettamukset kenttien ja ominaisuuksien arvoista ohjelman suorituksen aikana. Englanniksi näistä asioista käytetään nimityksiä precondition, postcondition ja invariant. Code Contracts on nykyisin vakio-osa .NET 4.0:aa, ja siihen liittyvät luokat löytyvät nimiavaruudesta System.Diagnostics.Contracts mscorlib-koonnista. Keskeihin luokka on nimeltään Contract, jolla on useita staattisia metodeja tarkkailemaan esimerkiksi metodin parametreja tai luokan ominaisuuksien sallittuja arvoja. Erityisellä erikseen asennettavalla lisäosalla näitä koodiin kirjoitettuja ehtoja voidaan verifioida myös staattisella koodianalyysillä, joskaan tämä ei ole läheskään aukotonta.  Jos haluat kokeilla Code Contractsia, ota ensin käyttöön mainittu Contract-luokka. Yksinkertaisimmillaan voidaan käyttää esimerkiksi parametrien validiointiin Assert-metodia, joka on monelle jo tuttu Debug-luokasta. Contract-luokan Assert-metodi toimii samalla idealla, mutta mahdollistaa paremman staattisen analyysin. Tässä pieni koodiesimerkki luokasta, joka käyttää kyseistä toimintoa: using System.Diagnostics.Contracts; ... public class MyLogic { public int Level { get; set; } public void StoreObject(object something) { Contract.Assert(something != null); if (Level == 0) { // ... } else if (Level == 1) { // ... Level = 2; } } [ContractInvariantMethod] private void CheckInvariants() { Contract.Invariant(Level == 0 && Level == 1); } } Kyseessä on yksinkertainen fiktiivinen luokka jolla on kuitenkin tausta-olettamus: Level-ominaisuuden arvo on oltava aina nolla tai yksi. Tätä varten luokassa on metodi nimeltä CheckInvariants, jolle on erillisellä ContractInvariantMethod-attribuutilla kerrottu, että tätä metodia kutsutaan automaattisesti aina, kun luokan julkisia metodeita käytetään. Lisäksi StoreObject-metodissa käytetään Assert-metodia tarkistamaan, että parametrina annetun olion arvo on eri kuin null. Staattinen analyysi Jos Visual Studion asennusta terästää sopivalla lisäosalla (lisäosasta on kaksi eri versiota, toinen Visual Studion Professional-versiolle ja toinen Premium- ja Ultimate-versioille), päästään koodisopimuksia tarkastelemaan jo käännösaikana.  Kun lisäosa on asennettu, projektin asetuksiin ilmaantuu uusi välilehti, jossa on paljon koodin analysointiin liittyviä asetuksia. Laittamalla päälle staattisen analyysin (Perform Static Code Checking) saadaan käännöksen yhteydessä tulokset tuttuun Error List -ikkunaan:  Tässä esimerkissä nähdään kolme varoitusta, koska StoreObject-metodissa Level-ominaisuuden arvo asetetaan vahingossa virheelliselle alueelle, eli kahteen kun sallitut arvot ovat nolla ja yksi. Huomaa, että pienelläkin sovelluksella tämän analyysin laskeminen kestää helposti kymmenenkin sekuntia, joten tulokset tulevat Error List -ikkunaan viiveellä. Lisäosa tuo mukanaan myös C#- ja Visual Basic -kielisiä koodinpätkiä (code snippets), joita voi käyttää koodisopimusten kirjoittamisen apuna.  Jos haluat tarkempaa tietoa Code Contracts -toiminnoista, lukaise ihmeessä läpi kattava dokumentaatio. Parempaa koodausvuotta 2012 kaikille! |
| Suomen .NET-käyttäjäkerho SANKO kokoontuu taas. 14.12. klo 15-18 pidetään Microsoftilla (Espoossa) ilmainen SANKO-tapahtuma aiheesta ADM-abstraktiomalli. Lyhyesti: "Suomalainen Kalle Launiala on kehitellyt Visual Studion T4-templatemoottoriin perustuvan tavan mallintaa sovelluksia tehokkaasti – ja julkaissut sen avoimen lähdekoodin projektina. XML-mallin kautta kehittäjän hallitseman koodigeneroinnin avulla syntyy niin data access –kerros kuin Windows- ja Android-clientitkin. Kerros ei tee koodareita turhaksi, mutta generoinnilla voidaan vähentää toisteisen koodin kirjoittamista. Mutta onko yleiskäyttöisten mallien kirjoittaminen sinun projektissasi vaivan väärti? Kalle esittelee T4:n ja generointitekniikkansa. Lisäksi tilaisuudessa on aikaa kysymyksille ja keskustelulle. Aiheeseen voit perehtyä jo etukäteen Kallen blogissa: http://abstractiondev.wordpress.com/. Blogin ”Getting Started” osiota päivitetään erityisesti hands-on kehittäjien ja arkkitehtien tarpeet huomioiden. Ilmoittaudu tästä tunnuskoodilla E023B1. Tervetuloa! |
| Build-konferenssissa julkaistiin CTP-versio .NET Framework 4.5:stä. Ohjelmistokehityksen asiantuntijaryhmä avasi paketin ja selvitti, mitä uutta Frameworkissa oikeastaan onkaan. Kokonaisuutena .NET 4.5:ttä voi luonnehtia kevyehköksi päivitykseksi, mutta mitätön se ei missään nimessä ole. Uusia ominaisuuksia on jonkin verran, mutta vanhoja on vahvistettu senkin edestä. Keskeisiä teemoja ovat suorituskyky ja asynkronisten toimintojen tuki – ja tietysti, tuki Windows 8:lle ja WinRT-käytölle. Uudet ominaisuudet paketoimme julisteen muotoon. Kuvaa klikkaamalla saat sen isommassa koossa. Juliste on alun perin suunniteltu tulostettavaksi vaaka-A3:na.  .NET 4.5:n lisäksi kannattaa kokeilla myös Visual Studio 11:tä, joka julkaistaan samalla. Siinä on myös koko joukko mielenkiintoisia uusia ominaisuuksia – niihin palaillaan myöhemmin. Lisätietoja? Hyviä tietolähteitä .NET 4.5:stä: |
| Uutiselta kesti useita päivä kiiriä Suomeen saakka, mutta joka tapauksessa: C-ohjelmointikielen isä ja alkuaikojen Unix-kehittäjä Dennis Ritchie on poistunut keskuudestamme. Viime päivät mediassa on tietysti puhuttu Steve Jobsista, mutta uskallan väittää, että Ritchien vaikutus alaamme on ollut tätäkin suurempi. Ritchie oli merkittävä alan kehittäjä ja tietojenkäsittelytieteilijä, vaikka suuri yleisö ei häntä tunnekaan. Ritchien saavutuksiin kuuluvat C-ohjelmointikielen kehittäminen yhdessä kollegansa Brian Kernighanin kanssa sekä Unix-käyttöjärjestelmän kehittämiseen osallistuminen alkuajoista lähtien. 1970-luvulla esitelty C-ohjelmointikieli on edelleen maailman suositumpia ohjelmointikieliä, ja se on pohjana hyvin monelle muulle kielelle, esimerkiksi C++:lle, C#:lle, Javalle sekä lukuisille muille, joiden syntaksiin se on vaikuttanut (esimerkiksi Perl ja Ruby). Vaikka Unixia ei paljoa enää sellaisenaan käytetäkään, on Unix ollut pohjana Linux-käyttöjärjestelmälle. Linux on kirjoitettu C:llä ja C++:lla, joten Ritcien työ on vaikuttanut osaltaan myös tämän järjestelmän kehittämiseen. Listaa voisi jatkaa vaikka kuinka pitkään, mutta tässä muutamia esimerkkejä, joihin C-kieli ja Unix ovat vaikuttaneet vähintäänkin välillisesti: - Matkapuhelimet, esimerkiksi Linux-pohjainen Android-käyttöjärjestelmä,
- Sulautetut järjestelmät joissa on ohjelmointikielenä C-kieli ja käyttöjärjestelmänä jokin Linux-variantti, esimerkiksi digiboksit kotona tai liikenteenohjaus kaduilla,
- Applen tuotteet, kuten Mac OS X, Objective-C -ohjelmointikieli, sekä tietysti
- Windows-käyttöjärjestelmä, Visual Studio -kehitin sekä C#-ohjelmointikieli.
Tarkemmin kun ajattelee, on vaikea löytää tietoteknistä laitetta tai ohjelmistoa, jolla ei olisi minkäänlaisia kytköksiä Ritchien työhön. Kiitos siis työstäsi, Dennis! |
| Windows Phonen kehittäjätyökalut tulivat saataville eilen, joten lataamalla uusimman SDK-paketin pääsee kehittämään sovelluksia Windows Phone 7.5:lle eli Mangolle. Samaan SDK-pakettiin kuuluu tuki myös alkuperäiselle Windows Phone 7.0:lle, eli tarvittaessa tällekin versiolle voi vielä kehittää sovelluksia. Käyttöjärjestelmävaatimuksena on vähintään Windows Vista, mutta suurin osa kehittäjistä käyttänee Windows 7:ää. Huomionarvoista on, että Windows XP ei siis enää Mangon myötä kelpaa kehityskoneeksi. Lataa 7.1-version SDK-paketti täältä. Mangon RTM-version jakelu puhelimiin on myös alkanut, mutta ainakaan omaan LG:hen päivitystä ei vielä ole saatavilla. Arvelisin, että montaakaan päivää ei kuitenkaan tarvitse odottaa. Lisäksi kuulin, että uutena laitevalmistajana myös ZTE olisi tuomassa markkinoille Windows Phone -pohjaista puhelinta. Nyt siis yli kymmenen valmistajaa tarjoaa jo laitteita tälle alustalle. |
| Windows 8:n ensimmäiset kehittäjäesiversiot tulivat saataville parisen viikkoa sitten, ja nämä herättivät luonnollisesti paljon kiinnostusta kehittäjissä ja käyttäjissä. Windows 8 tuo paljon muutoksia varsinkin sovellusten käyttöliittymiin, mutta mitä kehittäjän pitäisi tässä vaiheessa tietää tulevista muutoksista? Seuraavassa kolmen kohdan tiivistelmä tärkeimmistä muutoksista. Sovellusten yhteensopivuus. Windows 8:n ominaisuuksiin kuuluu, että vanhat Windows 7 -yhteensopivat sovellukset toimivat Windows 8:ssa kuten ennenkin. Sen sijaan uusia Metro-käyttöliittymiä ei nykyisillä Win32-tekniikoilla voi toteuttaa, vaan tätä varten tarvitaan uusien rajapintojen käyttöä. Myös .NET-kehittäjien on uudistettava koodiaan mikäli haluavat hyödyntää Metro-ulkoasu. Toisin ilmaistuna: mikäli uudesta käyttöliittymästä tai sitä hyödyntävistä sovelluksesta ei ole kiinnostunut, mitään muutoksia sovelluksiin ei tarvita. XAML-kieli. XAML eli Extensible Application Markup Language on varsinkin WPF-, Silverlight- ja Windows Phone -kehittäjille tuttu. Windows 8:ssa käyttöliittymien kuvaamiseen käytetty XAML-kieli ei kuitenkaan ole täysin samaa kuin esimerkiksi WPF-sovelluksissa, vaan XAML-koodia on uudistettava. Windows Runtime. Windows Runtime eli WinRT on niiden uusien ohjelmointirajapintojen nimitys, joilla toteutetaan muun muassa Metro-sovelluksia. Kuitenkaan kyseessä ei ole pelkkä käyttöliittymäkirjasto, vaan Win32 API:n seuraajaksi tarkoitettu oliopohjainen kirjasto, joka on käytettävissä niin natiivikoodin sovelluksista kuin .NET-koodistakin. Sovellusten jakelu. Perinteisiä Windows-sovelluksia voidaan jaella kuten tähänkin saakka, mutta Metroa hyödyntävät sovellukset jaellaan markkinapaikan kautta. Tämä tarkoittaa, että kehittäjät saavat uuden jakelukanavan sovelluksilleen, mutta toisaalta kilpailu varmasti kiristyy. Yrityskohtaiset ratkaisut voidaan jaella kauppapaikan ohi, mutta tässä vaiheessa yksityiskohdat eivät vielä ole selvillä. |
| Tuli tarvetta tuunata pientä ASP.NET WebForms -sovellusta uusilla ominaisuuksilla, ja samalla törmättiin Internet Explorer 10:n kanssa kummallisuuteen ASP.NET 4.0:n automaattisessa selaintuessa. Testikoneeseeni olin asentanut IE10 Preview:n, mutta sen sijaan asiakkaan vanhemmalla IE-selaimella sovellus toimi hyvin. Missä vika? ASP.NET-sovelluksissa on jo kauan ollut automaattinen selaimen ominaisuuksien tunnistaminen mm. JavaScriptin käytön sallimista varten, mutta näemmä IE10 meneekin ohi siitä, mitä ie.browser-tiedostoon on ASP.NET:n asetuksissa määritelty. Ongelman ratkaisemiseksi kyseistä tiedostoa (löytyy kansiosta C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers) tulisi muokata. Näemmä ongelmaan on törmätty muuallakin, sillä Microsoftilta löytyy tukiartikkeli 2600088, jossa asiaa käsitellään. Päivityksen lataamalla tiedostoa ei tarvitse muokata käsin, joten vähän helpommalla päästään. Korjaus pitää tehdä kaikille niille palvelimille joilla sovellusta ajetaan (testi- ja tuotantopalvelimiten siis vähintään), joten ei riitä että ongelma korjataan vain kehittäjän koneella. Huomaa, että ongelma ei koske pelkästään IE-selainta, vaan myös Firefoxin reippaalla julkaisutahdilla tulleita uusia selainversioita. Em. tukiartikkelin myötä saadaan päivitykset myös samanlaiseen Firefox.browser-tiedostoon. Lataustiedostot löytyvät täältä. |
| Aiemmin tällä viikolla Microsoft laittoi jakeluun Windows Phone SDK 7.1:n RC-tasoiset kehitysvälineet. Kuten aiemminkin esim. Visual Studio 2010:n tapauksessa, Release Candidate –versio sisältää Windows Phonenkin tapauksessa Go Live –lisenssin, eli valmiita kaupallisia sovelluksia voi sillä ryhtyä julkaisemaan ja myymään. Samalla markkinapaikka on avoinna Mango-ohjelmille, vaikkei varsinaisia Mango-puhelimia vielä kaupasta saakaan. Windows Phone 7.1 SDK:n RC-version voi ladata täältä. Itse käyttöjärjestelmähän on ollut valmis jo heinäkuun lopulta, mutta kestää hetken ennen kuin päivitys saapuu eri puhelinmalleihin. Myös MSDN:n dokumentaatio alkaa pikkuhiljaa päivittyä 7.1-aikaan. |
View in Web Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/VisioWebAccess/VisioWebAccess.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType vdw 255 Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType ods 255 |
|
|
|
View in Web Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/VisioWebAccess/VisioWebAccess.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType vdw 255 Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType ods 255 |
|
|
|
View in Web Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/VisioWebAccess/VisioWebAccess.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType vdw 255 Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType ods 255 |
|
|
View in Web Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/VisioWebAccess/VisioWebAccess.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 0x0 0x1 FileType vdw 255 Compliance Details javascript:commonShowModalDialog('{SiteUrl}/_layouts/itemexpiration.aspx?ID={ItemId}&List={ListId}', 'center:1;dialogHeight:500px;dialogWidth:500px;resizable:yes;status:no;location:no;menubar:no;help:no', function GotoPageAfterClose(pageid){if(pageid == 'hold') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/hold.aspx?ID={ItemId}&List={ListId}'); return false;} if(pageid == 'audit') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/Reporting.aspx?Category=Auditing&backtype=item&ID={ItemId}&List={ListId}'); return false;} if(pageid == 'config') {STSNavigate(unescape(decodeURI('{SiteUrl}'))+'/_layouts/expirationconfig.aspx?ID={ItemId}&List={ListId}'); return false;}}, null); return false; 0x0 0x1 ContentType 0x01 898 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 FileType xsn 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.2 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.3 255 Edit in Browser /_layouts/images/icxddoc.gif /asiantuntijaryhmat/ohjelmistokehitys/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser&Source={Source} 0x0 0x1 ProgId InfoPath.Document.4 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsx 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsm 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType xlsb 255 View in Browser /asiantuntijaryhmat/ohjelmistokehitys/_layouts/xlviewer.aspx?id={ItemUrl}&DefaultItemOpen=1 0x0 0x1 FileType ods 255 |
|
|