连接到 SQL MQ

连接到数据库,以将表用作消息队列提供程序。

命令可用性: 本地 IBM RPA SaaS 和 IBM RPA

描述

此命令使用数据库连接来将表用作消息队列提供程序。 存在支持使用查询过滤器以及使用特定列标识的其他设置。 您可以通过启用 Storaged Configurations 参数在 IBM RPA Control Center 中配置队列提供程序,也可以通过使数据库处于禁用状态来手动配置数据库。

脚本语法

IBM RPA 的专有脚本语言的语法与其他编程语言类似。 该脚本语法在脚本文件中定义命令的语法。 您可以在 IBM RPA Studio的 脚本 方式下使用此语法。

connectSqlMQ --queueprovider(String) --connection(DbConnection) --objectname(String) --columnid(String) [--filter(String)] [--orderby(String)] [--fromconfiguration(Boolean)] [--timeout(TimeSpan)] (Boolean)=success (QueueConnection)=value

系统队列提供程序

SQL MQ 不能用作缺省队列提供程序,同样也不能用作工作流程的队列。

依赖关系

输入参数

下表显示了此命令中提供的输入参数的列表。 在表中,您可以看到在 IBM RPA Studio的脚本方式及其 Designer 方式等效标签中工作时的参数名称。

设计器方式标签 脚本方式名称 必需的 接受的变量类型 描述
队列提供程序 queueprovider Required when the Storaged Configurations parameter is enabled Text 连接到在 IBM RPA Control Center中配置的队列提供程序。 仅当队列提供程序已在 IBM RPA Control Center中注册时,此选项才有效。
连接 connection Required when the Storaged Configurations parameter is not enabled Database Connection 数据库连接变量。
数据库名称 objectname Required when the Storaged Configurations parameter is not enabled Text 将作为队列使用的数据库的名称。 数据库必须包含要用作队列项的表记录。
标识列 columnid Required when the Storaged Configurations parameter is not enabled Text 将用作标识的表列的名称。 此列将用于标识队列中的项。

注:缺省情况下,此命令使用数据库列 status 来注册每个项的状态。 请勿将 status 用作其他任何对象的列名。
查询过滤器 filter Optional Text 过滤队列中的项。 您可以使用等同于 SQL WHERE 语句的表达式。
OrderBy 查询 orderby Optional Text 对队列中的项进行分类。 您可以使用等同于 SQL ORDER BY 语句的表达式。 此选项根据所选的分类方法重新排列队列中的项:ASC 表示升序,DESC 表示降序。
存储的配置 fromconfiguration Optional Boolean 启用后,您可以选择先前在 IBM RPA Control Center中配置的队列提供程序。
Timeout timeout Optional Time Span 建立与数据库的连接所用的最长等待时间。

如果未定义任何值,那么将使用缺省超时值 5 秒。 它还可以使用设置超时 (setTimeout) 命令中定义的超时值。

输出参数

设计器方式标签 脚本方式名称 接受的变量类型 描述
成功 success Boolean 如果成功建立与数据库的连接,那么返回 True;否则返回 False
连接 value Queue Connection 通过与队列提供程序的连接返回一个变量。

示例

示例 1:
以下示例使用 Connect to SQLite (sqliteConnect) 命令创建并连接到 SQLite 数据库,并使用 Connect to SQL MQ 命令将数据库用作队列提供程序。 之后会从队列中除去第一个项。

defVar --name myDocs --type String
defVar --name clientsDatabase --type DbConnection
defVar --name queueConnection --type QueueConnection
defVar --name clientQueue --type MessageQueue
defVar --name dbExists --type Boolean
defVar --name dbFileName --type String
defVar --name success --type Boolean
// Gets the folder to save the database file
getSpecialFolder --folder "MyDocuments" myDocs=value
// Sets a variable to hold the path to the database file
setVar --name "${dbFileName}" --value "${myDocs}\\clients.db"
// Checks if a file with the same name already exists
ifFile --file "${dbFileName}" dbExists=value
// If the file does not exist, it creates a new SQLite database using SQL statements.
// Otherwise it connects to the existing database file.
if --left "${dbExists}" --operator "Is_True"
	sqliteConnect --connectionString "Data Source=${dbFileName};Version=3;" clientsDatabase=connection
else
	sqliteConnect --createNew  --sql "BEGIN TRANSACTION;\r\nCREATE TABLE IF NOT EXISTS \"Clients\" (\r\n \"name\" TEXT,\r\n \"ID\" INTEGER UNIQUE,\r\n \"car\" TEXT,\r\n \"price\" NUMERIC,\r\n \"status\" TEXT,\r\n PRIMARY KEY(\"ID\")\r\n);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'John Doe\',1,\'Field March\',27000,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'James Smith\',2,\'Ponsch 9000\',99000,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'Edna Campbell\',3,\'Tesseract 3300\',21700,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'Steve Bischoff\',4,\'Camarade 3214\',23800,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'Debra Robinson\',5,\'Hummingbird 2021\',24970,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"price\",\"status\") VALUES (\'Lynn Hayes\',6,\'F3 116\',30100,NULL);\r\nCOMMIT;" --path "${dbFileName}" clientsDatabase=connection
endIf
// Connects to the SQLite database using it as a queue provider
connectSqlMQ --connection ${clientsDatabase} --objectname Clients --columnid ID queueConnection=value
// Gets the queue from the database. The queue's name corresponds to the database table name
getQueue --connection ${queueConnection} --name Clients clientQueue=value
--type "Info"
// Dequeues the item from the queue
dequeue --collection "${clientQueue}" success=success
logMessage --message "Item dequeued: ${success}" --type "Info"

示例 2:
以下示例类似于第一个示例,但它从数据库连接中获取两个不同的队列,并使用列 namemodelname 按升序重新排列队列。

defVar --name myDocs --type String
defVar --name clientsDatabase --type DbConnection
defVar --name queueConnection --type QueueConnection
defVar --name clientQueue --type MessageQueue
defVar --name dbExists --type Boolean
defVar --name dbFileName --type String
defVar --name success --type Boolean
defVar --name modelsqueue --type MessageQueue
defVar --name modelsConnection --type QueueConnection
// Gets the folder to save the database file
getSpecialFolder --folder "MyDocuments" myDocs=value
// Sets a variable to hold the path to the database file
setVar --name "${dbFileName}" --value "${myDocs}\\models.db"
// Checks if a file with the same name already exists
ifFile --file "${dbFileName}" dbExists=value
// If the file does not exist, it creates a new SQLite database using SQL statements.
// Otherwise it connects to the existing database file.
if --left "${dbExists}" --operator "Is_True"
	sqliteConnect --connectionString "Data Source=${dbFileName};Version=3;" clientsDatabase=connection
else
	sqliteConnect --createNew  --sql "BEGIN TRANSACTION;\r\nCREATE TABLE IF NOT EXISTS \"Models\" (\r\n \"id\" INTEGER UNIQUE,\r\n \"modelname\" TEXT,\r\n \"price\" NUMERIC,\r\n \"status\" TEXT,\r\n PRIMARY KEY(\"id\")\r\n);\r\nCREATE TABLE IF NOT EXISTS \"Clients\" (\r\n \"name\" TEXT,\r\n \"ID\" INTEGER UNIQUE,\r\n \"car\" TEXT,\r\n \"status\" TEXT,\r\n PRIMARY KEY(\"ID\")\r\n);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (1,\'Hummingbird 2021\',24970,NULL);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (2,\'Ponsch 9000\',99000,NULL);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (3,\'Tesseract 3300\',21700,NULL);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (4,\'Camarade 3214\',23800,NULL);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (5,\'F3 116\',30100,NULL);\r\nINSERT INTO \"Models\" (\"id\",\"modelname\",\"price\",\"status\") VALUES (6,\'Field March\',27000,NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'John Doe\',1,\'Field March\',NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'James Smith\',2,\'Ponsch 9000\',NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'Edna Campbell\',3,\'Tesseract 3300\',NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'Steve Bischoff\',4,\'Camarade 3214\',NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'Debra Robinson\',5,\'Hummingbird 2021\',NULL);\r\nINSERT INTO \"Clients\" (\"name\",\"ID\",\"car\",\"status\") VALUES (\'Lynn Hayes\',6,\'F3 116\',NULL);\r\nCOMMIT;\r\n" --path "${dbFileName}" clientsDatabase=connection
endIf
// Connects to the SQLite database using it as a queue provider
connectSqlMQ --connection ${clientsDatabase} --objectname Clients --columnid ID --orderby "name asc" queueConnection=value
connectSqlMQ --connection ${clientsDatabase} --objectname Models --columnid id --orderby "modelname asc" modelsConnection=value
// Gets the Clients queue from the database. The queue's name corresponds to the database table name
getQueue --connection ${queueConnection} --name Clients clientQueue=value
// Dequeues the first item from the Clients queue
dequeue --collection "${clientQueue}" success=success
logMessage --message "Item dequeued: ${success}" --type "Info"
// Gets the Models queue from the database.
getQueue --connection ${modelsConnection} --name Models modelsqueue=value
// Dequeues the first item from the Models queue
dequeue --collection "${modelsqueue}" success=success
logMessage --message "Item dequeued: ${success}" --type "Info"

限制

  • 此命令不会创建新队列。 它将数据库表中的项用作队列消息。
  • 该表必须包含名为 status 的列,且该表用于记录该项是否为 Dequeued。 如果该表包含 status 中的其他记录,那么将删除这些记录。 请使用其他列名来记录其他状态数据。