Seuraavanlainen ongelma:
Kun avaan docx-tiedoston antamalla selaimelle suoran linkin tiedostoon (esim. http://sharepoint/sites/site/Lists/DocLibrary/
Tarkoitus olisi saada aspx-sivun Page_Load-eventissä tapahtumaan uudelleenohjaus tuohon kyseiseen dokumenttiin ja käyttäytymään samoin kuin tuossa yllä kuvasin. Olen kokeillut uudelleenohjausta Response.Redirect(url) -kutsulla, mutta tuolloin ilmaantuu ensinnäkin tarpeettomasti "File download"-dialogi, ja toisekseen dokumentti aukeaa read only -tilassa, eikä dokumenttiin tehtyjä muutoksia pääse tallentamaan. Ainoastaan eri nimellä tallentaminen onnistuu, mutta tässä tapauksessa pitäisi juuri päästä muokkaamaan ja tallentamaan samalla nimellä.
Osaatteko sanoa mikä olisi oikea tapa uudelleenohjata/avata dokumentti tuossa Page_Load-eventissä siten, että dokumenttia pääsisi muokkaamaan samalla nimellä suoraan serverille, kuten suoran linkin tapauksessa?
Kielenä siis C#.
tuota varten on oma javascript funktio mossin mukana:
//esimerkissä sidottu napin OnClientClick:iin Button.OnClientClick = “editDocumentWithProgID2(‘” + SPUtility.ConcatUrls(Web.Site.Url, SPFile.Url) + “‘,”,’SharePoint.OpenDocuments’,’0′,’” + Web.Site.Url + “‘,’0′);”;
Suoralla linkillä tiedostoa yritetään tallentaa.
eli esim. document ready funkkarissa kutsut
editDocumentWithProgID2('/sites/site/Lists/DocLibrary/DocumentSet/testi.docx', '', 'SharePoint.OpenDocuments', '1', 'http://sharepoint/sites/site', '0')
OK. Pystyisitkö heittämään esimerkkikoodin vaikkapa aspx-sivusta ja mihin kohtaan siinä tuo koodi laitetaan. Olen aika aloittelija javascriptin kanssa. Itseasiassa muodostan linkin dokumenttiin ohjelmallisesti sivun code behind -tiedostossa Page_Load -metodissa. Eli tarvisin myös vinkkiä miten voin välittää tuon linkin javascript-funktiolle. Olisikohan tuo javascript-koodi mahdollista tehdä kokonaan code behind -tiedostoon? Joku mahd. yksinkertainen esimerkki tästä auttaisi hahmottamaan asiaa :)
No, testaappa vaikka tätä:
//Page_Loadiin... string Script = "<script>editDocumentWithProgID2('/sites/site/Lists/DocLibrary/DocumentSet/testi.docx', '', 'SharePoint.OpenDocuments', '1', 'http://sharepoint/sites/site', '0');</script>"; string ScriptName = "TestScript"; ClientScriptManager CSM = Page.ClientScript; CSM.RegisterStartupScript(this.GetType(), ScriptName, Script);
Hmm.. ei tapahdu mitään tuolla koodilla (sivu vain latautuu, mutta ei Wordia). Mutta esim. alert-funktio kyllä toimii ao. koodilla:
string script = "<script>alert('Hello');</script>"; string scriptName = "TestScript"; ClientScriptManager CSM = Page.ClientScript; CSM.RegisterStartupScript(this.GetType(), scriptName, script);
Eli varmaan tuossa editDocumentWithProgID2-funkkarissa jotain ongelmaa. Polku dokkariin on ainakin ok. Mistäköhän voisi johtua ettei toimi? Tunnistaako SharePoint 2010 tuon funktion automaattisesti?
Sain nyt dokkarin avautumaan halutusti ao. koodilla. Ainakin tuo _spBodyOnLoadFuntionNames on tärkeä jotta master-sivu saa tiedon suoritettavista funktioista. Siitä mm. täällä. Kiitos neuvoista jälleen!
protected void Page_Load(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); sb.Append("<script type='text/javascript' language='javascript'>"); sb.Append("function FunctionName() {"); sb.Append("g_varSkipRefreshOnFocus = true;"); // estää sivun turhan refreshauksen dokkarin sulkemisen jälkeen sb.Append("editDocumentWithProgID2('/sites/site/Lists/Library/test.docx', '', 'SharePoint.OpenDocuments', '0', 'http://sharepoint/sites/site', '0');"); sb.Append("}"); sb.Append("_spBodyOnLoadFunctionNames.push('FunctionName');"); // sb.Append("</script>"); ClientScriptManager CSM = Page.ClientScript; CSM.RegisterStartupScript(this.GetType(), "testiskripti", sb.ToString()); }
luultavasti syy miksi jouduit noin tekemään, johtuu siitä että SP.js (eiköhän tuo funkkari tule siinä mukana?) ei ollut latautunut vielä kun funktiokutsua yritettiin. luultavasti jos olisit laittanut window.load:in sisälle, funktio olisi toiminut.
Mutta pääasia että nyt toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.