При нажатии Shift или Ctrl + ПКМ на детали включается множественный выбор. 

Какой метод нужно отключить конструкцией : Terrasoft.emptyFn?

Нравится

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

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

{
	"operation": "merge",
	"name": "DataGrid",
	"values": {
		"multiSelect": false,
	}
}

 

В гриде детали.

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

{
	"operation": "merge",
	"name": "DataGrid",
	"values": {
		"multiSelect": false,
	}
}

 

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

Наш бизнес построен так, что мы продаем с одной стороны компаниям, с другой стороны клиентам.

Необходимо создать 2 независимые воронки есть ли такая возможность?

Нравится

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

Евгений, используйте функционал дизайнера кейсов. Он позволит вам добавить неограниченное количество воронок в зависимости от типа продаж(например). Почитать подробнее можно здесь https://academy.terrasoft.ru/documents/technic-bpms/7-16/nachalo-raboty…

Евгений, используйте функционал дизайнера кейсов. Он позволит вам добавить неограниченное количество воронок в зависимости от типа продаж(например). Почитать подробнее можно здесь https://academy.terrasoft.ru/documents/technic-bpms/7-16/nachalo-raboty…

Сидоров Александр Валерьевич, спасибо большое!

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

Добрый день!

Как можно исправить эту ошибку возникшую при компиляции системыИзображение удалено.

Нравится

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

Добрый день, уважаемые коллеги!

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

Задача - на страницу редактирования Активности в мобильном приложении добавить бизнес-правило (доступность). В какой схеме необходимо прописать новое бизнес-правило?

Есть образованные при настройке мастером мобильного приложения кастомные

MobileApplicationManifestFieldForceWorkplace и MobileActivityRecordPageSettingsFieldForceWorkplace.

Правильно ли я понимаю, что шаги должны быть следующие:

  1. Создать схему клиентского модуля, в которой прописать новое бизнес-правило. Схема должна расширить кастомную MobileActivityRecordPageSettingsFieldForceWorkplace? Как правильно связать новую схему с MobileActivityRecordPageSettingsFieldForceWorkplace?
  2. Подключить созданную схему модуля в манифесте мобильного приложения MobileApplicationManifestFieldForceWorkplace

И еще вопрос: в каком случае следует использовать классы бизнес-правил , а в каком пользовательские бизнес-правила.

Благодарю за помощь

Нравится

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

Вообще, бизнес-правила для разных разделов добавляют в схемы с названиями ...ModelConfig, вроде MobileActivityModelConfig. Например, в ней стандартно такое:

Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['Number'],
	position: 0
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['CommunicationType'],
	position: 1
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Filtration,
	triggeredByColumns: ['CommunicationType'],
	position: 2,
	filters: Ext.create('Terrasoft.Filter', {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create('Terrasoft.Filter', {
				property: 'UseforContacts',
				value: true
			}),
			Ext.create('Terrasoft.Filter', {
				property: 'Id',
				funcType: Terrasoft.FilterFunctions.NotIn,
				funcArgs: [Terrasoft.GUID.Twitter, Terrasoft.GUID.Facebook, Terrasoft.GUID.LinkedIn]
			})
		],
		name: 'a4265c53-b393-4e16-be5f-ee0e5a7faa8c'
	})
});

 

По базовым бизнес-правилам можно тут документацию с примерами почитать

https://academy.terrasoft.ru/documents/technic-sdkmob/7-16/biznes-pravila-mobilnogo-prilozheniya

А тут по кастомным

https://academy.terrasoft.ru/documents/technic-sdkmob/7-16/polzovatelskie-biznes-pravila-mobilnogo-prilozheniya

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

 

 

Бершеда Д. Н.,

Благодарю за информацию и помощь, но правильно ли я понимаю порядок работы со схемами для добавления бизнес-правила?  Если нет возможности наследования, я должна создать клиентский модуль для своего бизнес-правила, который прописать в манифесте? 

Вообще, бизнес-правила для разных разделов добавляют в схемы с названиями ...ModelConfig, вроде MobileActivityModelConfig. Например, в ней стандартно такое:

Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['Number'],
	position: 0
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['CommunicationType'],
	position: 1
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Filtration,
	triggeredByColumns: ['CommunicationType'],
	position: 2,
	filters: Ext.create('Terrasoft.Filter', {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create('Terrasoft.Filter', {
				property: 'UseforContacts',
				value: true
			}),
			Ext.create('Terrasoft.Filter', {
				property: 'Id',
				funcType: Terrasoft.FilterFunctions.NotIn,
				funcArgs: [Terrasoft.GUID.Twitter, Terrasoft.GUID.Facebook, Terrasoft.GUID.LinkedIn]
			})
		],
		name: 'a4265c53-b393-4e16-be5f-ee0e5a7faa8c'
	})
});

 

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

 

Александр, спасибо за пояснения. Но никак не разберусь).

Имеется решение Sales Enterprise + Field Force. Цель изменить поведение стандартного бизнес-правила Активности заполнения Результата, применив сверху стандартного правила и внешнего пакета. Стандартное бизнес-правило прописано в MobileActivityModelConfig (пакет Mobile) - разрешать редактирование поля Result , если состояние активности имеет признак Конечное. Стандартное правило не именовано,т.е. просто отключить его нельзя

Есть FieldForceMobileActivityModelConfig (пакет FieldForceMobile), где изменяется стандартное бизнес-правило в отношении поля DetailedResult. 

Есть MobileApplicationManifestFieldForceWorkplace (пакет FieldMobile), где для модели Activity прописаны "ModelExtensions":

["MobileActivityModelConfig" (стандартные правила),

"FieldForceMobileActivityModelConfig" (добавленные правила внешнего пакета)]

Есть MobileApplicationManifestFieldForceWorkplace (пакет Custom), создан автоматически с признаком «замещать родителя» да.

Создаю свой модуль UsrFieldForceMobileActivityModelConfig, где прописываю свое бизнес-правило, и затем в MobileApplicationManifestFieldForceWorkplace (пакет Custom), добавляю в "ModelExtensions" свой модуль UsrFieldForceMobileActivityModelConfig

И никак не могу добиться работы своего бизнес-правила (либо работает стандартное, либо ничего не работает :)). Т.е. каким образом можно переопределить стандартное неименованное бизнес-правило на свое?

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

 

Благодарю за помощь) разобралась

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

Всех приветствую.

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

Интересует пользовались ли уже реализованными в базовой версии методами или разрабатывали свои и почему был сделан такой выбор?

Нравится

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

Например, был опыт с попытками починить календарь в 3.3.2, когда при нестандартных настройках начала недели в Windows вел себя странно.

 

Алла, а в чём твой вопрос по нынешнему календарю? Есть какие-то пожелания по доработке в новых версиях «коробки» или в отдельных дополнениях?

 

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

 

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

Алла, есть справочник:

В продуктах Creatio service enterprise, customer center и bank customer journey в справочнике [Календари] можно настроить разные виды календарей, используемых в процессе обслуживания клиентов, в соответствии с условиями их сервисных договоров. Например, если ваши клиенты и сотрудники службы поддержки находятся в разных часовых поясах, настроенный календарь позволит избежать рассогласования при обработке обращений. В продуктах Creatio customer center и bank customer journey справочник используется при заполнении страницы сервиса, а в продукте Creatio service enterprise — сервисного договора.

В продукте Creatio sales enterprise в справочнике [Календари] можно настроить разные виды календарей, используемых при планировании визитов торговых представителей. Справочник используется приложениями Field force и Pharma, доступными в Creatio marketplace, при заполнении профиля пользователя и страницы врача.

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

 

Во-первых, меня интересовала версия 7.16 (в тегах было указано), а не 3.3.2) Во-вторых, как и больше, чем полгода назад интересует реализованы ли базовые функции для работы с календарями, например, по определенному календарю за определенный интервал времени определить количество рабочих дней, получить все рабочие вторники или получить количество выходных, кроме субботы и воскресенья.

P.S. Сейчас меня интересует последняя актуальная версия 7.17.

Как можно получить рабочий ли день в новом расчете сроков (без устаревшей и неподдерживаемой библиотеки CalendarUtils)? Если по дню недели — то так. У нас есть таблица DayType. У неё есть признак NonWorking. C таблицей dayofweek она связана через DayInCalendar. Напрямую публичного метода, который выдавал бы этот признак, у нас нет. Примеры можно посмотреть в методах FillWeekTemplate и FillDayOffInfo в классе CalendarDataStore.

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

Добрый день!

 

После обновления до 7.16.0 возникает ошибка "

 message: Uncaught Terrasoft.UnsupportedTypeException: Message NavigateTo is not defined in ConfigurationViewModul" (см. скриншот).

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



Как ее можно исправить? Эта ошибка связана с каким-то дополнительным модулем? Что-то еще?

 

Спасибо!

Нравится

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

У меня в 7.16 в ConfigurationViewModule есть это сообщение:

/**
 * @inheritdoc Terrasoft.BaseSchemaModule#getMessages
 * @protected
 * @overridden
 */
getMessages: function() {
	const messages = {
		"NavigateTo": {
			mode: Terrasoft.MessageMode.BROADCAST,
			direction: Terrasoft.MessageDirectionType.SUBSCRIBE
		}
	};
	const parentMessages = this.callParent(arguments);
	return Ext.apply(messages, parentMessages);
},
 
...
/**
 * @inheritDoc Terrasoft.configuration.BaseViewModule#subscribeMessages
 * @overridden
 */
subscribeMessages: function() {
	this.callParent(arguments);
	const sandbox = this.sandbox;
	sandbox.subscribe("SideBarModuleDefInfo", this.onSideBarModuleDefInfo, this);
	sandbox.subscribe("ShowHideRightSidePanel", this.onShowHideRightPanel, this);
	sandbox.subscribe("SideBarVisibilityChanged", this.onSideBarVisibilityChanged, this);
	const navigationHelper = this.Ext.create("Terrasoft.NavigationHelper", {
		Ext: this.Ext,
		sandbox: sandbox
	});
	sandbox.subscribe("NavigateTo", navigationHelper.navigateTo, navigationHelper);
},

И в 7.15.3 тоже, эта схема не менялась.

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

Здравствуйте, Мария!

Из-за приложения Smart Context for Creatio не работает вход в систему.

Для исправления нужно в BaseViewModule в пакете  smartLogin заменить инит на тот что ниже и добавить метод _initMessages и getMessages (тоже есть ниже): 

init: function(callback, scope) {
        this._initMessages();
        Terrasoft.chain(
          this.initSysSettings,
          this.initViewConfig,
          this.initHomePage,
          function() {
            this.subscribeMessages();
            callback.call(scope);
          },
          this
        );
      },
      _initMessages: function() {
        const messages = this.getMessages();
        if (!messages) {
          return;
        }
        this.sandbox.registerMessages(messages);
      },
      getMessages: Terrasoft.emptyFn,



 

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

Добрый день! При формировании такой структуры получаю NotSupportedException(внутри None):

 

{
    "QueryType": 1,
    "IsForceUpdate": false,
    "IsUpsert": false,
    "Filters": {
        "RootSchemaName": null,
        "FilterType": 0,
        "ComparisonType": 0,
        "LogicalOperation": 0,
        "IsNull": true,
        "IsEnabled": true,
        "IsNot": false,
        "SubFilters": null,
        "Items": {
            "primaryColumnFilter": {
                "FilterType": 1,
                "ComparisonType": 3,
                "LogicalOperation": 0,
                "IsNull": true,
                "IsEnabled": true,
                "IsNot": false,
                "SubFilters": null,
                "Items": null,
                "LeftExpression": {
                    "ExpressionType": 1,
                    "ColumnPath": null,
                    "Parameter": null,
                    "FunctionType": 1,
                    "MacrosType": 34,
                    "FunctionArgument": null,
                    "DatePartType": 0,
                    "AggregationType": 0,
                    "AggregationEvalType": 0,
                    "SubFilters": null
                },
                "RightExpression": {
                    "ExpressionType": 2,
                    "ColumnPath": null,
                    "Parameter": {
                        "DataValueType": 0,
                        "Value": "310ef086-1e11-4290-9c4e-90e78df4d69a",
                        "ArrayValue": null,
                        "ShouldSkipConvertion": false
                    },
                    "FunctionType": 0,
                    "MacrosType": 0,
                    "FunctionArgument": null,
                    "DatePartType": 0,
                    "AggregationType": 0,
                    "AggregationEvalType": 0,
                    "SubFilters": null
                },
                "RightExpressions": null,
                "RightLessExpression": null,
                "RightGreaterExpression": null,
                "TrimDateTimeParameterToDate": false,
                "Key": null,
                "IsAggregative": false,
                "LeftExpressionCaption": null,
                "ReferenceSchemaName": null
            }
        },
        "LeftExpression": null,
        "RightExpression": {
            "ExpressionType": 2,
            "ColumnPath": null,
            "Parameter": {
                "DataValueType": 0,
                "Value": "310ef086-1e11-4290-9c4e-90e78df4d69a",
                "ArrayValue": null,
                "ShouldSkipConvertion": false
            },
            "FunctionType": 0,
            "MacrosType": 0,
            "FunctionArgument": null,
            "DatePartType": 0,
            "AggregationType": 0,
            "AggregationEvalType": 0,
            "SubFilters": null
        },
        "RightExpressions": null,
        "RightLessExpression": null,
        "RightGreaterExpression": null,
        "TrimDateTimeParameterToDate": false,
        "Key": null,
        "IsAggregative": false,
        "LeftExpressionCaption": null,
        "ReferenceSchemaName": null
    },
    "QueryId": null,
    "QueryKind": 0,
    "ColumnValues": {
        "Items": {
            "UsrName": {
                "ExpressionType": 2,
                "ColumnPath": null,
                "Parameter": {
                    "DataValueType": 1,
                    "Value": "name96ae3de9-f90f-46a9-8b57-afeebedd6499",
                    "ArrayValue": null,
                    "ShouldSkipConvertion": false
                },
                "FunctionType": 0,
                "MacrosType": 0,
                "FunctionArgument": null,
                "DatePartType": 0,
                "AggregationType": 0,
                "AggregationEvalType": 0,
                "SubFilters": null
            },
            "UsrSalesFunnelStage": {
                "ExpressionType": 2,
                "ColumnPath": null,
                "Parameter": {
                    "DataValueType": 10,
                    "Value": "d136a6533-ee2b-4b4b-9366-ffe375568691",
                    "ArrayValue": null,
                    "ShouldSkipConvertion": false
                },
                "FunctionType": 0,
                "MacrosType": 0,
                "FunctionArgument": null,
                "DatePartType": 0,
                "AggregationType": 0,
                "AggregationEvalType": 0,
                "SubFilters": null
            },
            "UsrPartnerType": {
                "ExpressionType": 2,
                "ColumnPath": null,
                "Parameter": {
                    "DataValueType": 10,
                    "Value": "4397d6d7-0b95-43e6-9261-d01df863724f",
                    "ArrayValue": null,
                    "ShouldSkipConvertion": false
                },
                "FunctionType": 0,
                "MacrosType": 0,
                "FunctionArgument": null,
                "DatePartType": 0,
                "AggregationType": 0,
                "AggregationEvalType": 0,
                "SubFilters": null
            },
            "Id": {
                "ExpressionType": 2,
                "ColumnPath": null,
                "Parameter": {
                    "DataValueType": 0,
                    "Value": "310ef086-1e11-4290-9c4e-90e78df4d69a",
                    "ArrayValue": null,
                    "ShouldSkipConvertion": false
                },
                "FunctionType": 0,
                "MacrosType": 0,
                "FunctionArgument": null,
                "DatePartType": 0,
                "AggregationType": 0,
                "AggregationEvalType": 0,
                "SubFilters": null
            }
        }
    },
    "RootSchemaName": "UsrPartnersTest",
    "IncludeProcessExecutionData": true
}

все происходит в облаке

Нравится

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

Евгений, а что это за запрос был? Его формировали программно в коде или сгенерировался при работе с клиентской ESQ?

Смущает пустой RootSchemaName сверху, дважды переданный RightExpression с Guid (и третий раз он же как колонка). Я для пробы поменял значение в какой-то карточке, сохранил, у меня запрос к сервису совсем не такой вышел.

 

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

это BaseQuery сериализованный 

Terrasoft.Nui.ServiceModel.DataContract.BaseQuery, я заполнил структуру так (т к в документации нет примера):
var query = new UpdateQuery
            {
                IncludeProcessExecutionData = true,
                RootSchemaName = schemaName,
                ColumnValues = new ColumnValues
                {
                    Items = new Dictionary<string, ColumnExpression>()
                }
            };
 
 query.Filters = new Filters
            {
                RightExpression = new BaseExpression
                {
                    ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                    Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter
                    {
                        DataValueType = DataValueType.Guid,
                        Value = id
                    }
                },
                Items = new Dictionary<string, Filter>
                {
                    {
                        "primaryColumnFilter", new Filter()
                        {
                            FilterType = FilterType.CompareFilter,
                            ComparisonType = FilterComparisonType.Equal,
                            IsEnabled = true,
                            LeftExpression = new BaseExpression
                            {
                                FunctionType = FunctionType.Macros,
                                ExpressionType = EntitySchemaQueryExpressionType.Function,
                                MacrosType = (EntitySchemaQueryMacrosType) 34,
                            },
                            RightExpression = new ColumnExpression
                            {
                                ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                                Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter
                                {
                                    DataValueType = DataValueType.Guid,
                                    Value = id
                                }
                            }
                        }
                    }
                }
            };
 
            foreach (var parameterPair in operation.Parameters)
            {
                var columnExpression = new ColumnExpression
                {
                    ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                    Parameter = new Terrasoft.Nui.ServiceModel.DataContract.Parameter
                    {
                        Value = parameterPair.Value.Value,
                        DataValueType = parameterPair.Value.Type,
                    }
                };
 
                query.ColumnValues.Items.Add(parameterPair.Value.Name, columnExpression);
            }

 

 

 

 

 

 

 

Всё равно не совсем понятно, почему сделали именно так.

Вы делаете внешний софт на C#, работающий с сервисами системы?

Документация по запросам обновления и фильтрам есть в академии.

Если же делаете внутри скриптов БП, то можно просто использовать класс Update.

Посмотреть структуру правильного запроса можно, проделав в интерфейсе аналогичное и записав, что ушло на сервер.

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

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

 

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

{
   "rootSchemaName":"ContactAddress",
   "operationType":2,
   "includeProcessExecutionData":true,
   "filters":{
      "items":{
         "primaryColumnFilter":{
            "filterType":1,
            "comparisonType":3,
            "isEnabled":true,
            "trimDateTimeParameterToDate":false,
            "leftExpression":{
               "expressionType":1,
               "functionType":1,
               "macrosType":34
            },
            "rightExpression":{
               "expressionType":2,
               "parameter":{
                  "dataValueType":0,
                  "value":"9ce6c7ce-5ae4-df11-971b-001d60e938c6"
               }
            }
         }
      },
      "logicalOperation":0,
      "isEnabled":true,
      "filterType":6
   },
   "columnValues":{
      "items":{
         "Zip":{
            "expressionType":2,
            "parameter":{
               "dataValueType":1,
               "value":"105122"
            }
         }
      }
   },
   "isForceUpdate":false
}

 

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

остальные поля просто выходят в результате стерилизации BaseQuery от Terrasoft. Если его нужно использовать как-то иначе - дайте знать. Не хочется делать свой класс, учитывая что в библиотеке уже есть готовый

Горянин Евгений Юрьевич пишет:

остальные поля просто выходят в результате стерилизации BaseQuery от Terrasoft.

Но Вы же сами написали, что заполняете так. Зачем там два раза  RightExpression и подобное?

 

Может, лучше интеграцию по OData, как тут:

ИЗМЕНЕНИЕ СУЩЕСТВУЮЩЕГО ОБЪЕКТА

public static void UpdateCreatioEntityByOdatetWcfExample()
{
    // Создание контекста приложения Creatio.
    var context = new Creatio(serverUri);
    // Определение метода, который добавляет аутентификационные cookie при создании нового запроса.
    context.SendingRequest += new EventHandler<SendingRequestEventArgs>(OnSendingRequestCookie);
    // Из коллекции контактов выбирается тот, по которому будет изменяться информация.
    var updateContact = context.ContactCollection.Where(c => c.Name.Contains("Test")).First();
    // Изменение свойств выбранного контакта.
    updateContact.Notes = "New updated description for this contact.";
    updateContact.Phone = "123456789";
    // Сохранение изменений в модели данных сервиса.
    context.UpdateObject(updateContact);
    // Сохранение изменений данных в Creatio одним запросом.
    var responces = context.SaveChanges(SaveChangesOptions.Batch);
}

 

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

ну переделывать общий процесс под OData теперь уже нет возможности. с Select и Insert проблем не возникло, нужен какой-то пример на c# с использованием Update

На C# с запросами к данным работают либо через OData (во внешнем софте) либо внутри конфигурации системы через классы EntitySchemaQuery или Select/Insert/Update/Delete.

 

В Вашем случае это какой-то ещё один вариант. Если разобрались с Select и Insert, наверное и Update можно, чтобы в итоге к сервису уходил JSON, аналогичный отправляемому из браузера.

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

Мы с нетерпением ждём версионности писем в 7.17, однако, возможно, уже сейчас как-то можно немного подредактировать шаблон триггерного письма (хотя бы не затрагивая ссылки), которое уже участвует в кампании?

Может, кто-то посоветует, где и как можно копать в эту сторону?

 

Нравится

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

Владимир, не думаю, что самостоятельно получится доработать. Ведь часть логики там не в 7.Х а на отдельном сервере Cloud Email Service.

Зимой разработчики ядра отвечали:

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

 

Сейчас прорабатываем концепцию того как оно должно работать, в планах реализовать: 

  • Механизм версионности сообщений
  • Тегирование ссылок в email для работы с кампаниями.
  • Переопределить логику привязки ссылок в кампании (указание в кампании не конкретных ссылок, а тегов)
  • Доработки в облаке по работе с разными версиями шаблонов

 

На данную задачу будут подключены 2 команды, одна займется доработками кампаний, другая адаптацией логики в email.

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

Здравствуйте! При выполнении любого запроса в SQL Executor на демостенде(тестдрайв) версии 7.16.0.4461 выдаётся ошибка.

Например делаю такой запрос:

select * from Contact

Сама ошибка такая:

Npgsql.PostgresException (0x80004005): 42P01: relation "contact" does not exist
at Npgsql.NpgsqlConnector.d__157.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlConnector.d__156.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Npgsql.NpgsqlConnector.d__156.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlConnector.d__163`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlDataReader.d__32.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlDataReader.NextResult()
at Npgsql.NpgsqlCommand.d__71.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlCommand.d__92.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at Polly.Policy.<>c__DisplayClass119_0`1.b__0(Context ctx, CancellationToken ct)
at Polly.Policy.<>c__DisplayClass129_0`1.b__0(Context ctx, CancellationToken ct)
at Polly.Policy.<>c__DisplayClass103_0.b__1(Context ctx, CancellationToken ct)
at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.<>c.b__103_0(Action`2 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Execute[TResult](Func`1 action)
at Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func)
at Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken)
at Terrasoft.Core.DB.DBExecutor.ExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken)
at Terrasoft.DB.PostgreSql.PostgreSqlExecutor.ExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken)
at Terrasoft.Core.DB.DBExecutor.ExecuteReader(String sqlText)
at Terrasoft.Configuration.SqlConsoleService.SqlConsoleService.ExecuteSqlScript(String sqlScript, Boolean logging)

В чём может быть проблема?

Нравится

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

Дополнение «SQL Executor» делается компанией «Программные Технологии», лучше уточнить у них. Судя по сообщению, у Вас демка на Postgres. Возможно, под эту базу ещё не адаптировали (хотя указано, что СУБД независимо) или просто в этой базе другой синтаксис выполнения запросов. Попробуйте название таблицы в кавычках.

 

И что за версия 4.16.0.4461, Вы имели в виду 7.16?

Дополнение «SQL Executor» делается компанией «Программные Технологии», лучше уточнить у них. Судя по сообщению, у Вас демка на Postgres. Возможно, под эту базу ещё не адаптировали (хотя указано, что СУБД независимо) или просто в этой базе другой синтаксис выполнения запросов. Попробуйте название таблицы в кавычках.

 

И что за версия 4.16.0.4461, Вы имели в виду 7.16?

Зверев Александр, ковычки помогли. Благодарю. С версией действительно ошибся. Уже исправил.

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

Подскажите, как можно в стандартной детали (и в редактируемой) использовать checkbox'ы  (как в настройках прав) для отображения boolean-полей вместе Yes/No?



Может, кто-то делал подобную разработку? Или это планируется в будущих версиях?

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

Нравится

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

Настройка прав делалась в новом интерфейсе с применением Angular. До обычных разделов, которые настраиваются в мастере, он пока не добрался. В будущем — возможно, но ведь ещё остатки интерфейса 5.Х не всюду изжили.

 

Сейчас в реестре пишут «Да» и «Нет», в редактируемом реестре при нажатии на них появляется галочка в нужном состоянии. Если эти слова хранятся где-то в ресурсах, можно заменить на символы вроде  и .

 

Идея об этом была давно, там же в комментарии пишут, как можно поменять надписи.

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

т.е. мы можем ожидать, что ext.js тихо помрет и мы получим angular?  Это было бы прекрасной новостью)

Сейчас на новой технологии делают только полностью новую функциональность (планирование) или ту, что пришла на замену страницам на 5.Х (права, лицензии). Обычные разделы стандартного вида, поддающиеся пользовательской настройке, пока не трогают.

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

ключевое слово -"пока") Будем надеятся, что переход на ангуляр произойдет еще при нашей жизни?

Для начала важнее уход от 5.Х, это позволит иметь полностью функциональную систему под Linux.

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

Да, согласен, что это тоже очень важная задача.

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