Avatar billede dk_akj Nybegynder
06. oktober 2008 - 15:57 Der er 7 kommentarer og
1 løsning

Overføre variabel fra C#

Hej Experter,

Er der en måde hvorpå jeg kan sætte bVisible sand/falsk fra c# ??
Det er i wss jeg skal bruge det.

//akj


    <XSL>
<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal">
    <xsl:output method="html" indent="no"/>
    <xsl:decimal-format NaN=""/>
    <xsl:param name="dvt_apos">'</xsl:param>
    <xsl:variable name="dvt_1_automode">0</xsl:variable>
    <xsl:variable name="bVisible">true</xsl:variable>   
    <xsl:template match="/">
        <xsl:call-template name="dvt_1"/>
Avatar billede arne_v Ekspert
12. oktober 2008 - 04:34 #1
Jeg ville vende den om.

Du kan lave en metode i C# og kalde den i din XSLT.

Jeg vil tro at det kan løse dit problem.
Avatar billede dk_akj Nybegynder
14. oktober 2008 - 09:50 #2
Hej Arne,

Du skulle vel ikke ligge inde med et link til et eksempel ?

//akj
Avatar billede arne_v Ekspert
14. oktober 2008 - 15:31 #3
Jeg lavede dette her til et andet spoergsmaal:

using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace E
{
    public class Calcer
    {
        public int Fac(int n)
        {
            if(n > 1)
            {
                return n * Fac(n - 1) ;
            }
            else
            {
                return 1;
            }
        }
        public int Sum(XPathNavigator xpn)
        {
            int sum = 0;
            foreach(XPathNavigator num in xpn.SelectChildren(XPathNodeType.Element))
            {
                sum += Fac(num.Select("child::*").Current.ValueAsInt);
            }
            return sum;
        }
    }
    public class MainClass
    {
        public static void Main(string[] args)
        {
            string input =
@"<allnum>
  <num>1</num>
  <num>2</num>
  <num>3</num>
  <num>4</num>
  <num>5</num>
</allnum>";
            string transform =
@"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:ms='urn:schemas-microsoft-com:xslt'
                xmlns:csinline='urn:arne:csinline'
                xmlns:cs='urn:arne:cs'
                version='1.0'>
<ms:script language='C#' implements-prefix='csinline'>
<![CDATA[
    public string Header()
    {
        return ""Faculty:"";
    }
  ]]>
</ms:script>
<xsl:template match='/'>
<xsl:value-of select='csinline:Header()'/>
<xsl:for-each select='//num'>
fac(<xsl:value-of select='.'/>)=<xsl:value-of select='cs:Fac(number(.))'/>
</xsl:for-each>
Sum=<xsl:value-of select='cs:Sum(//allnum)'/>
</xsl:template>
</xsl:stylesheet>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(input);
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(new XmlTextReader(new StringReader(transform)), new XsltSettings(true, true), null);
            StringWriter sw = new StringWriter();
            XmlTextWriter wrt = new XmlTextWriter(sw);
            wrt.Formatting = Formatting.Indented;
            XsltArgumentList xal = new XsltArgumentList();
            xal.AddExtensionObject("urn:arne:cs", new Calcer());
            xslt.Transform(doc, xal, wrt);
            Console.WriteLine(sw.ToString());
        }
    }
}
Avatar billede dk_akj Nybegynder
15. oktober 2008 - 11:27 #4
Hej,

Hvis jeg indsætter:

<![CDATA[
    public string Header()
    {
        return ""Faculty:"";
    }
  ]]>

<xsl:value-of select='user:Header()'/>


Først fik jeg denne fejl:
This Web Part does not have a valid XSLT stylesheet:
Error: Reference to undeclared namespace prefix: 'ms'.

Den klarede jeg ved at lave det om fra:
<ms:script language='C#' implements-prefix='user'>
Til:
<msxsl:script language='C#' implements-prefix='user'>

Men desværre render jeg blot i endnu en fejl:
SharePoint Designer cannot render the XSLT in this Data View. Try to undo your changes or re-insert the Data View.Failed setting processor stylesheet : 0x80004005 : Security settings do not allow the execution of script code within this stylesheet.

Det skulle kunne tillades med:
doc.setProperty("AllowXsltScript", true);
(fundet på msdn:  http://msdn.microsoft.com/en-us/library/ms763800(VS.85).aspx)

Men hvordan får jeg det lagt ind i "mit" kode:
<xsl:stylesheet  xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:ddwrt2="urn:frontpage:internal" xmlns:user="urn:user" >

//akj
Avatar billede arne_v Ekspert
16. oktober 2008 - 02:26 #5
Jeg aner intet om SharePoint.
Avatar billede dk_akj Nybegynder
20. oktober 2008 - 21:03 #6
wau, jeg troede du vidste alt om alt :-)

Ser lige om der kommer nogle forbi der ved noget om det.

//akj
Avatar billede dk_akj Nybegynder
19. august 2010 - 07:44 #7
Arne, vil du læggge et svar ?

//akj
Avatar billede arne_v Ekspert
19. august 2010 - 15:50 #8
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester