Цитата |
---|
Алексей Кадников пишет: просто не сохраняет настройки, |
09.06.2011 04:31:16
У себя используем решение на jQuery, чтобы не трогать стандартные компоненты:
|
|||
|
03.06.2011 07:29:27
Еще несколько практических моментов, которые вылезли:
1. Находясь в разделе Компании добавить контакт к компании можно только через контекстное меню в списке, но нельзя добавить контакт, находясь в карточке компании 2. В общем списке сделок нельзя вывести название компании 3. Про доп поля в событиях и планирование событий уже было сказано, просто присоединюсь 4. В диалоге выбора компании/контакта не хватает алфавитного указателя (имхо, конечно) |
|
|
19.05.2011 07:12:22
Коллеги, добрый день!
Выкладываю для общего пользования код пользовательского свойства типа "Привязка к компании". Соответственно его можно использовать в инфоблоках (списках) и в бизнес-процессах. Есть одна маленькая проблемка, в списках в самом списке в табличке будет выводиться ID компании (собственно такая же проблема, если использовать штатное свойство "Привязка к ИБ в виде списка", так что можно считать, что компоненты списков просто не дописаны на предмет получения текстовых значений свойств), такая же ситуация в бизнес-процессах - в списках и в карточке бп будет выводиться ID. Собственно вот код: [CODE] <? AddEventHandler('main', 'OnUserTypeBuildList', array('CUserTypeCRMCompany', 'GetUserTypeDescription')); AddEventHandler('iblock', 'OnIBlockPropertyBuildList', array('CIBlockPropertyCRMCompany', 'GetUserTypeDescription')); class CICRMCompanyProperty { function GetEditForm($value, $strHTMLControlName) { global $USER; CModule::IncludeModule("crm"); $rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC")); ob_start(); ?> <select name="<?echo htmlspecialchars($strHTMLControlName["VALUE"])?>" style="width: 100%; overflow: hidden"> <option value="">(выберите)</option> <?while($arItem=$rsItem->Fetch()):?> <option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==intval($value['VALUE'])):?> selected<?endif?>><?=$arItem["TITLE"]?></option> <?endwhile?> </select> <input type="hidden" name="<?=$strHTMLControlName["DESCRIPTION"]?>" value="123"> <? $return = ob_get_contents(); ob_end_clean(); return $return; } function GetAdminListViewHTML($value) { static $cache = array(); $value = intVal($value["VALUE"]); if(!array_key_exists($value, $cache)) { CModule::IncludeModule("crm"); $rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value)); $arGroup=$rsGroup->Fetch(); $cache[$value] = $arGroup; } $arGroup = $cache[$value]; if($arGroup) { return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>'; //return "[".$arGroup["ID"]."] ".htmlspecialchars($arGroup["TITLE"]); } else return " "; } } class CUserTypeCRMCompany extends CICRMCompanyProperty { function GetUserTypeDescription() { return array( "USER_TYPE_ID" => "crmcompany", "CLASS_NAME" => "CUserTypeCRMCompany", "DESCRIPTION" => "Привязка к компании CRM", "BASE_TYPE" => "enum", ); } function GetDBColumnType() { global $DB; switch(strtolower($DB->type)) { case "mysql": return "int(18)"; case "oracle": return "number(18)"; case "mssql": return "int"; } } // function PrepareSettings($arUserField) // { // return $arUserField['SETTINGS']; // } // function GetSettingsHTML($arUserField = false, $arHtmlControl, $bVarsFromForm) // { // return 'Settings!'; // } function GetEditFormHTML($arUserField, $arHtmlControl) { return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME'])); } // function GetFilterHTML($arUserField, $arHtmlControl) // { // return 'Filter!'; // } function GetFilterHTML($arUserField, $arHtmlControl) { return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME'])); } function GetAdminListViewHTML($arUserField, $arHtmlControl) { return parent::GetAdminListViewHTML($arHtmlControl); } // function GetAdminListEditHTML($arUserField, $arHtmlControl) // { // return 'AdminListEdit'; // } function CheckFields($arUserField, $value) { return array(); } function OnSearchIndex($arUserField) { return $arUserField["VALUE"]; } function GetList($arUserField) { CModule::IncludeModule("crm"); return CCrmCompany::GetList(array("TITLE"=>"ASC")); } } class CIBlockPropertyCRMCompany extends CICRMCompanyProperty { function GetUserTypeDescription() { return array( "PROPERTY_TYPE" => "S", "USER_TYPE" =>"crmcompany", "DESCRIPTION" => "Привязка к компании CRM", "GetPropertyFieldHtml"=> array("CIBlockPropertyCRMCompany","GetPropertyFieldHtml"), "GetAdminListViewHTML"=> array("CIBlockPropertyCRMCompany","GetAdminListViewHTML"), "GetPublicViewHTML" => array("CIBlockPropertyCRMCompany","GetPublicViewHTML"), "GetPublicEditHTML" => array("CIBlockPropertyCRMCompany","GetPublicEditHTML"), "GetPublicFilterHTML" => array("CIBlockPropertyCRMCompany","GetPublicFilterHTML"), "ConvertToDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"), "ConvertFromDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"), ); } function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName) { /*if(strpos($strHTMLControlName["VALUE"], "[VALUE]")) $strHTMLControlName["VALUE"]=str_replace("[VALUE]", "", $strHTMLControlName["VALUE"]);*/ return parent::GetEditForm($value, $strHTMLControlName); } function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName) { return parent::GetAdminListViewHTML($value); } function ConvertFromToDB($arProperty, $value) { CModule::IncludeModule("crm"); $value['VALUE'] = intval($value['VALUE']); $rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE'])); $arGroup=$rsGroup->Fetch(); if (!$arGroup) $value['VALUE'] = false; return $value; } function GetPublicViewHTML($arProperty, $value, $strHTMLControlName) { if(!is_array($value["VALUE"])) $value = CIBlockPropertyCRMCompany::ConvertFromToDB($arProperty, $value); $rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE'])); $arGroup=$rsGroup->Fetch(); if($ar) return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>'; else return ""; } function GetPublicEditHTML($arProperty, $value, $strHTMLControlName) { return parent::GetEditForm($value, $strHTMLControlName); } function GetPublicFilterHTML($arUserField, $arHtmlControl) { CModule::IncludeModule("crm"); $rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC")); ob_start(); ?> <select name="<?echo $arHtmlControl['VALUE']?>" style="width:100%"> <option value="">(выберите)</option> <?while($arItem=$rsItem->Fetch()):?> <option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==$_REQUEST[$arHtmlControl['VALUE']]):?> selected<?endif?>><?=$arItem["TITLE"]?></option> <?endwhile?> </select> <? $return = ob_get_contents(); ob_end_clean(); return $return; } } ?> [/CODE] |
|
|
15.04.2011 15:45:55
Просил Сергей сделать по теме на каждую желаемую фичу, делаю :)
Мы у себя уже почти 5 лет используем MS Dynamics CRM, поэтому все взгляды мои, как наверное и у многих других здесь, относительны. Но мы действительно приучились все договоры (исходники + сканы с печатями), акты, счета, ком предложения скидывать в CRM. Я могу зайти в компанию и увидеть все связанные с ней документы, разбитые по типам (акты-договоры-счета). Или, например, я могу зайти в документы и вывести все договора за год по всем организациям. Глупо было бы подумать, что я не жду этого же от любимого Битрикса :) У нас ведь есть инфоблоки. Мы ведь можем сделать пользовательское свойство "привязка к компании", вспомнить про модуль "Списки" и получить полноценное хранилище документов. А в нашей специфике еще хранилище лицензионных ключей, хостинговых площадок, договоров на домены и т.п. Все это вобщем-то можно даже своими силами за день сделать. Просто не хотелось бы лезть вперед поезда, а потом проходить по всем документам и менять привязку, если такая штука будет штатно :) Вопрос второй - сделать внутри компании обратную картину - возможность показать связанные с этой компанией документы, желательно не выходя логически из модуля (каталога на сайте) CRM, чтобы было как в группах соц сети - рядом шапочка с общей информацией о компании, а ниже собственно документация. Возможно как-то отдельной вкладкой - как контакты/сделки/события. |
|
|
02.02.2011 05:33:13
Встроенный фильтр - это bitrix:news? Тогда вам нужно кастомизировать шаблон и файле news.php шаблона между вызовом компонента фильтра и списка новостей добавлять код
$GLOBALS[$arParams["FILTER_NAME"]]["<DATE_ACTIVE_TO"]="..."; т.е. вклиниться в массив фильтр уже после его установки встроенным фильтром. |
|
|