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

时间:2017-01-29 02:05:19

标签: php soap otrs

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

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

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

1 个答案:

答案 0 :(得分:0)

最后我设法让它发挥作用。我在这里发布我的解决方案。

  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:

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

    1. 使用$ value设置故障单的动态字段(假设已经存在ticketId的故障单):

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

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

      有没有人知道为什么OTRS中缺少这两行?是否会在新版OTRS中修复?