Технические вопросы
7.x

БПМ 7.7, создаю БП, в задание-сценарий копирую код из примера

EntitySchemaQuery esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Lead");
esq.AddColumn("LeadName");

Select selectEsq = esq.GetSelectQuery(UserConnection);
return true;

Список библиотек подключенных.
        using Newtonsoft.Json;
        using Newtonsoft.Json.Linq;
        using System;
        using System.Collections.Generic;
        using System.Collections.ObjectModel;
        using System.Data;
        using System.Drawing;
        using System.Globalization;
        using Terrasoft.Common;
        using Terrasoft.Core;
        using Terrasoft.Core.Configuration;
        using Terrasoft.Core.DB;
        using Terrasoft.Core.Entities;
        using Terrasoft.Core.Process;
        using Terrasoft.Core.Process.Configuration;

Ругается.
Ошибка

Нравится

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

Здравствуйте, данная тема уже обсуждалась по ссылке:
http://www.community.terrasoft.ru/forum/topic/14645

"Зарицкий Олег Васильевич" написал:

В версии 7.7 экземпляр типа UserConnection можно получить через метод Get. Например, var userConnection = Get(“UserConnection”);

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

Пример работы с параметрами:

var parameter1 = Get("Parameter1");

Set("Parameter2", parameter1.ToString());

var parameter2 = Get("Parameter2");

Кроме того можно в свойствах элементе "Задание-сценарий" убрать признак [Для интерпретируемого процесса]. В таком случае можно работать с экземплярами аналогично версии 7.6.

Спасибо

Показать все комментарии
Технические вопросы
7.x

Добрый день!
Подскажите, как можно отредактировать встроенный пакет ContractVisaProcess, визирование договоров.
Я бы хотел добавить визирующих, чтобы создавались сразу несколько запросов на визы.
Но у меня, даже не получается добавить второго визирующего в меню.

Невозможно сохранить изменения элемента "ContractVisaProcess", так как он создан сторонним издателем или установлен из файлового архива.

Нравится

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

Добрый день, Вадим!

Политикой безопасности компании строго запрещено разблокирование и внесение каких-либо изменений в базовые пакеты системы. Если Вы хотите внести какие-либо пользовательские правки или дополнительную логику, то предварительно необходимо заместить нужный Вам объект/схему/процесс и уже в своем замещенном можно вносить любые правки.

Показать все комментарии
html-страница
Вкладка
Технические вопросы
7.x

Добрый день!

Необходимо по нажатию пользовательской кнопки открывать некоторую произвольную html-страницу по URL. Подскажите, есть ли такая возможность у инструментария Террасофт? Если есть, поделитесь ссылкой и/или литературой, что для этого необходимо - буду очень признателен!

Нравится

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

Кнопку уже сделали?
в метод, вызываемый нажатием пишем

window.open("www.apple.com");

откроется либо в табе, либо в новом окне, зависит от браузера

Во! Спасибо большое!

Показать все комментарии
isFinal
где задается
Технические вопросы
7.x

Добрый день!
В скриптах CasePage ( карточка обращения
есть проверка, является ли статус финальным

выглядит это следуюшим образом

var status = this.get("Status");
if ( status.IsFinal)

с помощью условия if ( status.IsFinal) ижет проверка, является ли статус финальным ( поле IsFinal в таблице статусов обращения)
Подскажите, а где задается само определение status.IsFinal ?

Нравится

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

Я так понимаю, что это просто обращение к полю объекта

нет, это не просто обращение к полю..
это какое-то свойство прописанное

например, у состояния проблемы такого нет, хотя поле IsFinal есть в справочнике

Добрый день, Дарья!
В справочнике "Состояния обращений" заполняется данный признак, с которого потом он и считывается.

Дарья, вы правы, просто так к полю объекта не обратиться.
Надо поля, которые будут доступны для такого обращения прописать в атрибутах.
См BaseCasePage, скрин прилагаю (attributes, описание columns). Ваша страница в конечном итоге от нее наследуется.
Вы эти поля из объекта статус загружаете автоматически при использовании поля в этом случае и можете к ним обратиться в виде Status.IsFinal и так далее

Спасибо

Показать все комментарии
chart
графики
Технические вопросы
7.x

Добрый день!
Столкнулись с таким поведением системы:
В замещающий объект "Продажа" добавлены несколько полей цифровых типов.
В графиках пытаемся вывести сумму этих полей по определенным условиям, но после выбора способа агрегации (сумма, среднее, мин-макс), в списке возможных для выбора полей не появляются наши поля. Видны поля только из родительского объекта.
Лечится ли это штатными способами, и, если нет, куда копать?

Нравится

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

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

Эм, да.. после полной чистки браузера, появилось. :confused:

Показать все комментарии
Технические вопросы
7.x

Добавил в объекте Invoice на событие InvoiceInserted скрипт this.Entity.SetColumnValue("UsrTest1","123");

При нажатии кнопки Добавить счет, у меня на странице карточки это поле пустое, this.get("UsrTest1") возвращает undefined. А после нажатия кнопки Сохранить, значение записывается. Получается что это событие срабатывает как После сохранения.

Когда срабатывает событие InvoiceInserted? Я так понимаю оно должно сработать до того как я увижу карточку и после нажатия кнопки Добавить счет, я должен уже видеть заполненое поле.
Если нет то как вообще работают события.

Нравится

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

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

ммммм мне вот все же верится в лучшее, что при нажатии добавить немного по другому происходит все...
Событие на объекте, при создании записи кнопкой добавить поле заполняется в объекте (срабатывает событие), но на клиентской форме вы этого в контроле просто не видите... поэтому после сохранения там информация таки появляется. И кстати по this.get("UsrTest1") не от объекта берется значение, а наверное все же от карточки клиентской
А если заблуждаюсь я и в bpmonline реально Inserted объекта срабатывает по нажатию кнопки Сохранить в уже готовой заполненной карточке, то цитируя капитана Зеленого "Если коровы станут летать, то мне в космосе делать нечего!"

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

Ну каким-то образом на странице редактирования поля заполняются значениями по умолчанию?:smile: Это происходит на событии "До добавления записи".

"Демьяник Алексей" написал:"До добавления записи"

Это Inserting получается?

"Александр Кудряшов" написал:
Демьяник Алексей пишет:

"До добавления записи"

Это Inserting получается?

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

Да, абсолютно верно.

Здравствуйте! Подскажите когда срабатывает событие - После загрузки данных(ImportLoaded), как его отловить?

 

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

Показать все комментарии
редактируемый реестр
Технические вопросы
7.x

Добрый день.
Версия BPMOnline Sales Omnichannel 7.5.0.1328.
Есть деталь "Продукты Документа" с редактируемым реестром, при добавлении/изменении/удалении записи детали на сервере происходит перерасчёт сумм связанного документа (событие DocumentProductSaved и DocumentProductDeleted).
Для отображения обновлённых сумм в карточке документа использую метод subscribe:

"DocumentProduct": {
        "schemaName": "DocumentProductDetailV2",
        "entitySchemaName": "DocumentProduct",
        subscriber: function(){
            this.reloadEntity();
        }
        },

Проблема в том, что метод subscriber выполняется только при обновлении и удалении записи из редактируемого реестра, а при добавлении не выполняется.
Использование метода onActiveRowSave для вызова метода fireDetailChanged не помогло, т.к. карточка документа обновляется до того, как выполнилась логика по событиям DocumentProductSaved и DocumentProductDeleted.
Подскажите, как решит эту проблему.

Также ещё интересует, как сделать валидацию полей в редактируемом реестре?
Спасибо.

Нравится

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

Здравствуйте, Игорь.

Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.

"Мартыненко Сергей" написал:

Здравствуйте, Игорь.

Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.


Не могли бы вы подробнее описать ваш вариант

При инциализации схемы детали можно проверить добавляется ли сейчас новая запись следующим образом:

if(this.isAddMode()){
  здесь код публикации события через sandbox
}

Вот тут попытка в этом разобраться была :)

Спасибо.
А как быть с валидацией полей в редактируемом реестре?

"Коновалов Игорь" написал:

Спасибо.

А как быть с валидацией полей в редактируемом реестре?


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

Посмотрите статью на академии:
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/FieldsVali…

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

Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю

this.updateDetail({reloadAll: true});

Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю

this.updateDetail({reloadAll: true});

Подскажите пож-та Игорь.
Догнать не могу.
Делаю так
*Detail

methods: {
			init: function() {
				this.callParent(arguments);
			},
			onSaved: function() {
				this.updateDetail({reloadAll: true});
			}
 
		}

и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.

"Юсупов Марат" написал:

Подскажите пож-та Игорь.

Догнать не могу.

Делаю так

*Detail

methods: {

                        init: function() {

                                this.callParent(arguments);

                        },

                        onSaved: function() {

                                this.updateDetail({reloadAll: true});

                        }

                       

                }

и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.

По идее да. А что debugger говорит?
И где вы вызываете метод onSaved?

Игорь, в детали *1Detail.
Или неправильный метод использую.
debugger туда не попадает.

В BaseGridDetailV2 Есть метод onCardSaved.
Может в вашем случае лучше использовать его.

Получилось так сделать в детали, которая вызывает песочницу.

saveRowChanges: function(row, callback, scope) {
				scope = scope || this;
				callback = callback || this.Terrasoft.emptyFn;
				if (row && this.getIsRowChanged(row)) {
					row.save({
						callback: callback,
						isSilent: true,
						scope: scope
					});
 
				} else {
					callback.call(scope);
				}
				scope.sandbox.publish("UpdateMyData", null, ["111"]);  // вызов песочницы в Page
			}
Показать все комментарии
действие
карточка
Технические вопросы
7.x

Добрый день!
Подскажите пожалуйста как добавить действие в карточку контакта, так чтоб оно не сыпало при вызове из combined mode и не было доступно в разделе?
Сейчас есть замещающая страница ContactPage и переопределен метод getActions, в который добавлено действие: actionMenuItems.addItem(this.getButtonMenuItem({
"Caption": { "bindTo": "Resources.Strings.UsrSetToSaleCaption" },
"Tag": { bindTo: "setToSaleProcess" }
}));
при вызове из карточки работает нормально, но из совмещенного режима падает с ошибкой, что метод не найден.
Версия 7.7.0.2293

Нравится

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

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

Создали объект-представление

Заполнили представление скриптом

Представление заполнено корректно

Но почему-то фильтры по нему не работают (какую бы ни пробовали комбинацию - например, такие)

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

Нравится

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

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

Пользователь-Администратор.
Все права есть.
Где можно проанализировать запрос к БД, скажите, пожалуйста

Минимальную информацию можно получить через network в консоли Chrome например, для остального нужно что-то вроде Fiddler2 или анлогичное. В консоли ошибок никаких?

Ошибка такая в консоли

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

Добрый день!
Унаследовали обращение от базового объекта
и переписали скрипт заполнения представления, чтобы в нем участвовала колонка Id

Заработало

Показать все комментарии
тестовая конфигурация
Технические вопросы
7.x

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

Ситуация такая. В системе есть пользователь, права системного администратора у него есть.
В IIS создала новое приложение "1". Затем новую конфигурацию (копия Default). Выполнила "Компилировать все". Т.е. сделала все как в документации.

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

"
Exception Message: StartIndex cannot be less than zero.
Parameter name: startIndex
Exception Type: System.ArgumentOutOfRangeException
Exception Source: mscorlib

Exception Stack Trace:
at System.Text.StringBuilder.Remove(Int32 startIndex, Int32 length)
at Terrasoft.Configuration.ConfigurationSectionHelper.GetModuleStructure(UserConnection userConnection)
at Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
at Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
at Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

SessionID: k41gkhyvkbr0ex25um33kktk
Request URL: /1/Nui/ViewModule.aspx
Request Path: /1/Nui/ViewModule.aspx
"

Еще такая:

"
Exception Message: Код зависимых схем пуст или null
Exception Type: Terrasoft.Common.NullOrEmptyException
Exception Source: Terrasoft.Core

Exception Stack Trace:
at Terrasoft.Core.IncludeDependencySourcesManager.GetSchemaHash(Guid schemaUId, String cultureName)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetClientUnitSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetCommonSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetClientUnitSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetCommonSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetClientUnitSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetCommonSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetClientUnitSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetCommonSchemaHash(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetSchemaPath(ISchemaManagerItem item)
at Terrasoft.Core.CoreClientUnitSchemaDecorator.GetSchemaDescriptor(ISchemaManagerItem item, String identifiersQuote)
at Terrasoft.Configuration.ConfigurationSectionHelper.CombineSchemaDescriptors(UserConnection userConnection)
at Terrasoft.Configuration.ConfigurationSectionHelper.GetClientUnitSchemaDescriptors(UserConnection userConnection)
at Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
at Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
at Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
"

Нравится

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

Добрый день!

После получения сообщения об ошибке в адресной строке браузера допишите:
https://адрес_сайта/1/workspaceexplorermodule.aspx ( где /1/* - номер рабочего пространства).
войдите в конфигурацию, создайте любую клиентскую схему, затем удалите её. После этого можете входить в новую конфигурацию.

Сергей, спасибо, помогло!

Можно поинтересоваться каким образом?

Айгуль, при компиляции не перегенерировались бандл-схемы. В последних версиях ошибка устранена.

Сергей, спасибо

Добрый день!
Возникла такая же ошибка (Код зависимых схем пуст или null)
Создание и удаление схемы в новой конфигурации не помогает.

В чем еще может быть дело?

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

Вероятно, вы создаете объект или что-то другое, необходимо создать модуль, затем сохранить его:
[IMG]http://s018.radikal.ru/i526/1604/69/56413664354b.jpg[/IMG]
[IMG]http://s017.radikal.ru/i430/1604/b2/54231bd5201b.jpg[/IMG]

Спасибо! Создание/удаление модуля решило проблему.

Следующее рабочее пространство успешно создалось при создании/удалении модуля перед выполнением "Компилировать все"

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