在otrs中获取客户用户的组
Get the groups of a customeruser in otrs
我正在使用应用程序扩展 OTRS,需要获取客户用户所在的组。我想通过与 SessionGet-Endpoint (https://doc.otrs.com/doc/api/otrs/6.0/Perl/Kernel/GenericInterface/Operation/Session/SessionGet.pm.html)
通信来完成此操作
SessionGet 的端点 returns 很多关于用户的信息,但不是他所在的组。我不是在谈论可以登录到 otrs 后端的代理,而是客户用户。
我正在使用 OTRS 6,因为它是 docker 中唯一可用的。我在后端创建了 REST 端点,一切正常。有一个新功能为什么我需要获取有关组的信息。
查看了 otrs 系统配置,但无法确定是否可以在响应中包含此信息。
虽然我是一名程序员,但因为...原因我不想写perl。
我查看了在 /opt/otrs/Kernel/GenericInterface/Operation/Session/SessionGet.pm
处处理传入请求的文件,并跟踪了对从 /opt/otrs/Kernel/System/AuthSession/DB.pm
中的数据库收集信息的实际文件的调用。在第 169 行中写了 SQL-statement 所以我想到我可以扩展它来获取组的信息,因为正如我所说,我不想写 perl...
来自此端点的典型响应如下所示:
{
"SessionData": [
{
"Value": "2",
"Key": "ChangeBy"
},
{
"Value": "2019-06-26 13:43:18",
"Key": "ChangeTime"
},
{
"Value": "2",
"Key": "CreateBy"
},
{
"Value": "2019-06-26 13:43:18",
"Key": "CreateTime"
},
{
"Value": "XXX",
"Key": "CustomerCompanyCity"
},
{
"Value": "",
"Key": "CustomerCompanyComment"
}
...
}
插入另一个带有组 ID 的 Value-Key-pair 是一件好事。 SQL-statement 仅查询一个 table $Self->{SessionTable}
,主要称为 otrs.sessions
。
我使用以下资源创建了一个 SQL-statement,它使用所需的信息扩展了现有的 SQL-statement。你可以在这里找到它:
$DBObject->Prepare(
SQL => "
(
SELECT id, data_key, data_value, serialized FROM $Self->{SessionTable} WHERE session_id = ? ORDER BY id ASC
)
UNION ALL
(
SELECT
(
SELECT MAX(id) FROM $Self->{SessionTable} WHERE session_id = ?
) +1
AS id,
'UserGroupsID' AS data_key,
(
SELECT GROUP_CONCAT(DISTINCT group_id SEPARATOR ', ')
FROM otrs.group_customer_user
WHERE user_id =
(
SELECT data_value
FROM $Self->{SessionTable}
WHERE session_id = ?
AND data_key = 'UserID'
ORDER BY id ASC
)
)
AS data_value,
0 AS serialized
)",
Bind => [ $Param{SessionID}, $Param{SessionID}, $Param{SessionID} ],
);
任何需要获取客户用户组的人都可以用提供的代码替换现有代码。至少在我的情况下它工作得很好。现在,我得到了预期的 key-value-pair:
{
"Value": "10, 11, 6, 7, 8, 9",
"Key": "UserGroupsID"
},
我使用了以下资源:
- Adding the results of multiple SQL selects?
- Can I concatenate multiple MySQL rows into one field?
- Add row to query result using select
编码愉快,
妮可
我正在使用应用程序扩展 OTRS,需要获取客户用户所在的组。我想通过与 SessionGet-Endpoint (https://doc.otrs.com/doc/api/otrs/6.0/Perl/Kernel/GenericInterface/Operation/Session/SessionGet.pm.html)
通信来完成此操作SessionGet 的端点 returns 很多关于用户的信息,但不是他所在的组。我不是在谈论可以登录到 otrs 后端的代理,而是客户用户。
我正在使用 OTRS 6,因为它是 docker 中唯一可用的。我在后端创建了 REST 端点,一切正常。有一个新功能为什么我需要获取有关组的信息。
查看了 otrs 系统配置,但无法确定是否可以在响应中包含此信息。
虽然我是一名程序员,但因为...原因我不想写perl。
我查看了在 /opt/otrs/Kernel/GenericInterface/Operation/Session/SessionGet.pm
处处理传入请求的文件,并跟踪了对从 /opt/otrs/Kernel/System/AuthSession/DB.pm
中的数据库收集信息的实际文件的调用。在第 169 行中写了 SQL-statement 所以我想到我可以扩展它来获取组的信息,因为正如我所说,我不想写 perl...
来自此端点的典型响应如下所示:
{
"SessionData": [
{
"Value": "2",
"Key": "ChangeBy"
},
{
"Value": "2019-06-26 13:43:18",
"Key": "ChangeTime"
},
{
"Value": "2",
"Key": "CreateBy"
},
{
"Value": "2019-06-26 13:43:18",
"Key": "CreateTime"
},
{
"Value": "XXX",
"Key": "CustomerCompanyCity"
},
{
"Value": "",
"Key": "CustomerCompanyComment"
}
...
}
插入另一个带有组 ID 的 Value-Key-pair 是一件好事。 SQL-statement 仅查询一个 table $Self->{SessionTable}
,主要称为 otrs.sessions
。
我使用以下资源创建了一个 SQL-statement,它使用所需的信息扩展了现有的 SQL-statement。你可以在这里找到它:
$DBObject->Prepare(
SQL => "
(
SELECT id, data_key, data_value, serialized FROM $Self->{SessionTable} WHERE session_id = ? ORDER BY id ASC
)
UNION ALL
(
SELECT
(
SELECT MAX(id) FROM $Self->{SessionTable} WHERE session_id = ?
) +1
AS id,
'UserGroupsID' AS data_key,
(
SELECT GROUP_CONCAT(DISTINCT group_id SEPARATOR ', ')
FROM otrs.group_customer_user
WHERE user_id =
(
SELECT data_value
FROM $Self->{SessionTable}
WHERE session_id = ?
AND data_key = 'UserID'
ORDER BY id ASC
)
)
AS data_value,
0 AS serialized
)",
Bind => [ $Param{SessionID}, $Param{SessionID}, $Param{SessionID} ],
);
任何需要获取客户用户组的人都可以用提供的代码替换现有代码。至少在我的情况下它工作得很好。现在,我得到了预期的 key-value-pair:
{
"Value": "10, 11, 6, 7, 8, 9",
"Key": "UserGroupsID"
},
我使用了以下资源:
- Adding the results of multiple SQL selects?
- Can I concatenate multiple MySQL rows into one field?
- Add row to query result using select
编码愉快,
妮可