Вопрос

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

"Не удалось загрузить файл на сервер"

Решение темы https://community.terrasoft.ru/questions/ustanovka-paketov-iz-prilozenia не помогло, в чем еще может быть проблема?

У меня такой же вопрос

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

У меня такой же вопрос

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

Добрый день, вам через svn перенести бы изменения

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

UPDATE [Название БД].[dbo].[SysPackage]
    SET InstallType = 0, [IsChanged] = 1, [IsLocked] = 1
    WHERE Name = 'Название пакета'
 
В некоторых случаях может потребоваться еще изменение значения Maintainer на Customer

 

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

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

Хочу дополнительно по определенным сложным условиям фильтровать Результат в активности.

Единственным способом мне видится lookupListConfig filters. 

Вопрос - как корректно вызвать родительские фильтры, чтобы не копипастить их в свой код?

У меня такой же вопрос

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

Все зависит от того, каким образом реализованы родительские фильтры.

Не так давно уже обсуждали подобную тему здесь.

Если бы родительские фильтры были вынесены в отдельный метод, тогда можно было бы просто Ваш метод унаследовать от родительского и в нём вызвать callParent.

Но так как, к сожалению, это не так, Вам прийдется дублировать родительские фильтры в своем коде sad

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

Здравствуйте! Подскажите, как можно реализовать редактор шаблонов для текстовых сообщений(без html). Функционал как у email шаблонов но без изображений, html и прочих не текстовых элементов. Пробовали скопировать отдельно кнопку вставки макроса, а также пытались переделать сам редактор - была идея выключить html режим в ckeditor. Не разобрались как это реализовать, кнопку вставки макросов отдельно скопировать не удалось тк для нее необходимы параметры конфигурации и другие элементы которые зависят от редактора шаблонов email. Требуется только функционал вставки макросов (единственная кнопка из редактора). Текст сообщения допустимо размещать в обычном текстовом поле.

У меня такой же вопрос

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

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

Либо же использовать дизайнер HTML-шаблонов, а при сохранении очищать текст от тегов, как при генерации темы обращения по письму.

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

1. Фильтрация лукапа такое же как и в обычной карточке?

Вот такой код:

"UsrLookup2": {
                lookupListConfig: {
                    filter: function() {
                        var filters = new Terrasoft.createFilterGroup();
                        filters.name = "CategoryFilter";
                        filters.logicalOperation = Terrasoft.core.enums.LogicalOperatorType.AND;
                        filters.isEnabled = true;
                        filters.addItem(Terrasoft.createColumnFilterWithParameter(
                            Terrasoft.ComparisonType.NOT_EQUAL, "МоеПоле", ""));
                        //filters.addItem(Terrasoft.createIsNotNullFilter("МоеПоле"));
                        return filters;
                    }
                }
            }

Не срабатывает - в окне выбора остаются записи которые должны были пропасть, кроме того в запросе к БД - нет такого фильтра

2. Можно ли по нажатии на кнопку прорисовать новое поле? нажимать можно неограниченное кол-во раз, создать много полей, задизейблить и потом откривать - не вариант

У меня такой же вопрос

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

По фильтрации попробуйте вместо Вашего кода написать таким образом:

"UsrLookup2": {
                lookupListConfig: {
                    filter: function() {
                        var filters = new Terrasoft.createFilterGroup();
                        filters.logicalOperation = Terrasoft.core.enums.LogicalOperatorType.AND;
                        filters.isEnabled = true;
                        filters.add("CategoryFilter", Terrasoft.createColumnFilterWithParameter(
                            Terrasoft.ComparisonType.NOT_EQUAL, "МоеПоле", ""));
                        //filters.addItem(Terrasoft.createIsNotNullFilter("МоеПоле"));
                        return filters;
                    }
                }
            }

 

По второму вопросу посмотрите обсуждение здесь.

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

По первому - не помогло. Еще заметил, что не могу запустить серверный код! ошибка 500, вот код: 

	var config1 = {
					serviceName: "ShowReport1CService",
					methodName: "CreateReport3",
					callback: function(response) {
						var result = response.CreateReport3Result;
					},
					data: {
					},
					scope: this,
					timeout: 1000000
				};
				ServiceHelper.callService(config1);

и на стороне сервера

[OperationContract]
		[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped,
		ResponseFormat = WebMessageFormat.Json)]
		public string CreateReport3()
		{
			return "asd";

В чем моя ошибка?

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

Запускаем БП - в нем нужно прописать выгрузку FileStream или byte[] как обычный файл, чтобы после выполнения кода - началась загрузка файла

У меня такой же вопрос

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

Точно БП? В таком случае делать аналогично тому, как работает скачивание отчётов. Примерно:

1) Бп генерирует файл, складирует в IDataStore по определённому ключу (допустим генерируется guid). Далее из бп высылается сообщение на клиент с ключом.

2) Клиент принимает сообщение, снова обращается на сервер, но уже за скачиванием.

3) На сервере надо написать класс и функцию, которая будет возвращать стрим с дополнительными header-ами.

Всроде все. Можно вместо БП использовать сервис и тогда просто делать return ключа и не гемороиться с сообщениями.

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

тоесть нет простого пути(

БП мне нужен только для открития преднастроенной страницы, ее из клиента можно както открить?

Радчук Виталий Владимирович,

Можно.

onSalesDesktopV2: function() {
    var token = "CardModuleV2/UsrAwaitingPageV2";
    this.sandbox.publish("PushHistoryState", {hash: token});
}

 

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

Добрый день! 

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

Данную задачу я решил разбить на две, первая есть добавление самой детали(1), вторая уже реализация группирования(2).

1.

1.1 Для добавления детали я добавил "схема модели представления детали с реестром".

1.2 Унаследовал ее от "FileDetailV2 ( UIv2 )".

1.3 Добавил следующий код: 

define("UsrDocumentsFileDetail", [],
    function() {
		return {
			entitySchemaName: "UsrDocumentsListImage"
		};
	}
);

1.4 Затем я добавил объект "UsrDocumentsListImage" унаследовав его от "Файл ( Base )".

В объект добавил Lookup на форму, на которой будет отображаться создаваемая деталь. Подробная структура объекта:

[Id],
[CreatedOn],
[CreatedById],
[ModifiedOn],
[ModifiedById],
[Name],
[Notes],
[LockedById],
[LockedOn],
[Data],
[TypeId],
[Version],
[Size],
[ProcessListeners],
[UsrApplicationFormId] -- Lookup на форму для отображения детали

1.5 На модель страницы формы я добавил следующий код: 

details: {
    // Настройка детали [(Просмотр изображений)Документы]
    "UsrDocumenctImageViewDetailElement": {
	    "schemaName": "UsrDocumentsFileDetail",
	    "filter": {
		    "detailColumn": "UsrApplicationForm",
		    "masterColumn": "Id"
    	}
    }
},
diff: [
    {
        {
			"operation": "insert",
			// Название детали.
			"name": "UsrDocumenctImageViewDetailElement",
			"values": {
				"itemType": Terrasoft.core.enums.ViewItemType.DETAIL,
				"markerValue": "added-detail"
			},
			// Контейнеры, в котором размещена деталь.
			// Деталь размещена на вкладке [ДОКУМЕНТЫ И ФОТО].
			"parentName": "Tabd3595bedTabLabel",
			"propertyName": "items",
			// Индекс в списке добавляемых элементов.
			"index": 1
		}
    }
]

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

Лог консоли браузера: 

Error while sending request 
	response status: 500 (ItemNotFoundException)
	request url: ../DataService/json/SyncReply/SelectQuery
	method: POST
	request data: {"rootSchemaName":"UsrDocumentsListImage","operationType":0,"filters":{"items":{"211c1207-255e-48c2-8eb6-e011b92fdfc6":{"filterType":1,"comparisonType"...
 
Uncaught{message: "Элемент коллекции с именем UsrDocumentsListImage не найден"}
 
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: http://localhost:83/0/configuration/d79cf7d52ccb236d2d57879ca34250e6ru-RU/FileDetailV2.js
 line: 183
 column: 7
 message: Uncaught Terrasoft.UnknownException: Элемент коллекции с именем UsrDocumentsListImage не найден 
 date: Mon Nov 12 2018 17:05:55 GMT+0300 (Москва, стандартное время)
 stack: undefined

Вопрос: 

Как исправить данную проблему и что означает данная ошибка? 

У меня такой же вопрос

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

Добрый день, а в таблице все поля корректно заполняются?

Попробуйте в объекте UsrDocumentsListImage переименовать поле UsrApplicationForm на UsrDocumentsListImage, возможно дело кроется в методе initParentEntity 

Колодяжный Владислав Эдуардович,

Спасибо за Ваш ответ! 

Заполняется все кроме  lockedById([uniqueidentifier] NULL) и lockedOn([datetime2](7) NULL). 

В случае переименования в объекте UsrDocumentsListImage поля UsrApplicationForm на UsrDocumentsListImage компилятор ругается:

Элемент c идентификатором "UsrDocumentsListImage" уже существует
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги, добрый день.

Пытаюсь настроить Visual Studio для разработки отдельных модулей исходного кода без перекомпиляции всей структуры как описано в статье https://academy.terrasoft.ru/documents/technic-sdk/7-13/razrabotka-konf…

Настроил всё по инструкции, Debug успешно запускается, но при обращении к свойствам EntitySchemaManager, например, прямо на первой строке примера из статьи:

 var schema = userConnection.EntitySchemaManager.GetInstanceByName("Contact");

получаю ошибку 

Exception: Exception thrown: 
'Terrasoft.Common.ArgumentNullOrEmptyException' in Terrasoft.Common.dll 
("Value for argument "outputDirectory" must be specified."). 

Может кто-то уже сталкивался с подобным? Подскажите что за outputDirectory и где его нужно его указать?
 

У меня такой же вопрос

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

Было похожее,  в ходе тестирования было выявлено, что проблемы возникали из-за параметра:

<add key="Feature-UseRuntimeEntitySchemaMetadata" value="true" /> 

в  Terrasoft.Tools.WorkspaceConsole.exe.config.
При значении false отладка работает.

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

Спасибо большое! Да, это действительно решает проблему, не знаю сколько времени ушло бы чтобы самому это найти.

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

Добрый день!

Хочется узнать идеологическое обоснование того, что сейчас к лиду привязана только одна продажа.

Как лучше управлять ситуацией, когда первая продажа закончилась неуспешно, а лид вернули на взращивание. И через некоторое время лид отправляется снова на продажу.

В итоге привязка первой продажи к лиду пропадает.

Ваше мнение, как корректнее было бы управлять такими ситуациями?

У меня такой же вопрос

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

Я бы предложила при возврате лида - оставить его для истории. А для работы создать новый лид . Ведь если лид не закончился продажей - значит необходимо поменять условия и тактику. Это уже можно назвать новым лидом. Возможно создать "Родительский лид" и связать его со всеми дочерними.

Так можно решить проблему и цитата: "...И в рамках одной потребности можем получать лиды на 10 вебинаров, 5 white page и по другим каналам  Причём, от разных контактов..." Привяжите их к "родителю". для "родительского лида" создайте отчетные поля.

Как вариант вести историю изменений, либо переделать все связи между лидом и продажей (и загляуть в процессы)

О лидах и продажах описано тут.

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

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

Эту логику мы читали. Просто, и так слишком много лидов генерируется, пока один клиент с одной потребностью разбирается  А тут ещё один лид без сохранения истории создадим. 

Можно настроить в разделе фильтрацию, чтобы не видеть не интересующие лиды.

У меня больше идеологические расхождения. 

Что мы взращиваем - потребность (может быть много разных лидов) или конкретную заявку (лид в системе) 

И в рамках одной потребности можем получать лиды на 10 вебинаров, 5 white page и по другим каналам  Причём, от разных контактов.

Но сейчас нужно их дисквалифицировать, чтобы не было дубликатов. Немного теряется стройность в реальном мире 

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

Я бы предложила при возврате лида - оставить его для истории. А для работы создать новый лид . Ведь если лид не закончился продажей - значит необходимо поменять условия и тактику. Это уже можно назвать новым лидом. Возможно создать "Родительский лид" и связать его со всеми дочерними.

Так можно решить проблему и цитата: "...И в рамках одной потребности можем получать лиды на 10 вебинаров, 5 white page и по другим каналам  Причём, от разных контактов..." Привяжите их к "родителю". для "родительского лида" создайте отчетные поля.

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

Есть проблема: При удалении записи(допустим контакта) нужно сделать обработку контрагента этого контакта. Можно ли в БП как то узнать контрагента этого контакта? И если нет, то как вообще это сделать? Только на стороне клиента?

У меня такой же вопрос

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

В объекте можно отловить событие Deleted (После удаления записи). В БД записи уже не будет, но из текущей Entity вы еще сможете получить контрагента.

Entity.GetTypedColumnValue<Guid>("AccountId");

Добрый день. Нужно на уровне объекта Контакт (в данном случае) создать событийный процесс сигналом для начала которого будет сообщение "Перед удалением записи" (ContactDeleting) , там считать данные этой записи (контрагента) и выполнить какую-то логику, это будет происходить все на сервере

Либо в БП просто началом процесса назначить сигнал "Удаление записи" 

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

Колодяжный Владислав Эдуардович,

перед удалением - это 100% удаление потом будет?

Обработка контрагента происходит на основании оставшихся контактов. В принципе, можно исключить с обработки этот контакт, но если удаление не произойдет?

В БП после события удаления я могу влепить элемент чтения(прочитать поле контрагент) потом посчитать к примеру кол-во контактов в контрагенте - посчитает с удаленным или без?

В объекте можно отловить событие Deleted (После удаления записи). В БД записи уже не будет, но из текущей Entity вы еще сможете получить контрагента.

Entity.GetTypedColumnValue<Guid>("AccountId");

Радчук Виталий Владимирович,

В БП посчитает с "удаленным". Как раз недавно столкнулся. (Физически запись еще не удалена). Оптимальным решением будет написание логики в объекте на событии "После удаления записи".

Добавить комментарий

Пащенко Александр Сергеевич пишет:

то что нужно! 

Радчук Виталий Владимирович пишет:
В БП после события удаления я могу влепить элемент чтения(прочитать поле контрагент) потом посчитать к примеру кол-во контактов в контрагенте - посчитает с удаленным или без?

Считайте количество контактов, без учёта (AND Id <>...) Id удаляемой записи , получаемого в сигнале

Войдите или зарегистрируйтесь, чтобы комментировать