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

Есть конструкция:

select * from UsrDocument

INNER JOIN UsrDocumentPackage on UsrDocument.UsrPackageCPId=UsrDocumentPackage.UsrCPId

where UsrDocumentPackage.UsrCodeId = 'e06c50cb-ac4c-41ce-9493-033e4b54ea14'

которую нужно вынести в filterGroup.

filterGroup.add(

                "UsrPackageFilterLogistics",

                Terrasoft.createColumnFilterWithParameter(

                Terrasoft.ComparisonType.EQUAL,

                "UsrDocumentPackage.UsrCode",

                "00e6efc8-cc7e-4ac7-af41-6310bb5110e8"));

не работает, как это правильно сделать?

 

 

Нравится

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

Вам необходимо использовать синтаксис ESQ-запроса во втором аргументе, для присоединения таблицы, см. https://academy.terrasoft.ru/sites/default/files/documents/docs/technic/SDK/7.9.0/BPMonline_development_guide.pdf

стр. 389 - 391

А лучше прямо с 371-ой страницы.

В Вашем случае строка ESQ запроса повторяющая ваш SQL-заспрос будет выглядеть так (Учитывая что текущая схема UsrDocument, а это может быть не так):

 

[UsrDocumentPackage:UsrCP:UsrPackageCP].UsrCode

суффиксы "Id" для справочных полей опускаются (вы запрашиваете поля объектов конфигурации а не колонки из БД, на это необходимо обращать внимание, т.е если в объекте у Вас поле называется "UsrCP" именно так вы и должны его использовать в запросах ESQ, в то время как в в БД(если поле справочное) оно будет именоваться  "UsrCPId")

В конечном варианте Ваш фильтр будет выглядеть вот так

filterGroup.add(
  "UsrPackageFilterLogistics",
   Terrasoft.createColumnFilterWithParameter(
      Terrasoft.ComparisonType.EQUAL,
      "[UsrDocumentPackage:UsrCP:UsrPackageCP].UsrCode",
      "00e6efc8-cc7e-4ac7-af41-6310bb5110e8"
   )
);

 

Севостьянов Илья Сергеевич,

Большое спасибо за пояснения, всё получилось.

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

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

Подскажите возможен ли экспорт реестра данных в формат xls и/или xlsx.

Нравится

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

Здравствуйте, Евгений!

В текущей реализации приложения экспорт возможен только в формат *.csv, но реализация экспорта в *.xlsx запланирована на версию 7.12.

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

Коллеги, здравствуйте!

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

Речь идет о невозможности в том числе изменения данных до сохранения.

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

Хотелось бы для такого пользователя в принципе закрыть доступ на поля (сделать их неактивными, например, повесить "замок").

Возможно ли подобное в стандартном функционале?

Заранее спасибо!

 

Нравится

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

Здравствуйте, Эрнст!

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

Задача по доработке указаного функционала в последующих релизах, стоит на ответственной команде разработки. 

 

можно использовать вот такой "трюк"

Ext.ComponentMgr.all.each(function(c){
	var cmp = Ext.ComponentMgr.all.map[c];
	if(cmp.className){
		if(cmp.className.indexOf("Edit") !== -1){
			if(cmp.setEnabled){
				cmp.setEnabled(false);
			}
		}
	}
})

выполнение этого кода, сделает все поля карточки недоступными (замок)

можете разместить его например в onEntityInitialized методе схемы

но для какого пользователя выполнять, а для какого нет - это так же задача логики, BPM не предоставляет какой-либо штатной логики для работы с такой информацией в карточках схем, но если плоскость определения кому доступно а кому нет, лежит например в ракурсе, является ли текущий пользователь, пользователем установленным в поле Owner (или другом справочном поле ссылающимся на контакт) то это не составляет труда, если же этот же вопрос рассматривать в ракурсе, является ли текущий пользователь членом какой либо функциональной роли или организационного юнита, то Вам помогут вот эти утилиты  https://community.terrasoft.ru/questions/userutilsmixin-utility-dla-raboty-s-informaciei-o-organizacionnyh-edinicah-roliunity

(только обратите внимание на комментарии в теме)



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

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

Доброе утро!

Я через исходный код получаю массив строк и хотел в клиентской части добавить их в коллекцию GridData. 

Используя эту функцию this.addItemsToGridData(datagrid), получаю ошибку:

Uncaught TypeError: a.on is not a function

    at i.subscribeItemEvent (all-combined.js:712)

    at i.onCollectionAdd (all-combined.js:713)

    at i.fire (all-combined.js:1)

    at i.continueFireEvent (all-combined.js:1)

    at i.fireEventArgs (all-combined.js:1)

    at i.fireEvent (all-combined.js:1)

    at i.doInsert (all-combined.js:1)

    at insert (all-combined.js:1)

    at i.add (all-combined.js:1)

    at i. (all-combined.js:680)

PS:

если не сложно, скиньте где про это более подробно прочитать можно.

Нравится

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

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

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

В гриде 24 колонки, если размещать чекбоксы последовательно с размерностью 2 колонки, страница идет в разнос. Как решать? Увеличивать не хочу,Изображение удалено. ибо должно и так работать.

Нравится

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

Вангую, что виноваты css-ки. Там какая-то неадекватная ширина для лабела и его контейнер перекрывает соседние элементы при плотном расположении.

Ну да. 2й caption перекрывает контрол первого...

Ну правильно все. Вот и нужно это исправить "в последующих релизах" :)

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

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

Добрый день.

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

Как это правильно сделать?

Нравится

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

 

правильный ответ на ваш вопрос - Ext.JS (редакции 4.x с некоторыми оговорками)

Разработайте элемент с нуля или наследуясь от той же самой детали.

Стоит упомянуть сразу, что задача эта не тривиальная для типовых кейсов и если у Вас нет навыков работы с этим фреймворком и "внутреннее устройство" BPM для Вас тоже остается не понятым - лучше за подобное даже не приступать. :)

Вам в помощь ранее поднимавшиеся на сообществе темы н/п:

https://community.terrasoft.ru/questions/sozdanie-sobstvennogo-elementa-upravlenia 

https://community.terrasoft.ru/forum/topic/25285#comment-67717

вот пример исходного кода для элемента управления "Кнопка"

https://academy.terrasoft.ua/jscoresdk/source/button.html#Terrasoft-controls-Button

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

Доброго времени суток.

Версия 7.9 sales.

Для колонки контакта в обращении сделан фильтр по контрагенту (связанное бизнес-правило отключили по причине того, что нужен был фильтр только в одну сторону). Фильтр следующего вида:

"Contact": {
					lookupListConfig: {
						filters: [
							function() {
								var Account = this.get("Account");
								var filterGroup = Ext.create("Terrasoft.FilterGroup");
 
								if (Account){
									var filterById = Terrasoft.createColumnInFilterWithParameters("Account", [this.get("Account").value]);
					                filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
					                filterGroup.add("filterById", filterById);
								} else {
									filterGroup.add("filter", Terrasoft.createColumnIsNotNullFilter("Account"));
								}
								return filterGroup;
							}
						]
					}
				},

На всякий случай, переопределения правил из оригинальной версии:

 

rules: {
			"Contact": {
				"FiltrationContactByAccount": {
					"ruleType": 999
				}
			},
		},
 
methods: {
           setAccount: function(){
            	return false;
            }        
}

Далее, допустим, у нас нет контакта в справочнике, мы хотим добавить контакт. Нажимаем кнопку "Добавить" на всплывающем окне справочника, открывается страница контакта, добавляем контакт. И... контакт не добавляется в колонку.

Как поправить?

Знаю, что есть проблема с версией 7.9 при добавлении новых значений в справочные поля - https://community.terrasoft.ru/forum/topic/25275 - но может ошибку можно исправить проще?

Нравится

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

Можете ввести в карточку контакта для режима создания в методе который обрабатывает состояние "после сохранения" onSaved логику которая опираясь на то "откуда пользователь попал в карточку создания", генерирует сообщение на которое предварительно подпишется ваша карточка обращения, пи получив из него Id созданного контакта установит его в соответствующее поле. Получится как бы имитация штатного поведения (которое не отрабатывает корректно)

...
"onSaved": function(){
      this.callParent(arguments);
      if (this.IsAddMode()){
         //получаем из хеша схему страницы с которой мы попали в карточку создания
         var hashEntityName = sandbox.publish("GetHistoryState").hash.entityName;
         if (hashEntityName == "Схема которая нам нужна"){
             //публикуем событие на которое подписана карточка в которой должно установиться
             //значение созданного контакта 
             this.sandbox.publish(
                "MyCustomEvent",
                //Передаем Id созданного контакта
                this.get("Id"),
                ["MyCustomUniqTag"]
             )
         }
      }
}
...

 

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

Как динамически задавать значение текстового поля в Terrasoft.utils.inputBox, когда он уже открыт?

Нравится

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

Добрый день, Олег!

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

Через Ext.JS можно все :)

var controls = {
	content: {
		customConfig: {
			className: "Terrasoft.MemoEdit",
			height: "200px",
			markerValue: "html-edit"
		},
		dataValueType: Terrasoft.DataValueType.TEXT,
		value: ""
	}
};
Terrasoft.utils.inputBox(
	"Заголовок",
	function(){},
	["ok", "cancel"],
	this,
	controls
);
 
Ext.get("t-comp0-wrap").select("textarea").update("Some text 2")

Выполните в консоли находясь в любой карточке.

Достучаться до компонента и повеситься на его рендер конечно не получится... ну только если "оверрайдить" ашь от самого "Ext.dom.AbstractElement"

Но если вы можете как либо событийно завязаться на показ инпутбокса - то как заменить я показал.

Спасибо :)

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

Подскажите, возможно ли вытягивать поле "Примечания" (на вкладках "Файлы и примечания") автоматически по высоте текста?

Нравится

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

Добрый день!

Конечно можно. Для решения Вашего кейса нужно применить собственные css-стили. Как это можно сделать в приложении:
http://www.community.terrasoft.ru/forum/topic/16386

Подробное руководство по css:
https://developer.mozilla.org/en-US/docs/Web/CSS

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

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

Нравится

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

Здравствуйте, Олег!

В версии 7.10 в системе будет возможность настраивать DCM для всех разделов в системе.

Это, конечно, здорово. Но ответ на вопрос хотелось бы получить. С переходом между стадиями разобрался (создал объект и наполнил его доступными переходами, по примеру раздела "Продажи"). Как сделать две финальных стадии на выбор? (Как в тех же продажах)

UPD: Разобрался. выгружаем md файл. Меняем в нем UId схемы, UId колонки стадии, имя самой схемы, загружаем обратно, открываем через мастер, делаем что душе угодно.

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