Добрый день.

Прошу помощи, развернул сайт, все устанавливал согласно инструкции на сайте https://academy.terrasoft.ru/documents/administration/7-12/ustanovka-bp…

Установлен на Server 2016. Сервер видит и Redis и базу SQL 2017

При запуске выдает ошибку:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

 

[ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0
   System.Reflection.Assembly.GetTypes() +112
   Terrasoft.Common.ReflectionUtilities.FindTypeByShortName(Assembly assembly, String name) +455
   Terrasoft.Core.SchemaManagerItem`1.get_TypeName() +150
   Terrasoft.Core.SchemaManager`1.InitializeCoreSchemaLocalizableValues(ISchemaManagerItem`1 schemaManagerItem) +31
   Terrasoft.Core.SchemaManager`1.AddCoreSchema(Guid uid, String name, Guid parenSchemaUId, Assembly assembly, Guid[] referenceSchemaUIds) +116
   Terrasoft.Core.Entities.SystemEntitySchemaManager.InitializeItems() +320
   Terrasoft.Core.Entities.EntitySchemaManager.Initialize(SchemaManagerProvider provider, SchemaManagerProviderConfigurationElement configuration) +163
   Terrasoft.Core.SchemaManagerProvider.InitializeSystemSchemaManager(String systemSchemaManagerName) +223
   Terrasoft.Core.SchemaManagerProvider.InitializeSchemaManager(String managerName) +27
   Terrasoft.Core.SchemaManagerProvider.GetManager(String managerName) +221
   Terrasoft.Core.UserConnection.get_SystemEntitySchemaManager() +47
   Terrasoft.Core.SystemUserConnection.InitializeCurrentUser(String userName, TimeZoneInfo timeZone, String clientIP, String agent, Boolean logSessionStart) +36
   Terrasoft.Core.AppConnection.InitializeSystemUserConnection(ConfigurationSection schemaManagerProviderConfigurationSection) +172
   Terrasoft.Core.AppConnection.Initialize(ConfigurationSectionGroup appConfigurationSectionGroup) +558
   Terrasoft.WebApp.Loader.Global.InitializeAppConnection() +486
   Terrasoft.WebApp.Loader.Global.Application_Start(Object sender, EventArgs e) +202
 
[HttpException (0x80004005): Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +517
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +185
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +168
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +414
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +369
 
[HttpException (0x80004005): Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +532
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +111
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +714

Помогите советом, что делать? куда копать?

Нравится

7 комментариев

Добрый день, посмотрите настройки IIS, иногда функции отключены по умолчанию. Проверьте наличие галочки

Панель управления - >> Программы - >> Программы и компоненты - >> Включить или отключить функции Windows - >> Внутренние информационные службы

 

 

Добрый день.

Все компоненты установлены.

Evgeny D,

 

обратите внимание, что в требованиях предполагается IIS 7 и выше; а у вас , возможно, стоит более ранняя версия, так же есть в описании ошибки к этому отсылка

System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

Попробуйте обновить IIS 

изначально установлен IIS 10

Если после обновления при логине в систему возникает ошибка вида "Unable to load one or more of the requested types", то вам необходимо установить компонент Microsoft Visual C++ 2010 SP1 Redistributable Package. Загрузить его можно на сайте компании Microsoft по ссылке.

Установка Microsoft Visual C++ 2010 SP1  помогла! огромное спасибо за помощь.  Хочется понять, почему в инструкции не указано, что должен стоять этот компонент. Спасибо!

Нашел заметку, но совсем в другом месте

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

Добрый день.

Для реализации WS воспользовался статьей https://community.terrasoft.ru/questions/polucit-wsdl-konfiguracionnogo-web-servisa

Но там ничего не сказано про заголовок bpmcsrf. 

Есть простой пример как передать soap header, что настроить?

Нравится

5 комментариев

Информация по настройке системы для  защиты от CSRF-атак есть тут.

Как передавать soap header, обсуждалось тут и тут.

Зверев Александр пишет:

Информация по настройке системы для  защиты от CSRF-атак есть тут.

Как передавать soap header, обсуждалось тут и тут.

Мой soap сервис доступен только после авторизации(authservice), поэтому я сгенерил wsdl локально в сборку dll, чтобы можно было вызывать через конс. приложение и не использую как Service Reference. 

Но у меня не получается создать экз. класса  var postRequest1 = new ICLIntegrationAISPTPPServiceClient();

Доступен только ICLIntegrationAISPTPPService.

1) Почему?

2) Что указывать в namespace ? сейчас указал как в примере.

Код класса заголовка ниже.

namespace ICLIntegrationAISPTPPService

{

    using System.ServiceModel.Channels;

    using System.Xml;

    using System.Xml.Serialization;

    public class MyHeader : MessageHeader

    {

        private readonly UsernameToken _usernameToken;

        public MyHeader(string csrfToken)

        {

            _usernameToken = new UsernameToken(string.Empty, csrfToken);

        }

        public MyHeader(string id, string csrfToken)

        {

            _usernameToken = new UsernameToken(id, csrfToken);

        }

        public override string Name

        {

            get { return "BPMCSRF"; }

        }

        public override string Namespace

        {

            get { return "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sece…"; }

        }

        protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)

        {

            XmlSerializer serializer = new XmlSerializer(typeof(UsernameToken));

            serializer.Serialize(writer, _usernameToken);

        }

    }

    [XmlRoot(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-sece…")]

    public class UsernameToken

    {

        public UsernameToken()

        {

        }

        public UsernameToken(string id, string csrfToken)

        {

            Id = id;

            CsrfToken = csrfToken;

        }

        [XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-util…")]

        public string Id { get; set; }

        [XmlElement]

        public string CsrfToken { get; set; }

    }

Также Прикладываю код интерфейса.

using System.Collections.Generic;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Web.Services.Protocols;

namespace ICLIntegrationAISPTPPService

{

    [ServiceContract]

    public interface IService

    {

        [OperationContract]

        GetNewTCRequestListResponse GetNewTCRequestList();

}}

[DataContract]

    public class GetNewTCRequestListResponse

    {

        private List<string> id = new List<string>();

        [DataMember]

        public List<string> result

        {

            get { return id; }

            set { id = value; }

        }

    }

 

В академии есть готовые примеры клиентских C#-программ, работающих с веб-сервисом.

Зверев Александр,

Мне надо использовать именно soap, т.к. там сложные условия выборки и конвертации.

https://community.terrasoft.ru/questions/polucit-wsdl-konfiguracionnogo…;

я хотел использовать данный пример из статьи, но не получается header передать. Мои сервисы почти готовы, т.к. нет смысла переходить на Odata.

Как хотите. В примере настройки есть строки, как отключить защиту от CSRF-атак для одного полностью или его отдельных методов.

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

Добрый день.

Необходимо заменить по всей системе термин Контрагент на Компания.

Точечно понятно, что можно делать в замещающих схемах и Переводах. Проблема в том, что "точек перевода" очень много и в разных склонениях. На первый взгляд порядка тысячи, а может и больше.

Может есть готовые скрипты с массовым переводом?

Нравится

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

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

Так что, лучше продать идею использовать термин "Контрагенты"

Здравствуйте!

В приложении нет подобного функционала. У нас зафиксирована пожелание на данную доработку. Аналитики продукта рассмотрят данную идею и по возможности реализуют в будущих версиях.

Как вариант Вы можете Вы можете написать сложный SQL запрос, который бы перебирал бы все упоминания по ключу и затем update на другое значение. Либо использовать "Переводы".

Здравствуйте. Спасибо за информацию. Не думал, что все так сложно (

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

1. Найти и переименовать соответствующие строки в схемах SysSchema, SysModule, QuickAddMenuItem, SysEntitySchemaReference. Тут обычно все без склонений. Нужно ориентироваться на название и заголовок (Контрагенты и Account соответственно).

2. Найти все нужные строки в схеме: SysLocalizableValue и заменить на новые. Тут есть ряд особенностей: нужно использовать регулярные выражения, чтобы охватить все склонения слов. Более того, иногда нужно учитывать исключительные случаи, когда окончания слов склоняются совсем по разному. Для этого мы расписывали склонения нового термина (привет 6 класс школы) и на основании этих данных составляли SQL скрипт с регулярными выражениями.

Удобно, если есть on-site песочница с доступом к БД. В случае с on-demand всё будет делаться "в слепую" и очень легко ошибиться.

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

 

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

Добрый день!

При разработке добавление файлы и связи столкнулся с проблемой, которая не отображает файлы, добавленную на страницу.Ниже скриншот ошибки. Деталь унаследовал от FileDetailV2. Объект создал унаследованные Файлы и связи база знаний. В таблице Sysdetail и SysModuleEntity, SysModuleEdit добавил записи по объектам. Можете подсказать что я упустил, так как если посмотреть в БД таблицу, то оно заполняется данными.

 

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

 

Нравится

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

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

/**

             * Initializes parent entity.

             */

            initParentEntity: function() {

                this.parentEntity = {};

                var entitySchemaName = this.entitySchema.name;

                var parentSchemaName = entitySchemaName.replace("File", "");

                var masterRecordId = this.get("MasterRecordId");

                this.parentEntity.EntityName = parentSchemaName;

                this.parentEntity.RecordId = masterRecordId;

            },

 var parentSchemaName = entitySchemaName.replace("File", "");

 

Зачем на название объекта завязывать parentSchemaName? Это же вообщее низкий уровень программирование. 

 

 

Добрый день!

В приложении присутствует своя базовая логика (от части в приложении используется DSL -

https://en.wikipedia.org/wiki/Domain-specific_language) и если Вы используйте свои методы реализации, то будьте готовы, что при возникновении ошибок необходимо будет проводить отладку кода.

В статье https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-detali-fayly-i-ssylki описан алгоритм добавления данных и там говориться, что должен использоваться объект [Название объекта раздела]File.

В статье https://academy.terrasoft.ru/documents/technic-sdk/7-12/sozdanie-novogo-razdela описаны как должны называться объекты.

Также Вы можете воспользоваться базовым функционалом – Мастер раздела для создания всех необходимых объектов и привязок на уровне БД.

Мы зафиксировали данное поведение, чтобы в будущем аналитики продукта пересмотрели логику.

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

Добрый день. Добавил новый кейс для продаж, базовый отключил. При сохранении всё добавилось в данные автоматически. Но при переносе пакета на тестовую среду обнаружил, что старый кейс остался включенным. Собственно вопрос. Какие данные ещё нужно обновить, чтобы старый кейс отключился?

Нравится

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

Информацию о кейсах можно посмотреть во view с названием VwSysDcmLib. Там для выяснения активности кейса вызывается функция fn_GetDcmSchemaIsActive. Её текст:

ALTER FUNCTION [dbo].[fn_GetDcmSchemaIsActive](@SchemaId UNIQUEIDENTIFIER)
RETURNS BIT
AS
BEGIN
	DECLARE	@SchemaUserPropertyValue NVARCHAR(MAX) = (SELECT TOP 1 ssup.[Value]
		FROM [dbo].[SysSchemaUserProperty] AS ssup
		WHERE ssup.[SysSchemaId] = @SchemaId
			AND ssup.[Name] = 'Enabled');
	DECLARE @Result BIT;
 
	IF (@SchemaUserPropertyValue IS NOT NULL)
	BEGIN
		SET @Result = (CASE
			WHEN @SchemaUserPropertyValue = 'True'
			THEN 1
			ELSE 0
		END);
	END;
	ELSE
	BEGIN
		SET @Result = (CASE
			WHEN
				(SELECT TOP 1 ssp.[Value]
				FROM [dbo].[SysSchemaProperty] AS ssp
				WHERE ssp.[SysSchemaId] = @SchemaId
					AND ssp.[Name] = 'Enabled') = 'True'
			THEN 1
			ELSE 0
		END);
	END;
	RETURN @Result;
END;

То есть свойство активности кейса хранится в одной из служебных таблиц SysSchemaUserProperty или SysSchemaProperty. У меня — во второй.

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

Добрый день!

 

Специфика работы заказчика находить инвесторов для Инвестпроектов . Инвестпроекты регистрируется в качестве лида. 

Задача состоит в том чтобы после регистрации Лида система сама отфильтровала необходимых инвесторов из раздела контрагента и предоставила выбор для предложения  им инветспроекта.

Напр.  Зарегистрирован Лид, где необходимо найти инвестора для инвестиции в сельское хозяйства.  Система должна найти необходимого инвестора из списка и предоставить для пользователя для дальнейшей обработки.

Я добавил вклаку в лидах, и в этой вкладке добавил 5-6 полей выбора инвесторов (контрагентов). Необходимо сделать так чтобы в момент выбора контрагента система отфильтровала необходимы лиду контрагента.

Заранее благодарю.

Нравится

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

Видимо, нужно разрабатывать что-то подобное механизму подбора продуктов в заказе. Или, ещё боле похоже по смыслу, подбор листингов по лиду в bpm’online real estate (см. стр. 27). И то, и другое — сложная логика, нужно разбираться, как она реализована.

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

Задача: загрузка изменений по контактам в bpm и слияние записей со старыми записями. Поиск дублей справляется идеально, но вручную объединять по 40 000 записей слишком долго. Можно ли как-то объединить все дубли сразу, а не нажимать на каждом в отдельности "выбрать все" - "объединить"?

Нравится

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

Есть дополнение Automatic duplicates merge, которое позволяет в том числе и сливать по расписанию.

1) оно платное

2) задачу сливания всех дублей может ведь решаться простым бизнесс-процессом

Можно и так. Если реализуете свой более простой процесс слияния, можете тоже его опубликовать, бесплатно или по меньшей цене.

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

Добрый день.

Нашли две ссылки на инструкции, которые отличаются довольно сильно:

https://academy.terrasoft.ru/documents/administration/7-12/nastroyka-gl…

https://academy.terrasoft.ru/documents/common/7-12/ustanovka-servisa-gl…

Начали настройку через docker. Хотелось бы получить подтверждение, что это рабочий вариант.

Также в ходе установки возникла ошибка при выполнении команды addSearch. Пишет что не может подключиться к серверу. При этом контейнеры es рабочие (проверено через docker ps -a). Через telnet можно подключиться к серверу по порту 9200. Причина ошибки непонятна.  Согласно инструкции в default-env в параметре GS_ES_URL нужно указывать IP-адрес сервера, на котором развернут docker (в нашем варианты все компоненты, Elastic, RabbitMQ, MySQL развернуты через docker). Так и настроено, но выдается ошибка при addSearch.

Нравится

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

Добрый день!



Для версии 7.11.2 и выше настройка выполняется через docker. Если проблема всё ещё сохраняется, создайте обращение в техническую поддержку. 

Как решили проблему?

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

Всем доброго времени суток. Версия 7.12.

Добавили пользовательский раздел в хронологию у контакта, всё по инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-12/kak-sozdavat-pl…

Остался неясен один момент: как исправить заголовок в фильтре, и почему сдвинута иконка?

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

Раздел создан целиком через мастер разделов, иконку добавляли в svg.

Нравится

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

По заголовку, наверняка это задаётся в разделе переводов. Например, стандартные «Ссылки» с приведенного скриншота там как «Data:TimelineTileSetting.Name:09a6dad5-036b-4075-a813-e8278a5360ea».

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

А что в итоге оказалось? У нас точно такой же эффект

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

Добрый день! 



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



Рассмотрели возможные варианты:

1. Default rights на Activity

2. Allow shared access в настройках почтового ящика

3. Access rights в настройках почтового ящика

Но всё равно в письме появляется не только владелец почтового ящика (что, наверное, логично), но и All employees, от которых надо избавиться





И второй вопрос - почему на исходящие письма с общего почтового ящика не действует такое же распределение прав? Там только автор права получает

Нравится

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

Владимир, нужно искать в скриптах то место, где при синхронизации создаётся запись. Видимо, там выдаются и права. Смотрите в сторону LoadExchangeEmailsProcess, из него ExchangeUtility, ExchangeEmailSyncProvider, ExchangeEmailMessage. Возможно, это тут (в последней):

public Activity GetActivityInstance(SyncContext context, LocalItem localItem, EntitySchema schema,
	Exchange.EmailMessage message, string subject) {
	var instance = (Activity)schema.CreateEntity(context.UserConnection);
	SyncEntity instanceSync = GetActivityInstanceSync(context, message, subject, instance);
	if (instanceSync.Action != SyncAction.Create &amp;&amp; !context.UserConnection.GetIsFeatureEnabled("MailboxRightsForEmail")) {
UpdateEmailRelations(context.UserConnection, instance);
	}
	localItem.AddOrReplace(schema.Name, instanceSync);
	return instance;
}

 

Краткое резюме - этих настроек оказалось достаточно. Просто, система не сразу реагировала на их изменение. И получая письма в течение нескольких минут после изменения, всё ещё действовали старые настройки.

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