通过 SOAP 更新 OTRS 中的动态字段

Update dynamic fields in OTRS over SOAP

我花了几天时间尝试通过 SOAP 在 OTRS 中创建或更新工单的动态字段,但不幸的是没有成功。我基本上尝试了所有命令变体:

$response = $soapclient->__soapCall("Dispatch", array("user", "password",
                                    "TicketObject", "TicketUpdate",
                                    "DynamicField", array("name" => "fieldName", "value" => "Example"));

我倾向于认为这是不可能的(OTRS 版本 5.0.14)。我错了吗?有没有办法通过 SOAP 和 php 更新票证的动态字段?

最后我设法使它工作。我 post 这是我的解决方案。

  1. 首先,我们必须在 OTRS 文件 bin/cgi-bin/rpc.pl 中修复(错误?)并添加到 "dispatch" 子例程中这两行:

    $CommonObject{DynamicField} = $Kernel::OM->Get('Kernel::System::DynamicField'); $CommonObject{TicketDynamicObject}=$Kernel::OM->Get('Kernel::System::DynamicFieldValue');

  2. 然后我们要得到想要的动态字段的动态字段ID:

$dynfield = $soap_client->__soapCall("Dispatch", array($user, $pass, "DynamicField", "DynamicFieldGet", "Name", $dynamic_field_name));

  1. 为工单设置动态字段(假设 ticketId 的工单已经存在)$value:

    $result = $soap_client->__soapCall("Dispatch", array($user, $pass, "TicketDynamicObject", "ValueSet", "FieldID", $dynfield->ID, "ObjectID", $ticketId, "Value", array("0" => array("ValueText" => (string) $value)), "UserID", $userId, ));

如果创建了工单,那么我们随后可以为该工单设置动态字段。

有人知道为什么 OTRS 中缺少这两行吗?它会在新版本的 OTRS 中修复吗?