【问题标题】:How do I declare then use a variable within a CDATA block?如何声明然后在 CDATA 块中使用变量?
【发布时间】:2021-01-02 01:57:03
【问题描述】:

我有一个 XSL/XML/JS 文件。它是由一个不再在这里工作的人写的,我通常只处理 SQL,所以我不知道如何实现我需要做的事情

我正在尝试将一些变量添加到现有 CDATA 块中的文件中。然后我在函数中使用变量。但是,我尝试了以下方法和变体,但在应用程序(Dynamics AX)中不断出现语法错误。我是否在这里做一些明显错误的事情,无论是我如何声明变量或我如何使用它们?这些是我所做的唯一更改,没有这些更改就没有语法或任何其他问题/错误。

<?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 = xxx@domain.com
      //Service Dept email address
      var ServiceEmail = yyy@domain.com
      //Major Repairs email address  
      var MajorsEmail = zzz@domain.com

//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; 
      }

编辑:在变量值周围添加引号已经解决了部分问题。现在的问题是 CONCAT 没有按预期运行。我现在收到以下错误:

Variable concat has not been declared

【问题讨论】:

  • 如果这些电子邮件地址应该是 JavaScript 字符串,则可以引用您的字符串值。
  • 您能否edit 提问以添加有关如何在 Dynamics AX 中使用此 xml 文件的信息?我很惊讶为什么文件原样不会产生任何问题,因为 CDATA 块中的代码无效x++ 代码而且我不知道 AX 2009 应该如何执行 Java Script(或者它是 JScript?)代码.
  • 感谢@MartinHonnen 在字符串值中添加引号已解决部分问题。我现在唯一的问题是功能。如果 ELSE 适用,则 CONCAT 不起作用 - 我收到错误消息“未声明变量 concat”。有什么想法吗?
  • 嗨@FH-Inway,您可以在基本 - 设置 - 应用程序集成框架 - XSLT 存储库中添加 XSL 转换。是这个意思吗?
  • JavaScript 中的字符串连接是通过 + 运算符 ServiceEmail + "; " + MajorsEmail 完成的

标签: javascript xml xslt dynamics-ax-2009


【解决方案1】:

感谢@Martin Honnen,答案是为变量值添加引号,并使用 + 代替 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 = "xxx@domain.com"
      //Service Dept email address
      var ServiceEmail = "yyy@domain.com"
      //Major Repairs email address  
      var MajorsEmail = "zzz@domain.com"

//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; 
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多