Добрый день.

при работе с EntitySchemaQuery для реализации SQL конструкции CASE, WHEN, THEN, компания Террасофт реализовала класс EntitySchemaCaseNotNullQueryFunctionWhenItem . Прошу пожалуйста поделиться Примерами использования данного класса. Так называемыми Темплейтами. На Академии я данный примеров не нашел. Спасибо.

Нравится

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

Добрый день, Михаил!

С описанием класса можете ознакомится тут: https://academy.terrasoft.ru/api/SDKNETAPI/7.10.0/NetCoreAPI_Help.html#Terrasoft.Core~Terrasoft.Core.Entities.EntitySchemaCaseNotNullQueryFunctionWhenItem.html

Пример использования: 

 

Tsopa,

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

Михаил, 

Существуют sql запросы вида: 

CASE WHEN (ID IS NULL) 
     THEN 'YES' 
     ELSE 'NO' 
END AS ID_Value,

Для реализации такого рода запросов используется класс EntitySchemaCaseNotNullQueryFunctionWhenItem.

Конкретных примеров использования в системе нет. Вы можете попробовать реализовать свой собственный пример.

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

Как для DataGrid к FileDetail добавить колонку для показа информации по описанию файла?

 

addProfileColumns: function(esq) {

            var profileColumns = this.getProfileColumns();

                //добавляем новую

                profileColumns.Notes = {

                    aggregationType: undefined,

                    caption: "Описание",

                    dataValueType: Terrasoft.DataValueType.TEXT,

                    path: "Notes",

                    subFilters: undefined,

                    type: "text"

                };

                //а это взято из метода addProfileColumns из GridUtilitiesV2

                Terrasoft.each(profileColumns, function(column, columnName) {

                            if (!esq.columns.contains(columnName)) {

                                if (column.aggregationType) {

                                    this.addProfileAggregationColumn(esq, column, columnName);

                                } else {

                                    esq.addColumn(columnName);

                                    }

                                }

                }, this);

        },

В getProfileColumns можно ли добавить колонку?

 

Нравится

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

Метод addProfileColumns добавляет колонку непосредственно в запрос, то есть вы получите в запросе кроме отображаемых колонок еще дополнительные, которые отображаться не будут. Для того, чтобы они отображались нужно еще поменять конфиги отображения. Находятся они в Profile, а т.к. отображение может быть как плиточным (tiledConfig), так и списочным (listedConfig), то также нужно смотреть какую именно конфигурацию менять.

Словить Profile можно переопределив метод initProfile. В нем снчала нужно обязательно сначал вызвать this.callParent(arguments), в следствии чего будет получен исодный Profile. А после этого взять var profile = this.get("Profile"), распарсить и динамически изменить listedConfig и tiledConfig для изменения конфигуарации колонок грида. Распарсить придется, т.к. listedConfig и tiledConfig приходят в виде строки. Нужно также учитывать размеры соседних колонок и уменьшать и перемещать их, чтобы было куда вставить новую.

Подправив Profile и переорпеделив метод addProfileColumns как у вас - вы получите динамическую подгрузку и отображение колонки.

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

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

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

Добрый день.

Посчитали "совмещенный" режим не самым полезным для пользователя. Да и повторять логику отображения и доступности кнопок из Page в Section с помощью месседжей - не самый удобный вариант. В связи с этим решили открывать карточку объекта только в Page режиме, минуя совмещенный с реестром. Т.е. чтобы при нажатии на кнопку открыть в реестре, объект открывался только в режиме редактирования. Каким образом это реализовать? Может кто-то уже сталкивался с подобным кейсом?

Нравится

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

самый простой вариант (как мне кажется) переопределить метод

editRecord: function(primaryColumnValue) {
	var activeRow = this.getActiveRow();
	var typeColumnValue = this.getTypeColumnValue(activeRow);
	var schemaName = this.getEditPageSchemaName(typeColumnValue);
	this.set("ShowCloseButton", true);
	this.openCard(schemaName, ConfigurationEnums.CardStateV2.EDIT, primaryColumnValue);
},

в BaseSectionV2 и открывать карточку через window.open()

А можете привести пример синтаксиса использования windows.open()?

editRecord: function(primaryColumnValue) {
	var activeRow = this.getActiveRow();
	var typeColumnValue = this.getTypeColumnValue(activeRow);
	var schemaName = this.getEditPageSchemaName(typeColumnValue);
	this.set("ShowCloseButton", true);
	window.open(Terrasoft.combinePath(Terrasoft.workspaceBaseUrl,"Nui/ViewModule.aspx#CardModuleV2",schemaName, ConfigurationEnums.CardStateV2.EDIT, primaryColumnValue));
	//this.openCard(schemaName, ConfigurationEnums.CardStateV2.EDIT, primaryColumnValue);
}

 

вот еще пример метода как Из карточки детали выполняется открытие счета сразу на редактирование:

 

openInvoicePage: function(invoiceId) {
   var config = {
         schemaName: "InvoicePageV2",
         operation: enums.CardStateV2.EDIT,
         id: invoiceId,
         moduleId: this.getInviocePageSandboxId()
   };
   this.sandbox.publish("OpenCard", config, [this.sandbox.id]);
},

 

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

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

Добрый день!

Можно ли сделать автоматические создание скриншота дашборда раздела Итоги в конце рабочего дня?

Нравится

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

Здравствуйте, Александр!

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

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

Приветствую Александр.

у меня данная задача уже решалась в рамках одного из проектов. Постучитесь ко мне с напоминанием после 01 февраля я с вами поделюсь примером реализации. Только реализовывалось у меня в рамках конфигурации BPMOnline Sales Enterprise. Но поидее функционал Дашбоардов стандартный, должно заработать и на других конфигурациях.

Власов Михаил Викторович, добрый день!

Спасибо за предложение! Обязательно напишем. 

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

Добрый день!

Возник вопрос в организации работы менеджера - можно ли сделать отображение дашборда в определенное время (например один дашборд доступен с 8 до 13, а второй дашборд с 14 до 17) и если можно, то как реализовать (быть может через процесс ограничения прав доступа)?

Нравится

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

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

Я бы решил данную задачу создав Константные временные рамки. Привязал бы данный справочник к Сущности Дашбоард и далее При отображении Дашбоардов фильтровал какие показывать какие нет. Создание 1 нового Справочника, Создание ссылки. Доработка страниц по отрисовки и отображению Дашбоардов. Все. Более я не вижу других идей как быстрее сделать. Так как идти в сторону Прав это интересно. Но это больше времени по доработкам.

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

При обновлении до 7.11.2 отвалился DataService. Ничего не поменялось в коде внешнего приложения, всё соответствует документации. Авторизация проходит нормально, но 

https://my.site/0/dataservice/json/reply/InsertQuery - выдает 403-ю ошибку Forbidden.

Подскажите, куда копать?

 

Нравится

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

Добрый день, Алексей!

Проверьте Web.config, а именно значение атрибута UseCsrfToken (https://academy.terrasoft.ru/documents/technic-sdk/7-10/zashchita-ot-csrf-atak-pri-integracii-c-bpmonline), если указано значение true, тогда стоит обратить внимание на формирование хедера запроса.

При включенной csrf защите необходимо отправлять BPMCSRF- токен и BPMCSRF -куки, тогда хедер должен выглядеть следующим образом: 

 

Tsopa,Спасибо. Отключил этот флаг и всё снова работает!

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

7.11 onsite

Всем привет, нужна помощь

Перестала работать CRM(Изменения никакие не вносились)



При авторизации выкидывает на "Управление конфигурацией"

"Сборка конфигурации "Default" не инициализирована"



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

 

Нравится

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

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

Роман,

Выполните последовательно 2 скрипта:



delete from SysPackageModule;



update SysWorkspace set AssemblyData = null;



После выполните полную компиляцию.

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

 

Починить  на данный момент не получилось(((

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

Такая же ошибка возникла после попытки добавления в базу нового объекта. 

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

Этот бизнес процесс отредактировать не могу, так как в него уже невозможно зайти. 

И команда "компилировать все" не может отработать до конца.   

Вот скрин :  https://clip2net.com/s/3XgViHd



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

 

False нужно с маленькой буквы.

Сергей Кy6риш,

 подскажите пожалуйста,ваш совет -

Выполните последовательно 2 скрипта:

delete from SysPackageModule;

update SysWorkspace set AssemblyData = null;

Это команды для SQL сервера ?

 

 

BVG,

Да.

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

Так как во многих компаниях принято недельный цикл планирования, то графики строятся по неделям. 

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

Предлагаю добавить формат Year&Week, чтобы отображать в нужном порядке результаты по неделям.Изображение удалено.

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

Здравствуйте, Владимир!

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

Спасибо, что помогаете улучшать наши продукты!

Владимир, спасибо за проявленный интерес. Зарегистрировали ваше пожелание по развитию приложения.

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

В bpm'online service используются общие почтовые ящики. 

Сейчас их создает один пользователь, он же и должен ими управлять, запускать синхронизацию (если необходимо вручную) и т.п.



Если же другой пользователь (администратор) сохранит настройки этого общего ящика, то прекращается автоматическая синхронизация.



Необходимо сделать так, чтобы любой администратор мог безболезненно поменять параметры (и другие действия) общих почтовых ящиков

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

Здравствуйте, Владимир!

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

 

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

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

Нравится

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

Добрый день!



К сожалению, в базовой версии такого метода нет. 

Это связано с тем, что обращение может переоткрываться несколько раз. 



Потому в данной ситуации, необходимо реализовать свой метод.

 

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