• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/classes/general/workflowtemplateloader.php
  • Класс: CBPWorkflowTemplateLoader
  • Вызов: CBPWorkflowTemplateLoader::importDocumentFields
static function importDocumentFields(array $documentType, array $fields)
{
	$documentService = CBPRuntime::GetRuntime(true)->getDocumentService();
	$currentDocumentFields = $documentService->GetDocumentFields($documentType, true);

	BitrixMainTypeCollection::sortByColumn($fields, "sort");
	$len = mb_strlen("_PRINTABLE");

	foreach ($fields as $code => $field)
	{
		//skip printable
		if (mb_strtoupper(mb_substr($code, -$len)) == "_PRINTABLE")
		{
			continue;
		}

		//skip references
		if (mb_strpos($code, '.') !== false)
		{
			continue;
		}

		$documentField = [
			"name" => $field["Name"],
			"code" => $code,
			"type" => $field["Type"],
			"multiple" => $field["Multiple"] ?? null,
			"required" => $field["Required"] ?? null,
		];

		if (isset($field['Options']) && is_array($field["Options"]) && count($field["Options"]) > 0)
		{
			$documentField['options'] = '';
			foreach ($field["Options"] as $k => $v)
			{
				if (!is_scalar($v))
				{
					continue;
				}

				$documentField["options"] .= "[".$k."]".$v."n";
			}
		}

		unset($field["Name"], $field["Type"], $field["Multiple"], $field["Required"], $field["Options"]);
		$documentField = array_merge($documentField, $field);

		if ($currentDocumentFields && !array_key_exists($code, $currentDocumentFields))
		{
			$documentService->AddDocumentField($documentType, $documentField);
		}
		else
		{
			$documentService->UpdateDocumentField($documentType, $documentField);
		}
	}
}