Всем доброго времени суток! 

Столкнулся со следующей проблемой, у нас в системе были кастомные Excel отчеты, выгружались посредствам библиотеки ClosedXml, и все работало, но с версии 7.14 перестало работать. Высыпаются ошибки в зависимостях:

Terrasoft.Web.Common.ServiceModel.ErrorHandler ProvideFault - Метод не найден: "System.IO.Packaging.PackageProperties DocumentFormat.OpenXml.Packaging.OpenXmlPackage.get_PackageProperties()".

System.MissingMethodException: Метод не найден: "System.IO.Packaging.PackageProperties DocumentFormat.OpenXml.Packaging.OpenXmlPackage.get_PackageProperties()

Пробовал устанавливать разные версии библиотеки не помогло.

Кто работал с библиотекой ClosedXml в bpm'online, может знает какую версию использовать?

Текущая версия crm 7.14.4 

заранее благодарен.

Нравится

4 комментария
Лучший ответ

Столкнулся, к сожалению. пришлось все переписывать... В ClosedXML используются библиотеки DocumentFormat.OpenXml, в версии 7.14 видимо обновили версию библиотеки/зависимых библиотек и все. Мучался часа 3 с зависимостями, потом плюнул и переписал на OpenXml генерацию xls

Столкнулся, к сожалению. пришлось все переписывать... В ClosedXML используются библиотеки DocumentFormat.OpenXml, в версии 7.14 видимо обновили версию библиотеки/зависимых библиотек и все. Мучался часа 3 с зависимостями, потом плюнул и переписал на OpenXml генерацию xls

А что говорит по этому вопросу служба поддержки? Что они рекомендуют?

Алла Савельева,

Здравствуйте! Пока ничего. Анализирует предоставленный мною лог.

Нигрескул Алексей,

Поделитесь потом здесь ответом, очень интересует данная тема. Спасибо)

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

Добрый день!

Возможно ли сделать поле Мобильный телефон стандартным условием поиска Контакта (при выборе из справочника) в одном разделе.

Изображение удалено.

Нравится

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

Доброе утро!

Смотрите обсуждения в этом посте и в этом.

Ещё можно попробовать добавить в карточку выбора из справочника отдельное поле, как обсуждают здесь.

Забыл упомянуть, справочник не обычный а multilookup (Выбор из контактов и аккаунтов).

Решил пойти сложным путем, добавил схему CustomLookupPage (расширил MultiLookupModule) и в нем переопределил 

onTabChanged и 
generateViewModel

 для поиска по мобильному телефону у контакта. Код: 

define("CustomLookupPage", ["LookupPage", "LookupPageViewGenerator", "LookupPageViewModelGenerator", "LookupUtilities", "css!LookupPageCSS"],
   function(LookupPage, LookupPageViewGenerator, LookupPageViewModelGenerator) {

      return Ext.define("Terrasoft.configuration.CustomLookupPage", {
         alternateClassName: "Terrasoft.CustomLookupPage",
         extend: "Terrasoft.MultiLookupModule",

         gridWrapClasses: ["multi-lookup-control"],


         onTabChanged: function(activeTab) {
            var lookupsInfo = this.get("LookupsInfo");
            Terrasoft.each(lookupsInfo, function(lookupInfo) {
               if (activeTab.get("Name") !== lookupInfo.entitySchemaName) {
                  return true;
               }
               this.lookupInfo = lookupInfo;

               this.getSchemaAndProfile(lookupInfo.lookupPostfix, function(entitySchema, profile) {
                  this.isClearGridData = true;
                  this.set("gridProfile", profile);
                  this.entitySchema = entitySchema;
                  this.initLoadedColumns();
                  var searchColumn = this.get("searchColumn");
                  if (!entitySchema.columns[searchColumn.value]) {
                     this.set("searchColumn", {
                        value: this.entitySchema.primaryDisplayColumn.name,
                        displayValue: this.entitySchema.primaryDisplayColumn.caption
                     });
                     this.set("searchData", "");
                  }
                  this.set("LookupInfo", this.lookupInfo);
                  this.load(profile, function() {
                     var lookupInfo = this.lookupInfo;
                     var entitySchema = this.entitySchema;

                     //у контакта поиск по мобильному телефону
                     if (this.entitySchema.name == "Contact") {
                        this.set("searchColumn", {
                           value: "MobilePhone",
                           displayValue: "Мобильный телефон"
                        });
                     } else {
                        this.set("searchColumn", {
                           value: entitySchema.primaryDisplayColumn.name,
                           displayValue: entitySchema.primaryDisplayColumn.caption
                        });
                     }

                     var captionLookup = this.getLookupCaption(entitySchema, lookupInfo);
                     this.set("captionLookup", captionLookup);
                     this.set("lookupSchemaName", entitySchema.name);
                     this.setSearchEditFocused();
                  }.bind(this));
               });
            }, this);
         },

         generateViewModel: function() {

            var viewModelConfig = LookupPageViewModelGenerator.generate(this.lookupInfo);

            //у контакта поиск по мобильному телефону
            viewModelConfig.values.searchColumn = {
               value: "MobilePhone",
               displayValue: "Мобильный телефон"
            };

            if (!this.lookupInfo.columnValue && this.lookupInfo.searchValue) {
               viewModelConfig.values.searchData = this.lookupInfo.searchValue;
               viewModelConfig.values.previousSearchData = this.lookupInfo.searchValue;
            }
            var viewModel = this.Ext.create("Terrasoft.BaseViewModel", viewModelConfig);
            viewModel.Ext = this.Ext;
            viewModel.sandbox = this.sandbox;
            viewModel.Terrasoft = this.Terrasoft;
            if (this.lookupInfo.updateViewModel) {
               this.lookupInfo.updateViewModel.call(viewModel);
            }
            viewModel.initCaptionLookup();
            viewModel.initHasActions();
            viewModel.initLoadedColumns();
            if (!this.Ext.isEmpty(this.lookupInfo.filterObjectPath)) {
               viewModel.updateFilterByFilterObjectPath(this.lookupInfo.filters, this.lookupInfo.filterObjectPath);
            }
            if (this.lookupInfo.hideActions) {
               viewModel.set("hasActions", false);
            }
            return viewModel;
         },
      });
   });

Отображается поле на странице следующим образом:

"SxShipper": {
   "caption": { "bindTo": "Resources.Strings.SxShipper" },
   "dataValueType": this.Terrasoft.DataValueType.LOOKUP,
   //"multiLookupColumns": ["SxShipperContact", "SxShipperAccount"],
   "lookupListConfig": function() {
      return this.getLookupListConfig();
   },
   "isRequired": true
},

...

getLookupListConfig: function() {
   var multiLookupColumns = ["Contact", "Account"];
   var multiLookupConfig = multiLookupColumns.map(function(column) {
      return {
         entitySchemaName: column,
         columnName: "SxShipper",
         multiLookupColumnName: "SxShipper" + column,
         multiSelect: false,
         hideActions: true
      };
   }, this);
   var config = {
      lookupModuleId: this.Terrasoft.generateGUID(),
      lookupPageName: "CustomLookupPage",
      multiLookupConfig: multiLookupConfig
   };

   return config;
},

Поиск по телефону рабоает хорошо, но в поле не подтягивается значение, и при выборе из справочника в поле тоже ничего не проставляется

В чем может быть дело и в каком направлении копать?

Попробуйте для начала добиться нормальной работы лукапа по обычному ФИО, а затем модифицируйте под поиск по телефону.

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

Всем доброго времени суток! Столкнулся со следующей проблемой. Есть БП который запускается после изменения записи, в нем есть скрипт-таск в котором определяется заголовок Origin - System.Web.HttpContext.Current.Request.Headers["Origin"], если изменение производились через карточку записи то заголовок присутствовал и процесс шел по одной ветке, если же изменение произошло кодом через интеграцию, то заголовок был пустой. Это работало до недавнего времени, сейчас же System.Web.HttpContext.Current == null.

Кто нибудь с таким сталкивался?

Нравится

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

Разобрался, в настройке начального сигнала стояло выполнять след. эл-ты в фоне. Из-за этого не читалось.

Лучше вообще не завязываться на такие недокументированные возможности, а сразу сделать зримое различие в данных, приходящих из интерфейса или по интеграции. Например, добавить в объект дополнительное поле, логическое или справочник и при работе интеграции его заполнять. Или просто запускать интеграцию под отдельным пользователем и смотреть значение ModifiedById.

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

Добрый день.

Настроил сайт на выгрузку исходников для отладки согласно инструкции

https://academy.terrasoft.ru/documents/technic-sdk/7-14/instrumenty-otl…

В основном конфиге

Во внутреннем:



 

Выполнил полную компиляцию, исходники не появились.

На прошлых версиях отлично выгружались при аналогичном конфиге.

Подскажите, в чем может быть проблема?

Нравится

5 комментариев
Лучший ответ

Цитирую поддержку террасофта:

"Добрый день, Данила.

Получил обратную связь от команды разработки. Параметр CompilerSourcesTempFolderPath больше не используется. По умолчанию исходный код конфигурации выгружается в Terrasoft.WebApp\Terrasoft.Configuration\Src. Если включен РФС, то для выгрузки необходимо выполнить действие "Download packages to file system"."

Грубо говоря, с  7.14.4 все схемы разносятся по Terrasoft.WebApp\Terrasoft.Configuration (в src - исходники, obj - символы, lib - библиотеки и т.п.) не зависимо от настроек  ̶и̶ ̶н̶а̶ш̶е̶г̶о̶ ̶м̶н̶е̶н̶и̶я̶

Проверьте что на каталог 

"Путь_к_локальному_каталогу" 

есть права на запись у пользователя от которого запускается IIS пул

Подробнее тут

Цитирую поддержку террасофта:

"Добрый день, Данила.

Получил обратную связь от команды разработки. Параметр CompilerSourcesTempFolderPath больше не используется. По умолчанию исходный код конфигурации выгружается в Terrasoft.WebApp\Terrasoft.Configuration\Src. Если включен РФС, то для выгрузки необходимо выполнить действие "Download packages to file system"."

Грубо говоря, с  7.14.4 все схемы разносятся по Terrasoft.WebApp\Terrasoft.Configuration (в src - исходники, obj - символы, lib - библиотеки и т.п.) не зависимо от настроек  ̶и̶ ̶н̶а̶ш̶е̶г̶о̶ ̶м̶н̶е̶н̶и̶я̶

Григорий Чех,

Права на папку были, дело не в них

Варфоломеев Данила,

Спасибо большое, очень помогло. Пришлось бы долго искать. В документации об этом ничего не сказано

Коллеги, получается, что начиная с 7.14.4 единственный инструмент разработки / отладки исходного кода - это РФС?

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

Как скрыть коммуникационную панель от портальных пользователей?

Нравится

2 комментария
Лучший ответ

Коммуникационная панель по умолчанию и так скрыта у пользователей портала

Коммуникационная панель по умолчанию и так скрыта у пользователей портала

Схема CommunicationPanel в пакете SSP. 

				{
					"operation": "merge",
					"name": "email",
					"values": {
						"visible": {
							"bindTo": "getIsNotPortalUser"
						}
					}
				},

 

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

Всем доброго времени суток. Подскажите есть ли возможность у bpm'online интегрироваться с RabbitMQ, а именно подписываться на сообщения?

Благодарю.

Нравится

1 комментарий

Как минимум, в механизме глобального поиска он используется. Нужно смотреть документацию по этому ПО, как устроены стандартные библиотеки для взаимодействия с ним, есть ли они под JS и C# и можно ли ими воспользоваться в конфигурации bpm'online.

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

В окне групп фильтров верхними уровнями являются "Все" и "Избранное". Можно ли как-то создать свой фильтр верхнего уровня наравне с ними?

Нравится

1 комментарий

На самом деле «Все» и «Избранные» — это не группы, в таблице групп (ContactFolder, AccountFolder и др.) их нет. Они создаются программно в схеме FolderManagerViewModel, см. там логику, связанную с AllFolders и FavoriteFolders.

Пример добавления нового пункта верхнего уровня можно увидеть в разделе продуктов, там добавили ещё «Каталог».

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

Создана преднастроенная страница.

При открытии два обязательных поля

Проблема. Обязательность первого поля не работает. Система позволяет сохранить данные с незаполненным полемИзображение удалено.

В конфигурации страницы добавлен признак обязательности

Так же на атрибут повешен признак isRequired: true

Однако это не дает ровным счетом ничего

Так же, ни последующая валидация при сохранении, ни правила не помогли

Если кто сталкивался с подобным, подскажите как выходили из ситуации

Спасибо

 

Нравится

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

Попробуйте для установки обязательности поля использовать бизнес-правила. 

Подробнее почитайте о пользовательской функциональности настройки бизнес-правил и настройке бизнес-правил в схемах в конфигурации.

Алла Савельева, Пробовал бизнес-правила. Не помогло.

Спасибо

Дубов Андрей Владимирович,

Приведите пример Вашего кода

Без изучения кода карточки сложно сказать.

Как обходной вариант, на уровне БП проверять значение, если пусто, показывать сообщение и карточку повторно, пока не заполнит правильно.

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

А подскажите кто-нибудь сведущий по ситуации.

У меня есть такая структура

Изображение удалено.

Имею проблему. Руководители групп Москва-1 и др. могут закрывать задачи на которых права розданы только руководителям Отдела продаж.

Изображение удалено.

Мне кажется так не должно быть. Или я что-то неправильно понимаю?

Нравится

2 комментария
Лучший ответ

У меня была подобная проблема из-за того, что в группе был пользователь, который наследовал права другой группы.

Попробуйте определить что это за пользователь.

Посмотрите профайлером какой запрос идет в базу данных при сохранении задачи, на которую у пользователя прав доступа быть не должно.

И ещё даже, если у пользователя нет прав, то кнопки доступны, но при нажатии на них должно выдаваться сообщение о недостаточности прав.

Проверьте, действительно, ли пользователи могут вносить изменения или это только визуально кнопка доступна.

Руководитель отдела продаж (или какой-то Supervisor) случайно не входит в группу Москва 2?

У меня была подобная проблема из-за того, что в группе был пользователь, который наследовал права другой группы.

Попробуйте определить что это за пользователь.

Посмотрите профайлером какой запрос идет в базу данных при сохранении задачи, на которую у пользователя прав доступа быть не должно.

И ещё даже, если у пользователя нет прав, то кнопки доступны, но при нажатии на них должно выдаваться сообщение о недостаточности прав.

Проверьте, действительно, ли пользователи могут вносить изменения или это только визуально кнопка доступна.

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

Коллеги, всем привет! Подскажите, пожалуйста, может кто сталкивался с такой задачей/проблемой.

Нужно изменить OpportunityConfigurationConstants, точнее дополнить. Но данный модуль находится не в пользовательском пакете. Нужно сделать замещающий, а заменить не получается, потому что  в новых версиях данное действие запретили. Ошибка выскакивает "Замещение модулей запрещено". Что делать? Создавать новый модуль и копировать всё-всё из родительского, но при этом не замещать родительский. Или добавлять туда только то, что я хочу дописать. Или вообще что-то другое?

Нравится

5 комментариев
Лучший ответ

Можно создать свой модуль и  внести нужные правки (новые константы) и использовать там где вам нужно.

Можно создать свой модуль и  внести нужные правки (новые константы) и использовать там где вам нужно.

Григорий Чех,

Добрый день! Большое спасибо за ответ!

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

См. это и это обсуждения, как добавить в новый модуль на основе старого свою логику.

спасибо всем! всё получилось

PS: более корректно не копировать весь текст, а переопределять базовый при помощи override, как в этом примере.

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