Страница 1 из 2

[Решено] API. Как добавлять файлы в поле "Вложения"?

Добавлено: 03 июн 2024, 19:54
tehnos
Задача добавлять файлы к записям в поле "Вложения".
Возможно ли это? В документации не нашёл этой возможности.

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 04 июн 2024, 13:08
support
Добавил инфу в документацию https://docs.rukovoditel.net.ru/index.php?p=159

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 04 июн 2024, 14:21
tehnos
Благодарю!

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 04 июн 2024, 16:46
tehnos
Работает, но есть нюанс.
При добавлении файла, предыдущий удаляется.
Можно ли добавлять файлы без удаления ранее прикреплённых?

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 07:55
support
Добавил информацию в документацию https://docs.rukovoditel.net.ru/index.p ... e_vlozenij

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 14:32
tehnos
Спасибо!
Однако видимо есть ещё баг.
При попытке передать массив файлов $files, PHP сообщает об ошибке:

Код: Выделить всё

[Wed Jun 05 14:29:21.171605 2024] [php:error] [pid 60358] [client 192.168.1.2:50334] PHP Fatal error:  Uncaught TypeError: strlen(): Argument #1 ($string) must be of type string, array given in /var/www/oms/plugins/ext/classes/api/api.php:1072
Stack trace:
#0 /var/www/oms/plugins/ext/classes/api/api.php(75): api->action_update()
#1 /var/www/oms/api/rest.php(58): api->request()
#2 {main}
  thrown in /var/www/oms/plugins/ext/classes/api/api.php on line 1072
Если переменная $files является строкой (например, ссылка на файл) - всё работает.

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 14:56
support
А покажите ваш код.

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 15:26
tehnos
field_727 - тип поля "Вложения"

Код: Выделить всё

		// смотрим уже добавленные вложения
		$query = array(
			'entity_id' => 27,
			'select_fields' => '727',
			'filters' => array('id' => (string) $id)
		);
		$result = oms('select', $query);

		// записываем имена файлов (вложений) в массив (если они есть)
		$files = [];
		if(!empty($result['data'][0]['727'])) {
			foreach(explode(',', $result['data'][0]['727']) AS $filename) {
				$files[] = ['name' => $filename];
			}
		}
		
		// добавляем новый файл к ранее созданному массиву файлов
		$files[] = [
			'name' => $file_name,
			'content' => base64_encode(file_get_contents($file_link))
		];

		// отправляем вложения в запись
		$query = array(
			'entity_id' => 27,
			'data' => array('field_727' => $files),
			'update_by_field' => array('id' => (string) $id)
		);
		$result = oms('update', $query);

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 16:04
support
А версия программы какая?

Re: API. Как добавлять файлы в поле "Вложения"?

Добавлено: 05 июн 2024, 16:09
tehnos
Я кажется понимаю где у меня ошибка.
Разбираю. Напишу о результате.