Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 

HANA系统的XS引擎提供了定时执行你的任务的功能。你可以让HANA定期地完成一些你指定的操作。

你将在本文中看到如何编写一个简单的XS应用并调度一个XS Job来执行它。这个应用会向特定的表里插入一条记录。

1. 前提条件

1.1 这个功能从HANA SPS07开始有效,所以请确保你的HANA是Revision 70之后的版本。

1.2 确保XSEngine正常运行。
在你的Web Browser里输入http://<Web_Server_Host>:80<HANA_instance>/sap/hana/xs/admin/,如果能看到下面的界面就说明XSEngine一切正常。

1.3 HANA上的必要配置
你可以把下面这些和XSengine相关的角色赋给用户(这里我们使用的用户是"DEMO_USER")。

该用户的Schema权限也要赋给用户_SYS_REPO。

在xsengine.ini里添加section "schedule"和参数"enabled"如下。

如果需要向表里写数据,你必须把"sqlscript mode"改成"UNSECURE"(如下图),否则你只能在procedure里使用select语句。

2. Procedure

2.1 新建XS project。

当要给project指定一个workspace时,你可以新建一个workspace或者使用缺省的workspace。
这里我们使用缺省的workspace。

你可以在Project Explorer里看到新建的project。

同时你也可以在Web Browser里看到它。

2.2 新建数据库object。
这里我们新建个表来做测试。

2.3 新建XS JavaScript和XS Job。

按下面的步骤新建XS JavaScript。

.xsjs文件生成之后,如下新建一个JavaScript function。

我们向表DEMO_TABLE里插入一条包含时间戳的记录。

function my_js() {

    var sql = "INSERT INTO DEMO_USER.DEMO_TABLE VALUES ('inserted by javascript job', NOW())";

    var conn = $.db.getConnection();

    var pstmt = conn.prepareStatement(sql);

    pstmt.execute();

    conn.commit();

    conn.close();

}

然后新建一个XS Job。

.xsjob文件生成之后,可以在XS Job文件里定义任务了。

在"action"里指定刚才新建的XS JavaScript文件里的function。

在"schedules"中指定调度时间,其中的"xscron"同Linux环境的"crontab"的语法类似,这里我们指定每5秒钟执行一次。

{

    "description": "my first JS job",

    "action": "XS_JOB_DEMO:my_js.xsjs::my_js",

    "schedules": [

        {

            "description": "run every 5 seconds",

            "xscron": "* * * * * * 0:59/5"

        }

    ]

}

2.4 新建HANA Procedure和XS job。

按下面的步骤新建XS Procedure。

.hdbprocedure文件生成之后,如下新建一个HANA Procedure。

我们也向表DEMO_TABLE里插入一条包含时间戳的记录。

PROCEDURE "DEMO_USER"."XS_JOB_DEMO::my_procedure" ( )

    LANGUAGE SQLSCRIPT

    SQL SECURITY INVOKER

    DEFAULT SCHEMA DEMO_USER

    AS

BEGIN

/*****************************

    Write your procedure logic

*****************************/

    INSERT INTO DEMO_TABLE VALUES('inserted by procedure job', NOW());

END;

然后同样新建一个XS Job来执行这个Procedure。

请注意“action”的语法,和刚才的XS JavaScript是不同的。
这里我们指定每10秒钟执行一次。

{

    "description": "my first Procedure job",

    "action": "XS_JOB_DEMO::my_procedure",

    "schedules": [

        {

            "description": "run every 10 seconds",

            "xscron": "* * * * * * 0:59/10"

        }

    ]

}

2.5 在Web Browser里启动任务。

你可以在HANA XS Administration Tool里看到刚才新建的两个XS Job。

输入"User"和"Locale",勾选"Active",然后 按下"Save"之后XS Job就开始执行了。

你也可以在此监控任务。

从下图可见JavaScript的任务每5秒执行一次,HANA Procedure的任务每10秒执行一次。

2 Comments