public static function appendDateTimeUserFieldsAsShort(\Bitrix\Main\Entity\Base $entity)
 {
     /** @global CDatabase $DB */
     global $DB;
     // Advanced fields for datetime user fields
     $dateFields = array();
     foreach ($entity->getFields() as $field) {
         if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true) && $field instanceof Bitrix\Main\Entity\ReferenceField) {
             self::appendDateTimeUserFieldsAsShort($field->getRefEntity());
         } else {
             if ($field instanceof Bitrix\Main\Entity\ExpressionField) {
                 $arUF = self::detectUserField($field);
                 if ($arUF['isUF']) {
                     $ufDataType = self::getUserFieldDataType($arUF);
                     if ($ufDataType === 'datetime') {
                         $dateFields[] = array('def' => array('data_type' => 'datetime', 'expression' => array($DB->DatetimeToDateFunction('%s'), $arUF['ufInfo']['FIELD_NAME'])), 'name' => $arUF['ufInfo']['FIELD_NAME'] . self::UF_DATETIME_SHORT_POSTFIX);
                     }
                 }
             }
         }
     }
     foreach ($dateFields as $fieldInfo) {
         $entity->addField($fieldInfo['def'], $fieldInfo['name']);
     }
 }
 public static function appendTextUserFieldsAsTrimmed(\Bitrix\Main\Entity\Base $entity)
 {
     /** @global string $DBType */
     global $DBType;
     $dbType = ToUpper(strval($DBType));
     // Advanced fields for text user fields
     $textFields = array();
     foreach ($entity->getFields() as $field) {
         if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true) && $field instanceof Bitrix\Main\Entity\ReferenceField) {
             self::appendTextUserFieldsAsTrimmed($field->getRefEntity());
         } else {
             if ($field instanceof Bitrix\Main\Entity\ExpressionField) {
                 $arUF = self::detectUserField($field);
                 if ($arUF['isUF']) {
                     $ufDataType = self::getUserFieldDataType($arUF);
                     if ($arUF['ufInfo']['MULTIPLE'] === 'Y') {
                         if ($dbType === 'ORACLE' || $dbType === 'MSSQL') {
                             $exprVal = '';
                             switch ($dbType) {
                                 case 'ORACLE':
                                     $maxStrLen = 4000;
                                     $exprVal = 'TO_CHAR(SUBSTR(%s, 1, ' . $maxStrLen . '))';
                                     break;
                                 case 'MSSQL':
                                     $maxStrLen = 8000;
                                     $exprVal = 'SUBSTRING(%s, 1, ' . $maxStrLen . ')';
                                     break;
                             }
                             /*$textFields[] = array(
                             			'def' => array(
                             				'data_type' => 'string',
                             				'expression' => array(
                             					$exprVal, $arUF['ufInfo']['FIELD_NAME']
                             				)
                             			),
                             			'name' => $arUF['ufInfo']['FIELD_NAME'].self::UF_TEXT_TRIM_POSTFIX
                             		);*/
                             if ($arUF['ufInfo']['USER_TYPE_ID'] === 'datetime') {
                                 $fdmsGetterName = 'getFDMsMultipleTrimmedDateTime';
                             } else {
                                 $fdmsGetterName = 'getFDMsMultipleTrimmed';
                             }
                             $textFields[] = new Main\Entity\ExpressionField($arUF['ufInfo']['FIELD_NAME'] . self::UF_TEXT_TRIM_POSTFIX, $exprVal, array($arUF['ufInfo']['FIELD_NAME']), array('fetch_data_modification' => array(__CLASS__, $fdmsGetterName)));
                         }
                     }
                 }
             }
         }
     }
     foreach ($textFields as $fieldInfo) {
         if (is_object($fieldInfo)) {
             $entity->addField($fieldInfo);
         } else {
             $entity->addField($fieldInfo['def'], $fieldInfo['name']);
         }
     }
 }