Bitrix.Скрипты миграций: добавление свойств заказа
//<?php
/**
* @doc CSaleOrderProps::Add() https://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderprops/csaleorderprops__add.b64a5ac9.php
*/
/** @var CMain $APPLICATION */
// Data
$propsData = array(
array(
"PERSON_TYPE_ID" => 1,
"PROPS_GROUP_ID" => 7,
"NAME" => "FUserId",
"CODE" => "FUSER_ID",
"TYPE" => "TEXT",
"REQUIED" => "N",
"UTIL" => "Y",
"IS_FILTERED" => "Y",
"SORT" => 900,
)
);
// Logic
function oGetMessage($key, $fields)
{
$messages = array(
'SALE_ORDER_PROP_MESSAGE_UPDATE' => 'Свойство заказа «#NAME#» [#ID#] успешно обновлено',
'SALE_ORDER_PROP_MESSAGE_UPDATE_ERROR' => 'Ошибка обновления свойства заказа «#NAME#» [#ID#]: #ERROR#',
'SALE_ORDER_PROP_MESSAGE_UPDATE_EXISTS' => 'Свойство заказа «#NAME#» уже существует. Пожалуйста, обновите его вручную. Информация о нём:<br><pre>#PROP_INFO#</pre>',
'SALE_ORDER_PROP_MESSAGE_ADDED' => 'Свойство заказа «#NAME#» [#ID#] успешно добавлено',
'SALE_ORDER_PROP_MESSAGE_ADDED_ERROR' => 'Ошибка добавления свойства заказа «#NAME#»: #ERROR#',
);
return isset($messages[$key])
? str_replace(array_keys($fields), array_values($fields), $messages[$key])
: '';
}
global $DB;
$DB->StartTransaction();
try {
$DB->Commit();
$info = array();
if (CModule::IncludeModule('sale')) {
foreach ($propsData as $propData) {
$propIterator = CSaleOrderProps::GetList(
array(),
array(
'PERSON_TYPE_ID' => $propData['PERSON_TYPE_ID'],
'CODE' => $propData['CODE'],
)
);
if ($prop = $propIterator->Fetch()) {
throw new \Bitrix\Main\SystemException(oGetMessage('SALE_ORDER_PROP_MESSAGE_UPDATE_EXISTS', array(
'#NAME#' => $propData['NAME'],
'#PROP_INFO#' => var_export($prop, true),
)));
} else {
if ($result = CSaleOrderProps::Add($propData)) {
$info[] = oGetMessage('SALE_ORDER_PROP_MESSAGE_ADDED', array(
'#NAME#' => $propData['NAME'],
'#ID#' => $result,
));
} else {
$error = '';
if ($ex = $APPLICATION->GetException()) {
$error = $ex->GetString();
}
throw new \Bitrix\Main\SystemException(oGetMessage('SALE_ORDER_PROP_MESSAGE_ADDED_ERROR', array(
'#NAME#' => $propData['NAME'],
'#ERROR#' => $error,
)));
}
}
}
}
echo implode("<br>\n", $info);
} catch (\Bitrix\Main\SystemException $e) {
$DB->Rollback();
echo sprintf("%s<br>\n%s",
$e->getMessage(),
implode("<br>\n", $info)
);
}