承接 dimayadikin1997/bitrix24-crm 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dimayadikin1997/bitrix24-crm

最新稳定版本:v1.0.1

Composer 安装命令:

composer require dimayadikin1997/bitrix24-crm

包简介

Library dedicated to customization of Bitrix24 CRM

README 文档

README

Установка

composer require dimayadikin1997/bitrix24-crm

Использование

Шаг 1. Создать фабрику

<?php
/// файл local/modules/your.module/lib/Crm/Service/Factory/Dynamic/OrderFactory.php

namespace Your\Module\Crm\Service\Factory\Dynamic;

use Bitrix\Crm\Service\Factory\Dynamic;
use Bitrix\Crm\Service\Container;
use Bitrix\Crm\Service\Context;
use Bitrix\Crm\Service\Operation;
use Bitrix\Crm\Model\Dynamic\TypeTable;
use Bitrix\Crm\Item;

use Yadikin\Bitrix24\Crm\Factory\Intefaces\FactoryInteface;

class OrderFactory extends Dynamic implements FactoryInteface
{
    /** @var int */
    protected int $entityTypeId = 1036; // Идентификатор типа смарт-процесса

    /// Требуется для класса Dynamic
    public function __construct() 
    {
        $type = TypeTable::getByEntityTypeId($this->entityTypeId)->fetchObject();

        if (!is_null($type)) {
            parent::__construct($type);
        }
    }

    /**
     * return string
     */
    public function getInstanceCode() : string
    {
        /// Вернет "crm.service.factory.dynamic.1036"
        $identifier = Container::getIdentifierByClassName(Dynamic::class, [$this->entityTypeId]);
        return $identifier;
    }
    
    /// Переопределить родительский метод
    public function getAddOperation(Item $item, Context $context = null): Operation\Add
    {
        $operation = parent::getAddOperation($item, $context);

        // добавляем Action`s

        return $operation;
    }

    /// Переопределить родительский метод
    public function getUpdateOperation(Item $item, Context $context = null): Operation\Update
    {
        $operation = parent::getUpdateOperation($item, $context);

        // добавляем Action`s

        return $operation;
    }
}

Шаг 2. Добавляем фабрику в ServiceLocator

Добавить фабрику в ServiceLocator можно, например в init.php

<?php
/// файл init.php

/// ....

$orderFactory = new Your\Module\Crm\Service\Factory\Dynamic\OrderFactory();

$serviceLocator = \Bitrix\Main\DI\ServiceLocator::getInstance();

$serviceLocator->addInstanceLazy($orderFactory->getInstanceCode(), [
    'className' => $orderFactory,
]);

/// ....

Шаг 3. Создаем Action

<?php
/// файл local/modules/your.module/lib/Crm/Service/Action/Order/OrderBaseAction.php

namespace Your\Module\Crm\Service\Action\Order;

use Bitrix\Main\Result;
use Bitrix\Main\Error;
use Bitrix\Crm\Item;

class OrderBaseAction 
{
    public function run(Item $item) : Result
    {
        $result = new Result();
        
        /// Ваша бизнес-логика
        $result->addError(new Error("Пример ошибки!"));
        
        return $result;
    }
}

Шаг 4. Добавляем Ваш Action в ActionRegistry

Добавить Action можно, например в init.php

<?php
/// файл init.php

/// ....

$actionsOrder = \Yadikin\Bitrix24\Crm\Action\Actions::make(/** @var OrderFactory */$orderFactory);

$actionsOrder->onBeforeAdd(new \Your\Module\Crm\Service\Action\Order\OrderBaseAction(), 'run'); // Вызывает метод run перед добавлением элемента в СП
$actionsOrder->onBeforeUpdate(new \Your\Module\Crm\Service\Action\Order\OrderBaseAction(), 'run'); // Вызывает метод run перед редактированием элемента в СП

/// ....

Шаг 5. Получаем все Action`s в фабрике

<?php
/// файл local/modules/your.module/lib/Crm/Service/Factory/Dynamic/OrderFactory.php

namespace Your\Module\Crm\Service\Factory\Dynamic;

use Bitrix\Crm\Service\Factory\Dynamic;
use Bitrix\Crm\Service\Container;
use Bitrix\Crm\Service\Context;
use Bitrix\Crm\Service\Operation;
use Bitrix\Crm\Model\Dynamic\TypeTable;
use Bitrix\Crm\Item;
use Yadikin\Bitrix24\Crm\Factory\Intefaces\FactoryInteface;

class OrderFactory extends Dynamic implements FactoryInteface
{
    /** @var int */
    protected int $entityTypeId = 1036; // Идентификатор типа смарт-процесса

    /// Требуется для класса Dynamic
    public function __construct() 
    {
        $type = TypeTable::getByEntityTypeId($this->entityTypeId)->fetchObject();

        if (!is_null($type)) {
            parent::__construct($type);
        }
    }

    /**
     * return string
     */
    public function getInstanceCode() : string
    {
        /// Вернет "crm.service.factory.dynamic.1036"
        $identifier = Container::getIdentifierByClassName(Dynamic::class, [$this->entityTypeId]);
        return $identifier;
    }
    
    /// Переопределить родительский метод
    public function getAddOperation(Item $item, Context $context = null): Operation\Add
    {
        $operation = parent::getAddOperation($item, $context);

        // добавляем Action`s
        $actionsOrder = \Yadikin\Bitrix24\Crm\Action\Actions::make(/** @var OrderFactory */$this);

        foreach($actionsOrder->getOnBeforeAdd() as $action)
        {
            $operation->addAction(
                Operation::ACTION_BEFORE_SAVE,
                $action
            );
        }

        foreach($actionsOrder->getOnAfterAdd() as $action)
        {
            $operation->addAction(
                Operation::ACTION_AFTER_SAVE,
                $action
            );
        }

        return $operation;
    }

    /// Переопределить родительский метод
    public function getUpdateOperation(Item $item, Context $context = null): Operation\Update
    {
        $operation = parent::getUpdateOperation($item, $context);

        // добавляем Action`s
        $actionsOrder = \Yadikin\Bitrix24\Crm\Action\Actions::make(/** @var OrderFactory */$this);

        foreach($actionsOrder->getOnBeforeUpdate() as $action)
        {
            $operation->addAction(
                Operation::ACTION_BEFORE_SAVE,
                $action
            );
        }

        foreach($actionsOrder->getOnAfterUpdate() as $action)
        {
            $operation->addAction(
                Operation::ACTION_AFTER_SAVE,
                $action
            );
        }

        return $operation;
    }
}

Результат

Результат

Добавить ещё

Тпереь для добавления новго Actions

<?php
/// файл init.php

/// Так же продолжаем добавлять
$actionsOrder->onBeforeDelete(new Order\OtherAction(), 'run');

/// ....

统计信息

  • 总下载量: 9
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-08-16

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固