【问题标题】:How to get what data-model provide in Teamcity email notification freemarker如何获取 Teamcity 电子邮件通知 freemarker 中提供的数据模型
【发布时间】:2017-08-02 12:58:44
【问题描述】:

我正在为 Teamcity 通知电子邮件进行自定义,我正在关注 Customizing Notifications。据此,Teamcity 提供的数据模型是

<#-- @ftlvariable name="project" type="jetbrains.buildServer.serverSide.SProject" -->
<#-- @ftlvariable name="buildType" type="jetbrains.buildServer.serverSide.SBuildType" -->
<#-- @ftlvariable name="build" type="jetbrains.buildServer.serverSide.SBuild" -->
<#-- @ftlvariable name="agentName" type="java.lang.String" -->
<#-- @ftlvariable name="buildServer" type="jetbrains.buildServer.serverSide.SBuildServer" -->
<#-- @ftlvariable name="webLinks" type="jetbrains.buildServer.serverSide.WebLinks" -->

<#-- @ftlvariable name="var.buildFailedTestsErrors" type="java.lang.String" -->
<#-- @ftlvariable name="var.buildShortStatusDescription" type="java.lang.String" -->
<#-- @ftlvariable name="var.buildChanges" type="java.lang.String" -->
<#-- @ftlvariable name="var.buildCompilationErrors" type="java.lang.String" -->

<#-- @ftlvariable name="link.editNotificationsLink" type="java.lang.String" -->
<#-- @ftlvariable name="link.buildResultsLink" type="java.lang.String" -->
<#-- @ftlvariable name="link.buildChangesLink" type="java.lang.String" -->
<#-- @ftlvariable name="responsibility" type="jetbrains.buildServer.responsibility.ResponsibilityEntry" -->
<#-- @ftlvariable name="oldResponsibility" type="jetbrains.buildServer.responsibility.ResponsibilityEntry" -->

据说

代码可以在 IntelliJ IDEA 中用于编辑模板 完成

我没有 IntelliJ IDEA,所以我想知道是否有其他方法可以检查每个数据模型中的内容?

为了您的信息,我研究了如何在Getting Started下创建数据模型和模板。

AFAK,如果导出到模板的对象符合JavaBean规范,我可以通过变量名获取属性。例如,对于像下面这样的类,

/**
 * Product bean; note that it must be a public class!
 */
public class Product {

    private String url;
    private String name;

    // As per the JavaBeans spec., this defines the "url" bean property
    // It must be public!
    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    // As per the JavaBean spec., this defines the "name" bean property
    // It must be public!
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

我可以得到如下data-model的属性,

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

但是,为什么 Teamcity 通知模板中的build.name 可以工作?我没有看到getName 方法或name 变量http://javadoc.jetbrains.net/teamcity/openapi/8.1/jetbrains/buildServer/serverSide/SBuildType.html

【问题讨论】:

    标签: java teamcity freemarker


    【解决方案1】:

    SBuiltTypeBuildTypeIdentity 继承getName(),这就是build.name 起作用的原因。

    【讨论】:

    • 感谢您的回复。我明白了这里有什么意义。但是,我可以在 SBuiltType 中看到 getExtendedName(),为什么 build.extendedName 在模板中没有返回任何内容。
    • 我的第一个想法是getExtendedName() 返回null,但它不应该根据javadoc。是build.getExtendedName??true(也就是说,我们有没有那个方法)?
    • 嗯,不知道为什么,这次成功获取了build.extendedName的值。感谢您的帮助。
    猜你喜欢
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多