Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Ongelma docx-tiedoston avaamisessa

Palvy [10.09.2012 22:58:19]

#

Seuraavanlainen ongelma:

Kun avaan docx-tiedoston antamalla selaimelle suoran linkin tiedostoon (esim. http://sharepoint/sites/site/Lists/DocLibrary/DocumentSet/testi.docx), avautuu dokumentti niinkuin haluan, eli aukeaa Word, jossa pääsen editoimaan dokumenttia (klikkaamalla Wordissa "Enable Editing") ja tallentamaan muutokset suoraan tuonne serverille samalla tiedostonimellä.

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

groovyb [11.09.2012 10:47:44]

#

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')

Palvy [11.09.2012 17:53:34]

#

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 :)

groovyb [11.09.2012 18:53:06]

#

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);

Palvy [11.09.2012 21:17:31]

#

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?

Palvy [12.09.2012 01:06:32]

#

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

groovyb [12.09.2012 09:40:19]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta