Добрый день. Нужна помощь с мобильным приложением. Есть страница отображения продуктов в заказе (отображаются поля Name и Quantity объекта OrderProduct) UsrMobileOrderProductGridPageSettingsFieldForceWorkplace со следующим кодом: 

[

    {

        "operation": "insert",

        "name": "settings",

        "values": {

            "entitySchemaName": "OrderProduct",

            "items": [],

            "settingsType": "GridPage",

            "operation": "insert"

        }

    },

    {

        "operation": "insert",

        "name": "OrderProductName",

        "values": {

            "row": 0,

            "content": "Название",

            "columnName": "Name",

            "dataValueType": 1,

            "operation": "insert"

        },

        "parentName": "settings",

        "propertyName": "items",

        "index": 0

    },

    {

        "operation": "insert",

        "name": "OrderProductQuantity",

        "values": {

            "row": 1,

            "content": "Количество",

            "columnName": "Quantity",

            "dataValueType": 5,

            "operation": "insert"

        },

        "parentName": "settings",

        "propertyName": "items",

        "index": 1

    }

]

Задача состоит в следующем: в данную страницу нужно добавить колонку "На складе". За значения данной колонки отвечает поле TotalQuantity объекта ProductStockBalance. 

Объекты между собой связаны следующим образом. Объекты OrderProduct и ProductStockBalance логически связаны по справочнику UsrSalesDept (Направление в продаже) объекта Order. В объекте ProductStockBalance значение справочника "Направление в продаже" хранится в поле UsrDepartment. OrderProduct привязан к Order по соответствующему справочнику.

Как правильно реализовать данную задачу?

Нравится

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

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

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

Показать все комментарии
email
SendEmailByTemplate
7.15_()
Sales_Creatio_()

Есть БП, в котором в элементе "Сценарий" получается локализованный шаблон Email c помощью конструкции:

MacrosHelperServiceRequest request = new MacrosHelperServiceRequest();
request.EntityId = activeRowId;
request.TemplateId = emailTemplateId;
request.EntityName = entityName;
			
var macrosHelperService = new MacrosHelperService(new GlobalMacrosHelper(), _uc);
MacrosHelperServiceResponse result = macrosHelperService.GetMultiLanguageTextTemplate(request);

Шаблон формируется.

НО только если не стоит галочка  "Выполнять следующие элементы в фоновом режиме"

Если галочка стоит, то получаем ошибку в журнале БП:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в Terrasoft.WebApp.Global.<>c.b__24_0(IContext context)
   в Ninject.Activation.Provider`1.Create(IContext context)
   в Ninject.Activation.Context.ResolveInternal(Object scope)
   в Ninject.Activation.Context.Resolve()
   в Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   в Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
   в Ninject.Activation.Provider`1.Create(IContext context)
   в Ninject.Activation.Context.ResolveInternal(Object scope)
   в Ninject.Activation.Context.Resolve()
   в Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   в Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
   в System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   в System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   в Ninject.Activation.Providers.StandardProvider.Create(IContext context)
   в Ninject.Activation.Context.ResolveInternal(Object scope)
   в Ninject.Activation.Context.Resolve()
   в Ninject.KernelBase.Resolve(IRequest request, Boolean handleMissingBindings)
   в Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, String name, IParameter[] parameters)
   в Terrasoft.Core.Factories.ClassFactory.GetInstance[T](Func`1 action)
   в Terrasoft.Configuration.MLangContentFactory.GetDefaultIterator(String schemaName)
   в Terrasoft.Configuration.MLangContentFactory.GetContentKit(String iteratorTagName, String storeTagName)
   в Terrasoft.Configuration.MacrosHelperService.GetMultiLanguageTextTemplate(MacrosHelperServiceRequest request)



Есть подозрение на отсутствие UserConnection при фоновом режиме вызова.

Т.к. при вызове виртуального метода  MLangContentFactory.GetContentKit (в MacrosHelperService.GetMultiLanguageTextTemplate) в конструктор объекта MLangContentFactory не передается UserConnection.



Кто сталкивался с подобной проблемой в фоновых БП и как её можно решить?

Схемы 

Нравится

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

Игорь, привет! Я бы забил на галочку, больше потеряешь времени и нервов на поиски) Проще просто вручную обернуть действие с помощью Task.Factory.StartNew, если нужно без блокировки потока. Правда, отслеживать и логировать, если что-то в helper'e пойдет не так, придется вручную, т.к. всегда будешь получать в процессе "ок"

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

Сейчас достаточно поставить галочку "Выполнять следующие элементы в фоновом режиме"

Но при этом такое поведение базовой логики

Такое ещё может быть, если вызывается по таймеру БП с генерацией печатной формы.

Часть кода в сервисах генерации печатных форм не умеют так работать.

См. обсуждения: 1, 2, 3 и 4.

В этих темах предлагаются разные доработки и обходные варианты получения UserConnection.

Мотков Илья пишет:

Такое ещё может быть, если вызывается по таймеру БП с генерацией печатной формы.

Часть кода в сервисах генерации печатных форм не умеют так работать.

См. обсуждения: 1, 2, 3 и 4.

В этих темах предлагаются разные доработки и обходные варианты получения UserConnection.

Так в том то и дело, что в рамках своего класса я передаю UserConnection.

А в базовом веб-сервисе MacrosHelperService.GetMultiLanguageTextTemplate при вызове 

MLangContentFactory.GetContentKit в конструктор класса MLangContentFactory оно не передается.

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

Лопатин Константин Николаевич пишет:

Игорь, привет! Я бы забил на галочку, больше потеряешь времени и нервов на поиски) Проще просто вручную обернуть действие с помощью Task.Factory.StartNew, если нужно без блокировки потока. Правда, отслеживать и логировать, если что-то в helper'e пойдет не так, придется вручную, т.к. всегда будешь получать в процессе "ок"

 Task.Factory.StartNew не помог.

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

Есть процесс, который по таймеру каждые 10 минут обрабатывает пришедшие файлы. В ходе выполнения процесса может возникнуть некоторая ситуация, в результате чего необходимо остановить все следующие выполнения этого процесса. То есть, пока администратор его не запустит ещё раз самостоятельно, процесс не должен стартовать.



Можно ли такое сделать?

В данный момент в начало процесса добавили проверку, которая уводит процесс в завершение, но через 10 минут он запускается снова. А хотелось бы уйти от этих "пустых" запусков.

 

Нравится

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

Снимайте признак активный с БП

Снимайте признак активный с БП

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

Савельева Анастасия,

а как отлавливать этот сигнал?

Коновалов Игорь пишет:

Снимайте признак активный с БП

А в каком объекте этот признак присутствует? 

Вижу в базе отдельный объект SysProcessDisabled. См. тут.

Показать все комментарии
фильтр
деталь с редактируемым реестром
7.15_()
Sales_Creatio_()

Задача такая.

Есть деталь с редактир.реестром. На ней поле Продукт. Продукты в справочнике с разными категориями.

Как сделать на детали фильтр, чтобы для разных категорий продуктов при выборе на детали работали  разные фильтры ?

Ну например.. возьмем стандартные компьютеры..Продукты с категорией "Ноубуки" фильтровать по совпадению параметра объем памяти и диагональ экрана в заявке, а продукты с категорией "Доп. товары" показывать для выбора в реестре детали всегда все.

 

 

Нравится

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

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

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

Показать все комментарии
Мастер разделов
не_отображает_страница
BPM_7.8
bpm
7.8_()
Sales_Creatio_()

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

нам только передали разработчики доработанную BPM 7.8,

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

Как понять в чем проблема?

Нравится

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

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

 

define("Page", [], function() {
	return {
		entitySchemaName: "Schema",
		attributes: {},
		messages: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

 

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

 

define("Page", [], function() {
	return {
		entitySchemaName: "Schema",
		attributes: {},
		messages: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		methods: {},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

 

Литвинко Павел,

Спасибо большое, вы правы, все вышло :)

Показать все комментарии
DataService
Filter
JSON
7.12_()
Sales_Creatio_()

День добрый.

Не смог отыскать примера структуры JSON'а для DataService.

В запросе отправляю следующий Json, без блока Filters отрабатывает корректно.

{
	"RootSchemaName": "Opportunity",
	"OperationType": "Select",
	"Columns": {
		"Items": {
			"Title": {
				"Expression":{
					"ExpressionType": "SchemaColumn",
					"ColumnPath": "Title"
				}
			}
		}
	},
	"AllColumns": false,
	"IsPageable": false,
	"Filters": {
		"RootSchemaName": "Opportunity",
		"FilterType": "CompareFilter",
		"LogicalOperation": "And",
		"LeftExpression": {
			"ExpressionType": "SchemaColumn",
			"ColumnPath": "Title"
		},
		"ComparisonType": "Contain",
		"RightExpression": {
			"ExpressionType": "Parameter",
			"Parameter": "test"
		},
		"LeftExpressionCaption": "test",
		"IsAggregative": false,
		"Key": "Title filter"
	}
}

Но при попытке использовать Filters сервис дает следующий ответ.

{
    "success": false,
    "responseStatus": {
        "ErrorCode": "NullReferenceException",
        "Message": "Ссылка на объект не указывает на экземпляр объекта.",
        "Errors": []
    },
    "rowsAffected": -1,
    "nextPrcElReady": false
}

Перепробовал различные варианты, но так и не смог отыскать где ошибка в структуре. Кто сталкивался и может привести пример структуры рабочего запроса? Спасибо!

Нравится

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

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

Добрый день.

Попробуйте для параметра значение указать таким образом:

"Parameter":{
    "DataValueType":[Тип данных],
     "Value":"[Значение колонки]"
}

 

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

получилось, спасибо.

Показать все комментарии
права доступа
права доступа по умолчанию
7.14_()
Sales_Creatio_()

Добрый день!

Периодически в разделах создаются объекты без прав доступа. Оба разделы  не  базовые. 

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

Может у кого то есть идеи, с чем это может быть связано?

 

Благодарю!

Нравится

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

Добрый день.

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

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

1. Некорректно настроена раздача прав доступа и права не раздаются на этапе создания записи.

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

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

Также, как вариант, если у Вас приложение on-site, Вы можете запустить sql-профайлер, чтобы он некоторое время поработал, а потом проанализируйте запросы к таблицам прав доступа Ваших разделов.

Добрый день.

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

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

1. Некорректно настроена раздача прав доступа и права не раздаются на этапе создания записи.

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

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

Также, как вариант, если у Вас приложение on-site, Вы можете запустить sql-профайлер, чтобы он некоторое время поработал, а потом проанализируйте запросы к таблицам прав доступа Ваших разделов.

Показать все комментарии
7.14_()
Sales_Creatio_()

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

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

Стадия должна меняться автоматически процессом.

При этом сам прогресс бар должен отображаться

В продаже так было сделано путем отключения кейса

Нравится

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

Вид -> Настроить кейсы раздела 

На каждой из стадий можно указать НА и С каких стадий можно переходить. Сейчас сделаю скриншотик. Удалите все переходы и все делайте процессом.

Это если есть активный кейс. Но вот если я отключаю все кейсы и хочу менять процессов стадии - мне нужно чтобы переход ручной не был доступен. Отключение кейса коробочного не помогло. 

Можно попробовать просто забрать у пользователя доступ на изменение этого поля «Стадия» в лиде. А изменения значения в бизнес-процессе делать при помощи классов, не учитывающих права доступа, например, Update.

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

Коллеги, не нашла описания, подскажите или ссылкой.

Версия 7.15, sale. В карточке создала поле Дата. Где поставить признак, чтобы по умолчанию - отображать текущую дату. Т.е. карточка открывается для создания новой записи - и дата текущая уже проставлена.

Спасибо.

Нравится

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

Открыть объект через конфигурацию. Выбрать в дереве элементов (слева) свою колонку. В свойствах колонки (справа) выбрать "Значение по умолчанию" -> "Установить из системной переменной" - > "Текущее значение даты". После чего опубликовать объект.

Открыть объект через конфигурацию. Выбрать в дереве элементов (слева) свою колонку. В свойствах колонки (справа) выбрать "Значение по умолчанию" -> "Установить из системной переменной" - > "Текущее значение даты". После чего опубликовать объект.

Добрый день.

Установить значение по умолчанию можно в сервисе таблицы в конфигурации системы таким образом:

Ознакомиться с пошаговой инструкцией можно в этой статье.

Коллеги, огромное спасибо. Не ожидала, что Аналитик теперь и в конфигурации работает :)))

Милова Марина,

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

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

Добрый день!

Не могу понять почему в результате выполнения команды 

EntitySchema schema = _userConnection.EntitySchemaManager.FindInstanceByName("Account");

в результате schema == null

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

Нравится

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

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

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