• Как в коробочной версии bitrix24 получить связанную задачу к сделке?

    @Craftmoorg
    Вот рабочий код.
    Для примера на событие OnBeforeCrmDealUpdate делаем проверку на наличие дел или задач у сделки. Если таковых не имеется, то делаем отмену изменения сделки с последующим уведомлением пользователя,
    public static function OnBeforeCrmDealUpdate(&$arFields)
        {
            // Если у сделки нет активности в виде дел или задач, то запрещаем ее изменять
            global $APPLICATION, $USER;
            $arActivities = [];
            $rsActivities = \CCrmActivity::GetList(
                ['ID' => 'DESC'],
                [
                    'BINDINGS' => [[
                        'OWNER_ID' => $arFields['ID'],
                        'OWNER_TYPE_ID' => 2 // \CCrmOwnerType::Deal не работает, потому что Битрикс
                    ]]
                ],
                false,
                false,
                ['PROVIDER_TYPE_ID', 'ASSOCIATED_ENTITY_ID'] // 'ASSOCIATED_ENTITY_ID'
            );
            while ($activity = $rsActivities->Fetch()) {
                if ($activity['PROVIDER_TYPE_ID'] == 'TODO' || $activity['PROVIDER_TYPE_ID'] == 'TASKS_TASK') {
                    $arActivities[] = $activity['ASSOCIATED_ENTITY_ID'];
                }
            }
            if (empty($arActivities)) {
                $message = 'Изменять или завершать сделку без дела или задачи нельзя!';
                if (\CModule::IncludeModule('im')) {
                    $arMessageFields = array(
                        "TO_USER_ID" => $USER->GetID(),
                        "FROM_USER_ID" => 0,
                        "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
                        "NOTIFY_MODULE" => "im",
                        "NOTIFY_TAG" => "",
                        "NOTIFY_EVENT" => "default",
                        "NOTIFY_MESSAGE" => $message,
                    );
                    \CIMNotify::Add($arMessageFields);
                }
                $arFields['RESULT_MESSAGE'] = $message;
                $APPLICATION->ThrowException($message);
                return false;
            }
        }
    Ответ написан
    Комментировать
  • Как в Битрикс вывести множественное свойство через API?

    @Craftmoorg
    Внутри цикла ничего не нужно размещать, это не правильно. Есть метод CIBlockElement::GetPropertyValues для получения множественных свойств нескольких элементов. Для примера взял свойство Реквизиты.
    $iblockId = 1;
    $iblockCode = 'catalog';
    $productIds = [123, 1234, 1235];
    $propertyCode = 'CML2_TRAITS';
    // Получим ID свойства которое нам нужно по его символьному коду
    $propertyId = \CIBlockProperty::GetByID("CML2_TRAITS", false, $iblockCode)->Fetch()['ID'];
    // Далле уже получаем по ID свойства его значения. 
    $rsPropertyValues = \CIBlockElement::GetPropertyValues($iblockId, ['ID' => $productIds], true, ['ID' => $propertyId]);
    while ($arPropertyValue = $rsPropertyValues->Fetch()){
        foreach ($arPropertyValue['DESCRIPTION'][$propertyId] as $key => $value){
            if ($value == 'Вес'){
              // Ваш код...
            }
            if ($value == 'Объем'){
                // Ваш код...
            }
            if ($value == 'Штрихкод'){
                // Ваш код...
            }
        }
    }
    Ответ написан
    Комментировать