Добрый день!
А можно ли как-то сделать, чтобы при добавлении записи из раздела не использовалась мини-карточка (а открывалась сразу полноценная), а из других объектов (например, создание контакта из лида) добавлялось с помощью мини-карточки (как и сейчас происходит)?
Спасибо!
Нравится
Здравствуйте! В нужном Вам разделе перейдите в мастер разделов(https://prnt.sc/tr326c), затем уберите галочки(https://prnt.sc/tr32qw) - это что касается первой части вопроса.
Касательно второго, прочтите данное обсуждение
Я бы наоборот. Галочки оставил, но в разделе что-то поменял бы. Так как раздел - это как раз исключение из правила (в остальных многочисленных местах мини-карточка должна работать).
Владимир, в таком случае нужно смотреть, где в коде отрисовки разделов идёт считывание поля MiniPageModes из SysModuleEdit (точнее, из представления VwSysModuleSchemaEdit) и вносить там правку, чтобы для конкретного раздела читало одно, а действовало, как будто бы там другое.
Пока нашёл схему ConfigurationSectionHelper, которая генерирует Terrasoft.configuration.ModuleStructure с информацией о всех разделах, доступной из JS. Возможно, поможет правка в этой схеме в функции GetModuleStructure, где читают свойства каждого зарегистрированного раздела, в том числе и MiniPageModes, и другой функции GetQuickAddConfig в этой же схеме. Вот она:
/// <summary> /// Gets quick add menu items configuration. /// </summary> /// <param name="userConnection">User connection.</param> /// <returns>Quick add menu items configuration.</returns> public virtual string GetQuickAddConfig(UserConnection userConnection) { Dictionary<Guid, string> quickItems = new Dictionary<Guid, string> (); string tpl = @"{{QuickAddMenu: [{0}]}}"; string itemTpl = @"{{itemId:'{0}',SysEditId:'{1}',name:{2},EditPageName:'{3}',TypeColumnValue:'{4}',TypeColumnName:{5},ModuleName:'{6}',EntitySchemaName:'{7}',miniPageSchema:'{8}',hasAddMiniPage:{9}}}"; bool useMultilanguageData = !userConnection.GetIsFeatureEnabled("DoNotUseMultilanguageData"); Select quickAddMenuItemsSelect = GetQuickAddMenuItemsSelect(userConnection); using (DBExecutor dbExecutor = userConnection.EnsureDBConnection()) { using (IDataReader dataReader = quickAddMenuItemsSelect.ExecuteReader(dbExecutor)) { while (dataReader.Read()) { Guid itemId = dataReader.GetColumnValue<Guid>("Id"); Guid sysModuleEditId = dataReader.GetColumnValue<Guid>("SysModuleEditId"); Guid typeColumnValue = dataReader.GetColumnValue<Guid>("TypeColumnValue"); string editPageName = dataReader.GetColumnValue<string>("EditPageName"); string name = dataReader.GetColumnValue<string>("Name"); string caption = useMultilanguageData ? dataReader.GetColumnValue<string>("Caption") : string.Empty; name = Json.Serialize(caption.IsNullOrEmpty() ? name : caption); string typeColumnName = Json.Serialize(String.Empty); Guid sysEntitySchemaUId = dataReader.GetColumnValue<Guid>("SysEntitySchemaUId"); string entitySchemaName = dataReader.GetColumnValue<string>("EntityName"); string moduleName = dataReader.GetColumnValue<string>("ModuleName"); // TODO CRM-53025 bool rightLevel = string.IsNullOrEmpty(entitySchemaName) ? true : userConnection.DBSecurityEngine.GetIsEntitySchemaAppendingAllowed(entitySchemaName); Guid columnUId = dataReader.GetColumnValue<Guid>("TypeColumnUId"); Guid miniPageSchemaUId = dataReader.GetColumnValue<Guid>("MiniPageSchemaUId"); string miniPageModes = dataReader.GetColumnValue<string>("MiniPageModes"); bool hasAddMiniPage = HasSchemaEditAddMiniPage(userConnection, entitySchemaName, miniPageModes); if (columnUId != null && columnUId != Guid.Empty) { typeColumnName = Json.Serialize(userConnection.EntitySchemaManager.GetInstanceByUId(sysEntitySchemaUId).Columns.GetByUId((Guid)columnUId).Name); } if (!quickItems.ContainsKey(itemId) && rightLevel) { quickItems.Add(itemId, string.Format(itemTpl, itemId, sysModuleEditId, name, editPageName, typeColumnValue, typeColumnName, moduleName, entitySchemaName, miniPageSchemaUId, hasAddMiniPage.ToString().ToLower())); } } } } var items = string.Join(",", quickItems.Select(x => x.Value)); return string.Format(tpl, items); }
Первую функцию не привожу, она слишком длинная, но суть та же, формируется запрос в базу и из него читаются свойства. В этот момент и можно для конкретного раздела (определив по Id) попробовать подменить результат из базы.
Главное, не забыть потом.