How do I declare then use a variable within a CDATA block?

513 Views Asked by At

I have an XSL/XML/JS file. It was written by someone who is not working here any more, and I normally only deal with SQL, so Im at a loss as to how to achieve what I need to do

Im trying to add some variables into the file within the existing CDATA block. I then use the variables within a function. However, I have tried the below and variations of this, but keep getting a syntax error within the application (Dynamics AX). Am I doing something obviously wrong here, with either how I am declaring the variables or how I am using them? These are the only changes I have made, and without these changes there are no syntax or any other issues/errors.

<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:mxm="http://schemas.microsoft.com/dynamics/2008/01/documents/MxmServInterfaceOutboundAif" 
xmlns:data="http://www.example.com/data" exclude-result-prefixes="xs xsi xsl">
  <xsl:output method="text" encoding="UTF-8" indent="no" />   
    <msxsl:script language="JScript" implements-prefix="data">    
        <![CDATA[      
      
      //Minor Repairs email address  
      var MinorsEmail = [email protected]
      //Service Dept email address
      var ServiceEmail = [email protected]
      //Major Repairs email address  
      var MajorsEmail = [email protected]

//Select appropriate email to use
function EmailFrom(fault)
      {
        var type = fault.substr(0,2);
        if (type == "MI")
          {
          var ret = MinorsEmail;
          }
        else 
          {
          var ret = concat(ServiceEmail, "; ",MajorsEmail);
          }
        return ret; 
      }

Edit: Adding quotes around the variable values has solved part of the problem. The problem now is that the CONCAT does not function as intended. I get the following error now:

Variable concat has not been declared
1

There are 1 best solutions below

0
Naz On

Thanks to @Martin Honnen, the answer was to add quote to variable values, and to use + instead of CONCAT:

<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:mxm="http://schemas.microsoft.com/dynamics/2008/01/documents/MxmServInterfaceOutboundAif" 
xmlns:data="http://www.example.com/data" exclude-result-prefixes="xs xsi xsl">
  <xsl:output method="text" encoding="UTF-8" indent="no" />   
    <msxsl:script language="JScript" implements-prefix="data">    
        <![CDATA[      
      
      //Minor Repairs email address  
      var MinorsEmail = "[email protected]"
      //Service Dept email address
      var ServiceEmail = "[email protected]"
      //Major Repairs email address  
      var MajorsEmail = "[email protected]"

//Select appropriate email to use
function EmailFrom(fault)
      {
        var type = fault.substr(0,2);
        if (type == "MI")
          {
          var ret = MinorsEmail;
          }
        else 
          {
          var ret = ServiceEmail + "; " + MajorsEmail;
          }
        return ret; 
      }