Использование мини-карточки при добавлении записи

Добрый день!

 

А можно ли как-то сделать, чтобы при добавлении записи из раздела не использовалась мини-карточка (а открывалась сразу полноценная), а из других объектов (например, создание контакта из лида) добавлялось с помощью мини-карточки (как и сейчас происходит)?

 

Спасибо!
 

Нравится

3 комментария

Здравствуйте! В нужном Вам разделе перейдите в мастер разделов(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) попробовать подменить результат из базы.

 

Главное, не забыть потом.

Показать все комментарии