|
|

|
Tervetuloa Ohjelmistokehityksen asiantuntijaryhmän sivuille!
Allaolevaa blogia pitävät ryhmän jäsenet. |
|
|
| Jos kokeilet Metro-sovellusten kehittämistä Visual Studion tulevalla 11-versiolla, olet saattanut törmätä seuraavanlaiseen virheeseen kun yrität ajaa sovellusta Visual Studiosta: Error: Another user has already installed an unpackaged version of this application. The current user cannot replace this with a packaged version. The conflicting package is 00123456-9876-5432-1234-111122223333 and it was published by CN=janijarvinen. Tämä virhe johtuu siitä, että jokaisella Metro-sovelluksella on oma guid-tunnisteensa, jonka pitää olla uniikki. Jos koneella on jo samalla guid-arvolla sovelluksen versio ja/tai kokonaan toinen sovellus, ei auta muuta kun joko poistaa toinen sovellus tai sitten muuttaa oman sovelluksesi guid-arvoa. Em. ongelman saat toistumaan esimerkiksi siten, että asennat ensin Windows 8:n Live-tunnuksella. Jos aloitat kehittämisen Live-tunnuksella kirjautumalla, ja sitten myöhemmin liität koneen toimialueeseen (kuten minä tein), et voikaan enää Visual Studiosta käynnistää sovellusta, vaan törmäät em. virheeseen. Guid-arvo löytyy projektiin kuuluvasta package.appxmanifest-tiedostosta, jossa se on yleensä tiedoston alussa toisella rivillä elementissä Identity tämän Name-attribuutissa. |
| Tuli projektissa tarvetta suunnitella uutta SQL Server –tietokantaa ja samalla selailin SQL Serverin dokumentaatiota tietotyyppien kokorajoituksia etsiskellen. Samalla osui silmään SQL Server 2012:n myötä text- ja ntext-tietotyyppeihin tullut varoitus siitä, että nämä tietotyypit ovat poistumassa tulevista SQL Serverin versiosta. Teksti menee näin: Important ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead. Fixed and variable-length data types for storing large non-Unicode and Unicode character and binary data. Unicode data uses the UNICODE UCS-2 character set. Tästä eteenpäin pitäisi siis käyttää varchar(max) tai vielä paremmin nvarchar(max). Tämä siis muistutuksena, kun uusia kantoja suunnittelette. Itse ainakin huomaan että text- ja ntext ovat menneet vuosien varrella selkäytimeen niin tehokkaasti, että vanhoista tavoista pitää muistaa oppia eroon. Lisätietoja täältä. |
| Window 8 kuluttaja-esiversion myötä Microsoftilta tuli saataville myös Visual Studio 11:n ensimmäinen beta. Tätä versiota on nyt tässä ehditty pari päivää tutkimaan, ja siltä näyttää että uutta opittavaa riittää taas moneksi aikaa.  Ulkoasukin on muuttunut Metro-maiseksi, ja kehitysympäristössä onkin paljon Windows 8 –kehittämiseen tarkoitettua. Esimerkiksi Debug-valikossa on nyt uusi Graphics-kohta.  Windows 8:n uudessa Consumer Previewssä en saanut uutta betaa virheettä käynnistymään, mutta nämä ongelmat olivat odotettavissa. TechDaysissä sitten lisää! |
| Käyttöliittyminen helppokäyttöisyyden parantaminen on pitkään ollut lähellä sydäntä, joten ajattelin laittaa jakoon yhden hyväksi havaitun mutta silti yksinkertaisen tekniikan seurata, miten tehtyä sovellusta todella käytetään. Ajatuksena on, että keräämällä todellista käyttötilastoa, päästään hyvin jyvälle siitä mitä toimintoja käytetään eniten. Tämä tieto takataskussa voidaan sitten optimoida erityisesti yleisimpien toimintojen käyttöä esimerkiksi vähentämällä tarvittavien klikkausten määrää. Sama strategia toimii niin web- kuin työpöytäsovelluksillekin, joskin käyttötietojen keräämisen tekniikassa voi olla eroja. Tässä käydään ajatusta läpi työpöytäsovelluksen näkökulmasta, mutta idea on siis sama web-sovelluksillekin. Ensimmäinen vaihe on määrittää sovelluksen kaikille toiminnoille numerokoodi. Koodilla sinänsä ei ole merkitystä, kunhan se vain on yksilöivä koko sovelluksen laajuudelta. Tämän jälkeen hiukan työläämpi vaihe on laittaa sovellus kirjaamaan nämä koodit aina, kun tiettyä toimintoa käytetään. Tiedot voidaan tallentaa esim. keskitettyyn sql-tietokantaan, vaikkapa siihen samaan jota sovellus muutenkin käyttää. Kerätyt tiedot voivat olla hyvinkin yksinkertaisia. Riittää, että kerätään toimintokoodi ja aikaleima, tarvittaessa myös jokin muu yksilöivä tieto, vaikkapa käyttäjänimi tai ip-osoite tähän tapaan:  Kun tällainen tieto on selvillä ja vaikkapa Excelissä taulukkona tietyltä ajanjaksolta, on siitä helppo laskea toimintojen käyttömäärät vaikkapa COUNTIF-funktiolla:
 Nyt voidaankin piirtää käppyrä, josta nähdään eniten käytetyt toiminnot:
 Seuraava vaihe olisikin sitten käydä läpi nimenomaan nämä toiminnot ohjelmassa, ja keskustella käyttäjien kanssa miten juuri näitä toimintoja voisi parantaa. Useassa sovelluksessa nimittäin pätee tuttu 80/20-sääntö, eli 80 % ajasta menee vain muutaman toiminnon kanssa. Niinpä juuri näiden toimintojen optimointi kannattaa, kunhan vain ensin tiedetään mitkä ne ovat. Pienissä sovelluksissa tämä voi olla itsestään selvää, mutta suuremmissa enää ei. Vinkki: teknisesti lokiin kirjoittamisesta ei kannata tehdä suorituskyvyn pullonkaulaa, vaan tehdä kirjaaminen vaikkapa tausta-ajossa silloin, kun sovellus on ollut käyttämättä hetken aikaa. Hitaassa verkossa synkroninen lokikantaan kirjoittaminen aina kun jotain toimintoa käytetään ei varmasti ilahduta käyttäjiä, sillä käyttö hidastuu. |
| 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! |
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 |
|
|