Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Сгенерировать автоматом файл по шаблону и положить его в поле в сделки



Задача:
при переводе в сделку в определенный этап сгенерировать pfd по шаблону id2 и поместить в свойство типа "файл" в сделке, чтобы в мобильном приложении его видеть
php-код
$dealId = {{ID}};
    if(CModule::includeModule('crm')&&CModule::includeModule('documentgenerator')&&CModule::includeModule('disk')){
        $templateId = 2; //id шаблона документа для курьера        
        $template = \Bitrix\DocumentGenerator\Template::loadById($templateId);
        $template->setSourceType(\Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Deal::class);        
        $document = \Bitrix\DocumentGenerator\Document::createByTemplate($template, $dealId);                
        $result = $document->getFile();
        if($result->isSuccess()){
            $fileId = $result->getData()["emailDiskFile"];
            $file = Bitrix\Disk\File::getById($fileId);               
            $deal  =  new  \CCrmDeal( false );
            $arOptions = array("CURRENT_USER"=> 1); //из под кого обновляем 
            $arFieldsNew = ["UF_CRM_1669994255940"=>CFile::MakeFileArray($file->getFileId())];            
            $upRes = $deal->Update($dealId, $arFieldsNew, true, true, $arOptions);
        }
    }


Примечания
Вместо Lead может быть Deal, Company и т.п.
для смарт-процесса вместо Lead поставить Dynamic130 (где 130 - ENTITY_TYPE_ID смарт-процесса)
даже если по запросу списка провайдеров выводит \Dynamic130_2 или подобное, пишется сокращенный вариант
$template->setSourceType(\Bitrix\Crm\Integration\DocumentGenerator\DataProvider\Lead::class);
можно модифицировать тут же данные для шаблона
$fields = array(    
    'MyCompanyTitle' => array('VALUE' => 'ООО Наша компания'),
    'MyCompanyRequisiteRqDirector' => array('VALUE' => 'Вася Мужичков'),
);
$document->setFields($fields);
//сохраняем файл
$result = $document->getFile();
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!