Jira PHP SOAP обновление не работает - PullRequest
2 голосов
/ 26 сентября 2011

Я пытался обновить компонент для выпуска в Jira с использованием SOAP в PHP, он не выдавал никаких исключений, он возвращал isuue, но компонент никогда не обновлялся.

Есть идеи?

вот мой пример кода:

$myIssue="";

$myIssue['components'][] = array("id" => "10769", "name" => "component name");

$soap->updateIssue($auth,"ISSUEKEY", $myIssue);

Он просто возвращает проблему без каких-либо изменений в компоненте.

Это то, что отправляется из php, когда я печатаю эту переменную:

Array
(
    [components] => Array
        (
            [0] => Array
                (
                    [id] => 10769
                    [name] => component name
                )
        )
)

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Я не PHP-разработчик, но я думаю, что этот код:

arrayToObject(array("id" => "10769", "name" => "component name")

Результаты таковы:

{
    id: '10769',
    name: 'component name'
}

Я прав?

Какойприведет к тому, что это будет отправлено в JIRA как массив RemoteFieldValue:

{components: [{
    id: '10769',
    name: 'component name'
}]}

Если это так, я не думаю, что именно этого ожидает jira.Я полагаю, что ожидается:

[
    {id: 'components',value:'component name'}
]

Помните, что в Java нет ассоциативных массивов.Так что конструкция $ myIssue ['components'] [] ничего не значит для Java.Java также не поддерживает многомерные массивы разных типов.

Обновление:

Попробуйте это (или что-то в этом роде, мой код не тестируется):

<?php

    class RemoteFieldValue {
        var $id;
        var $values = array();

        function __construct($idIn, $valuesIn) {
            $this->id = $idIn;
            $this->values = $valuesIn;
        }
    }

    $rfv = new RemoteFieldValue('components', array("id" =>"componentid_goes_here"));

    $rfvArray = array($rfv);

    $soap->updateIssue($auth,"ISSUEKEY", $rfvArray);


?>

Когда я собрал службу JIRA в ColdFusion, я реализовал каждыйОбъект JIRA (Пользователь, Проблема, RemoteFieldValue и т. Д.) Как объект ColdFusion.Я подозреваю, что вы могли бы также сделать это с ассоциативными массивами и массивами, но я нахожу это чище, и это облегчает адаптацию к тому, что ожидает сервис JIRA SOAP.

0 голосов
/ 05 июня 2013

Для меня updateIssue работает таким образом (php)

Определение класса (из wsdl)

class RemoteFieldValue 
{
  public $id; // string
  public $values; // ArrayOf_xsd_string
}

, после этого вот код, который обновляет поле «description» в вопросе.

public function updateDescription($issue_key, $description)
{
$remoteField = new RemoteFieldValue ();
$remoteField->id = 'description'; 
$remoteField->values = array($description); 

return $this->mSoapClient->updateIssue($this->mToken, $issue_key, array($remoteField));            
}
0 голосов
/ 08 января 2013

Самый простой способ обновить поле - передать объект

Сначала определите класс (сгенерированный из WSDL)

class RemoteFieldValue {
  public $id; // string
  public $values; // ArrayOf_xsd_string
}

Создать объект

$remoteField = new RemoteFieldValue ();
$remoteField->id = "12345"; 
$remoteField->value = "bla"; 

затем вызовите метод

* * 1010

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...