Как создать поле, которое будет содержать список?

Здравствуйте! У меня есть вывод сделки: <br/><br/><pre><code class="php">$result = CRest::call(
	'crm.deal.get',
	array(
		'id' =&gt; 580 
	)
);</code></pre><br/> Поле с типом "список" отображается следующим образом: <br/><code class="php">'UF_CRM_1726662473238' =&gt; '46',</code><br/> однако выводится только ключ. Как мне получить значение, связанное с этим ключом? <br/> Несмотря на то что вопрос кажется простым и распространенным, информации по этой теме в интернете практически нет.
  • 18 сентября 2024 г. 14:13
Ответы на вопрос 2
Чтобы получить значение, связанное с ключом списка, вам нужно сначала знать, какие значения соответствуют ключам вашего списка. Обычно это достигается путем использования метода API, который возвращает все элементы списка, или путем того, чтобы значения были заранее известны.

1. **Получите список значений**: В зависимости от используемой CRM, обычно есть метод API, который позволяет получить все элементы определенного списка. Например, если вы работаете с полями типа "список" в Bitrix24, вам нужно использовать метод `crm.deal.category.list` или `crm.deal.stage.list` для получения данных о стадиях сделок или категорий сделок соответственно.

2. **Сопоставьте ключ с его значением**: После получения всех значений списка, вы можете сопоставить ключ, который у вас есть (например, `'46'`), с его фактическим значением.

Примерный алгоритм ваших действий:

```php
// Получаем сделку
$result = CRest::call('crm.deal.get', array('id' => 580));

// Получаем список значений (например, для стадий сделок)
$statusList = CRest::call('crm.deal.stage.list');

// Преобразуем список стадий в ассоциативный массив
$statusArray = [];
foreach ($statusList as $status) {
    $statusArray[$status['ID']] = $status['NAME'];
}

// Получаем значение по ключу
$dealStatusKey = $result['result']['UF_CRM_1726662473238'];
$dealStatusValue = $statusArray[$dealStatusKey];

// Выводим результат
echo 'Статус сделки: ' . $dealStatusValue;
```

### Пояснения:

1. Мы сначала получаем информацию о сделке.
2. Далее мы запрашиваем доступные стадии сделок и сохраняем их в ассоциативный массив ($statusArray), где ключ - это ID состояния, а значение - его название.
3. Затем мы берем ключ состояния сделки из результата запроса к сделке и получаем его значение из массива стадий.
4. В конце мы выводим значение.

Этот подход позволит вам получить читаемое значение, связанное с вашим ключом списка.
Сделайте просто доп запрос к методу crm.deal.userfield.get, указав код поля, для получения всех значений, которые могут быть в списке. После этого вы сможете сопоставить ключ (например, 46) с его значением. 

Вот пример кода:
$userFieldResult = CRest::call(
    'crm.deal.userfield.get',
    array(
        'id' => 'UF_CRM_1726662473238'
    )
);

if (!empty($userFieldResult['result']['LIST'])) {
    $listValues = array_column($userFieldResult['result']['LIST'], 'VALUE', 'ID');

    $dealResult = CRest::call(
        'crm.deal.get',
        array(
            'id' => 580 
        )
    );

    $listValueId = $dealResult['result']['UF_CRM_1726662473238'];

    if (isset($listValues[$listValueId])) {
        $listValue = $listValues[$listValueId];
    }
}
Похожие вопросы