Добрый день!
А можно ли как-то сделать, чтобы при добавлении записи из раздела не использовалась мини-карточка (а открывалась сразу полноценная), а из других объектов (например, создание контакта из лида) добавлялось с помощью мини-карточки (как и сейчас происходит)?
Спасибо!
Нравится
Здравствуйте! В нужном Вам разделе перейдите в мастер разделов(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) попробовать подменить результат из базы.
Главное, не забыть потом.