连接到 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 不能用作缺省队列提供程序,同样也不能用作工作流程的队列。
依赖关系
- 数据库连接。 此命令支持以下数据库连接:
- 连接到 MySQL (
mysqlConnect) - 连接到 ODBC (
odbcConnect) - 连接到 Oracle (
oracleConnect) - 连接到 PostgreSQL (
postgreConnect) - 连接到 SQLite (
sqliteConnect) - 连接到 SQL Server (
sqlServerConnect)
- 连接到 MySQL (
- 具有
status列和列标识的已填充数据库表。 - 如果启用
Storaged Configurations参数,那么必须在 IBM RPA Control Center中具有先前配置的队列提供程序。 请参阅队列提供程序以获取更多信息。
输入参数
下表显示了此命令中提供的输入参数的列表。 在表中,您可以看到在 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:
以下示例类似于第一个示例,但它从数据库连接中获取两个不同的队列,并使用列 name 和 modelname 按升序重新排列队列。
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中的其他记录,那么将删除这些记录。 请使用其他列名来记录其他状态数据。