Добрый день!

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

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

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

Нравится

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

Мы подобным образом делали поиск лидов в LeadSectionV2 по многим полям

 

		attributes: {
			"UseSearchFilter": {
				dataValueType: Terrasoft.DataValueType.BOOLEAN,
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				value: false
			},
			"SearchFilter": {
				dataValueType: Terrasoft.DataValueType.TEXT,
				type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
			}
		},
			initQueryFilters: function(esq) {
				this.callParent(arguments);
				var useSearchFilter = this.get("UseSearchFilter");
				var searchFilter = this.get("SearchFilter");
				if (!useSearchFilter || !searchFilter) {
					esq.filters.removeByKey("FilterContactCommunication");
				}
				else {
					var filterGroup = new Terrasoft.createFilterGroup();
					filterGroup.logicalOperation = Terrasoft.LogicalOperatorType.OR;
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].Contact", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].Account", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].BusinesPhone", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].MobilePhone", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].Email", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].Website", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].QualifiedAccount.Name", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[Lead:Id:Id].QualifiedContact.Name", searchFilter));
						filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact:QualifiedContact].SearchNumber", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[ContactCommunication:Contact:QualifiedContact].Number", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[AccountCommunication:Account:QualifiedAccount].SearchNumber", searchFilter));
					filterGroup.addItem(Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.CONTAIN, "[AccountCommunication:Account:QualifiedAccount].Number", searchFilter));
					esq.filters.add("FilterCommunication", filterGroup);
				}
			},
			searchFilter: function() {
				this.reloadGridData();
			},
			enableSearchFilter: function() {
				this.set("UseSearchFilter", true);
			},
			disableSearchFilter: function() {
				this.set("UseSearchFilter", false);
				this.reloadGridData();
			}
		},
		diff: /**SCHEMA_DIFF*/[
			{
				"operation": "insert",
				"name": "FilterSearchContainer",
				"parentName": "FiltersContainer",
				"propertyName": "items",
				"index": 0,
				"values": {
					"id": "FilterSearchContainer",
					"selectors": { wrapEl: "#FilterSearchContainer" },
					"itemType": Terrasoft.ViewItemType.CONTAINER,
					"wrapClass": ["quick-filter-module-container-wrapClass", "custom-filter-container"],
					"items": []
				}
			},
			{
				"operation": "insert",
				"parentName": "FilterSearchContainer",
				"propertyName": "items",
				"name": "EnableSearchFilter",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"style": Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
					"click": {"bindTo": "enableSearchFilter"},
					"caption": "Search"
				}
			},
			{
				"operation": "insert",
				"parentName": "FilterSearchContainer",
				"propertyName": "items",
				"name": "SearchFilter",
				"values": {
					"bindTo": "SearchFilter",
					"visible": {"bindTo": "UseSearchFilter"},
					"labelConfig": {
						"visible": false
					},
					"controlConfig": {
						"className": "Terrasoft.TextEdit"
					},
					"textSize": "Small"
				}
			},
			{
				"operation": "insert",
				"parentName": "FilterSearchContainer",
				"propertyName": "items",
				"name": "UseSearchFilter",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"style": Terrasoft.controls.ButtonEnums.style.BLUE,
					"click": {"bindTo": "searchFilter"},
					"visible": {"bindTo": "UseSearchFilter"},
					"markerValue": "applyButton",
					"imageConfig": {"bindTo": "Resources.Images.ApplyButtonImageNew"}
				}
			},
			{
				"operation": "insert",
				"parentName": "FilterSearchContainer",
				"propertyName": "items",
				"name": "DisableSearchFilter",
				"values": {
					"itemType": Terrasoft.ViewItemType.BUTTON,
					"click": {"bindTo": "disableSearchFilter"},
					"visible": {"bindTo": "UseSearchFilter"},
					"markerValue": "cancelButton",
					"imageConfig": {"bindTo": "Resources.Images.CancelButtonImageNew"}
				}
			}
   }

 

Владимир Соколов,

Спасибо, попробуем

Владимир Соколов,

При открытии карточки фильтр очищается :(( а нам нужно, чтобы  хранился, пока не отменим

 

Тогда надо сохранять значение фильтра в профиле. Что-то похожее здесь обсуждалось - 

https://community.terrasoft.ru/questions/polzovatelskiy-fiksirovannyy-f…

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

Добрый день!

 

Подскажите, как добавить записи в коллекцию объектов с атрибутами (Collection of Objects with attributes, ICompositeObjectList) веб-сервиса? Через под-процесс не подходит - из таблицы, по которой запускается под-процесс, необходимо добавить не все записи, условие отбора находится в связанной таблице.

Пробовал добавлять через CompositeObjectList как описано тут

CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>();
objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName",  "SubParamValue1"}}));
return true;

- компилятор ругается на защищенный CompositeObject:  

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

Нравится

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

Добрый день.



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



Варианты решения задачи:

1) Передавать объекты в качестве строки, потом парсить.

2) Обновится на версию 7.16.4. В ней добавлена возможность создавать и настраивать параметр БП типа "Коллекция записей", передавать в веб сервис.  

Mykhailo Storozhuk,

Спасибо за информацию!

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

Добрый день!



Можно ли добавить на партнёрский портал пользовательские разделы?

Нравится

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

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

 

Партнерский портал доступен в продуктах Sales Creatio enterprise и CRM Creatio.



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

 

На страницу раздела можно добавить любые объекты системы, например, детали, поля и т. д. Количество объектов зависит от конфигурации портала (портал самообслуживания, клиентский портал) и регулируется условиями лицензии. Например, на портале самообслуживания можно добавить на страницу не больше 25 объектов, на пользовательском портале — не больше 125. При превышении количества объектов, используемых на странице записи раздела, на портале блокируется возможность добавления и редактирования записей.

 

Более дательная информация в статье на Академии: https://academy.terrasoft.ru/docs/user/instrumenty_prodazh/partnerskie_…

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

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

Нравится

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

Добрый вечер.

Опишите подробнее, что именно не получается. Приведите пример Вашего кода.

Проблема решена при помощи переопредления метода:

getGridRowViewModelConfig: function(config) {

                var result = this.callParent(arguments);

                if (result && result.rowConfig && result.rowConfig.Contact) {

                    result.rowConfig.Contact.lookupListConfig = {

                        "filters": [

                            function() {

                                var vendor = this.get("Vendor");

                                var filterGroup = Ext.create("Terrasoft.FilterGroup");

                                if (vendor && vendor.value) {

                                    filterGroup.add("Account",

                                        Terrasoft.createColumnFilterWithParameter(

                                            Terrasoft.ComparisonType.EQUAL, "[AccountInVendor:Account:Account].Vendor", vendor.value));

                                } else {

                                    filterGroup.add("Empty", Terrasoft.createColumnIsNullFilter("Id"));

                                }

                                

                

                                return filterGroup;

                            }

                        ]

                    };

                }

                return result;

            },

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

Добрый день, создал деталь списка контрагентов для контрагента.

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

Нравится

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

Александр, деталь с карточкой или с редактируемым реестром?

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

В разделе есть несколько типов страницы редактирования. Как установить условия на видимость кнопки добавления для одного из типов? В каком модуле определены данные кнопки? Заранее спасибо!

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

Нравится

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

В diff схемы реестра раздела добавляем 

{

            "operation": "merge",

            "name": "SeparateModeAddRecordButton",

            "parentName": "SeparateModeActionButtonsLeftContainer",

            "propertyName": "items",

            "values": {

                "itemType": Terrasoft.ViewItemType.BUTTON,

                "style": Terrasoft.controls.ButtonEnums.style.GREEN,

                "caption": {"bindTo": "AddRecordButtonCaption"},

                "click": false,

                "visible": {"bindTo": "IsAddRecordButtonVisible"},

                "classes": {

                    "textClass": ["actions-button-margin-right"],

                    "wrapperClass": ["actions-button-margin-right"]

                },

                "controlConfig": {

                    "menu": {

                        "items": {

                            "bindTo": "EditPages",

                            "bindConfig": {

                                "converter": function(editPages) {

                                    if (editPages.getCount() === 0) {

                                        return null;

                                    }

                                    var operationHash = {

                                        "38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования

                                        "2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"

                                    };

                                    

                                    var allowedPages = [];

                                    

                                    if (this.get("CanAbilityToAdd1")) {

                                        allowedPages.push("CanAbilityToAdd1");

                                    }

                                    

                                    if (this.get("CanAbilityToAdd2")) {

                                        allowedPages.push("CanAbilityToAdd2");

                                    }

                                    for (var key in operationHash) {

                                        var hashItem = departmentToOperationHash[key];

                                        if (allowedPages.indexOf(hashItem) === -1) {

                                            editPages.collection.remove(editPages.collection.getByKey(key));

                                        }

                                    }

                                    return editPages;

                                }

                            }

                        }

                    }

                }

            }

        }

}

 

В init добавляем к примеру проверку на доступ по операции, либо другую функциональность

initCanAbilityToAdd1: function() {

                RightUtilities.checkCanExecuteOperation({

                    operation: "CanAbilityToAdd1"

                }, function(result) {

                    this.set("CanAbilityToAdd1", result);

                }, this);

            },

Добрый вечер.

Кнопки для добавления разных типов записей генерируются автоматически в зависимости от информации в таблице SysModuleEdit и поля TypeColumnValue в этой таблице.

Названия пунктов меню для разных страниц редактирования берутся из поля ActionKindCaption.

Более подробную информацию посмотрите в этом посте.

Пользовательскими настройками (без внесения дополнительных изменений в программный код) настроить видимость пункта меню в кнопке [Добавить] этого сделать не получится.

Базовая логика добавления пунктов меню для кнопки [Добавить] раздела реализована в схеме 'BaseDataView' пакета NUI.

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

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

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

Не уверенна, что разграничение прав доступа, как-то повлияет на видимость пункта меню кнопки [Добавить] для этого типа.

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

В diff схемы реестра раздела добавляем 

{

            "operation": "merge",

            "name": "SeparateModeAddRecordButton",

            "parentName": "SeparateModeActionButtonsLeftContainer",

            "propertyName": "items",

            "values": {

                "itemType": Terrasoft.ViewItemType.BUTTON,

                "style": Terrasoft.controls.ButtonEnums.style.GREEN,

                "caption": {"bindTo": "AddRecordButtonCaption"},

                "click": false,

                "visible": {"bindTo": "IsAddRecordButtonVisible"},

                "classes": {

                    "textClass": ["actions-button-margin-right"],

                    "wrapperClass": ["actions-button-margin-right"]

                },

                "controlConfig": {

                    "menu": {

                        "items": {

                            "bindTo": "EditPages",

                            "bindConfig": {

                                "converter": function(editPages) {

                                    if (editPages.getCount() === 0) {

                                        return null;

                                    }

                                    var operationHash = {

                                        "38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования

                                        "2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"

                                    };

                                    

                                    var allowedPages = [];

                                    

                                    if (this.get("CanAbilityToAdd1")) {

                                        allowedPages.push("CanAbilityToAdd1");

                                    }

                                    

                                    if (this.get("CanAbilityToAdd2")) {

                                        allowedPages.push("CanAbilityToAdd2");

                                    }

                                    for (var key in operationHash) {

                                        var hashItem = departmentToOperationHash[key];

                                        if (allowedPages.indexOf(hashItem) === -1) {

                                            editPages.collection.remove(editPages.collection.getByKey(key));

                                        }

                                    }

                                    return editPages;

                                }

                            }

                        }

                    }

                }

            }

        }

}

 

В init добавляем к примеру проверку на доступ по операции, либо другую функциональность

initCanAbilityToAdd1: function() {

                RightUtilities.checkCanExecuteOperation({

                    operation: "CanAbilityToAdd1"

                }, function(result) {

                    this.set("CanAbilityToAdd1", result);

                }, this);

            },

Да, Алла права, похоже, права на запись в справочнике типов не влияют, ведь выпадающий список формируется по объекту «Страница редактирования». А он общий для всех разделов. В таком случае лучше воспользоваться доработкой по предложению Евгения.

 

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

Полозюков Евгений Петрович,

 пытаюсь сделать что-то подобное, все проверила 10 раз, но отладчик выдает:

Uncaught (in promise) TypeError: RightUtilities.checkCanExecuteOperation is not a function

А Вы добавили в начале в квадратных скобках и параметрах ссылку на RightUtilities? Посмотреть, как это сделано, можно в других схемах, где её используют:

define("SysOperationAuditSectionV2", ["BaseFiltersGenerateModule", "SysOperationAudit", "SysOperationAuditArch",
	"RightUtilities"],
function(BaseFiltersGenerateModule, SysOperationAudit, SysOperationAuditArch, RightUtilities) {
	return {

 

Зверев Александр, да, была проблема с последовательностью схем и параметров, передаваемых в схему)

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

 

Спасибо, что подсказали на тему замещения BaseDataView. Натолкнули на верный путь!

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

define("ActivitySectionV2", ["ConfigurationConstants","RightUtilities","ProcessModuleUtilities","BaseDataView"],
function(ConfigurationConstants,RightUtilities,ProcessModuleUtilities) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		attributes: 
		{ 
			"UsrCanManageItTask": {
				dataValueType: this.Terrasoft.DataValueType.BOOLEAN,
				type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
				value: false
			}
		},
		diff: /**SCHEMA_DIFF*/[
 
			]/**SCHEMA_DIFF*/,
		methods: {
			init: function()
			{
					this.getUserSettingsOperationRight();
					window.console.log("Инициализация");
					this.callParent(arguments);
					window.console.log("Права");
 
			},
 
			initEditPages: function() {
				window.console.log("Определение кнопок начало");
 
				var enabledEditPages = new this.Terrasoft.Collection();
 
					this.callParent(arguments);
					var editPages = this.get("EditPages");
 
					window.console.log("Получение страниц");
					var flag = this.get("UsrCanManageItTask");
					this.Terrasoft.each(editPages.getItems(), function(item) {
						window.console.log("Проверка типа");
						window.console.log(item.get("Id"));
						//window.console.log(ConfigurationConstants.Activity.Type.Email);ConfigurationConstants.Activity.Type.Call
						if (item.get("Id") !== "e2831dec-cfc0-df11-b00f-001d60e938c6" &amp;&amp;
							item.get("Id") !== "e1831dec-cfc0-df11-b00f-001d60e938c6") {
 
							if (item.get("Id") !== "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661")
							{
								enabledEditPages.add(item);
								//window.console.log("ок");
							}
							else { 
								if (flag)
								{
										enabledEditPages.add(item);
										//window.console.log("ок");
								}
							}
						}
					});
					window.console.log("Проверка типа конец");
					this.set("EnabledEditPages", enabledEditPages);
 
					window.console.log("Определение кнопок конец");
			},
 
			getFilters: function() {
						window.console.log("Добавление фильтра");
						var filters = this.callParent(arguments);
						if (!this.get("UsrCanManageItTask"))
						{
							filters.add("NotItTask", this.Terrasoft.createColumnFilterWithParameter(
							this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661"
							));
							window.console.log("Добавление фильтра");
						}
						return filters;
			},
 
			getUserSettingsOperationRight: function() {
				//debugger;
				var operationsToRequest = ["UsrCanManageItTask"];
				//operationsToRequest.push("UsrCanManageItTask");
				window.console.log("Права");
 
				RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) {
					if (result) {
						this.set("UsrCanManageItTask", result.UsrCanManageItTask);
						window.console.log("Права на ит-задачи: "+result.UsrCanManageItTask);
					}
				}, this);
			}
		}
 
	};
});

 

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

Собственно, сабж. Картинкой будет более понятно, с пояснениями:

 

1) Добавляем активность используя выборку объектов, предположим неких кастомных "эмейлов" (отдельный объект, не активность) 

2) В наших кастомных звонках, выборку по которым мы делаем, нет поля "контакт", зато есть поле "договор", который уже содержит в себе "контакт". 

Т.е. хорошо бы в нашу активность записать "договор.контакт", но к сожалению такой возможности нет.

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

Спасибо.

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

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

Роман, зарегистрировали идею в элементе БП «Добавить данные» при выборе значения в поле добавляемого объекта из пункта меню 'Колонка из выборки' дать возможность выбрать колонки других объектов по связям. Спасибо за предложение.

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

Здравствуйте. Пытаюсь добавить новую деталь в раздел Контакты на вкладку история.
1. Создал схему представления детали с реестром (RequestDetail), в зависимостях указал родительский объект Request
2. создал замещающий клиентский модуль для страницы раздела контакт (ContactPageV2)

/////////////////////////
//код СontactPageV2//
/////////////////////////

define("ContactPageV2", ["ContactPageV2Resources",
"ConfigurationItemGenerator"],
function(resources) {
return {
entitySchemaName: "Contact",
details: /**SCHEMA_DETAILS*/{
Request: {
/*// name: "Request", - ����� ���� ������� name, �� ��������� ������� ��� ������� ��������� ������
filter: {masterColumn: "Id", detailColumn: "ContactId"}, // masterColumn ������������, �� ��������� - "Id"
filterMethod: function() {
}, // ����� ��� �������� ������� - ��� ������� ����������
defaultValues: {"Number": "50",
"Name": "Default11"} // �������� �� ���������*/
schemaName: "RequestDetail",
filter: {
masterColumn: "Id",
detailColumn: "Contact"
}
}
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[

{
"operation": "insert",
"parentName": "HistoryTab",
"propertyName": "items",
"name": "Request",
"values": {
"itemType": Terrasoft.ViewItemType.DETAIL
}
}
]/**SCHEMA_DIFF*/
};
});

///////////////////////
//код RequestDetail//
///////////////////////

define("RequestDetail", ["terrasoft","Request","RequestDetailResources"],
function(terrasoft,entitySchema,resources) {
return {
/**
* ��� ����� �������
* @type {String}
*/

entitySchemaName: "Request",
messages: { },
attributes: { },
diff: [ {
"operation": "insert",
"name": "DataGrid",
"values": {
type: "listed",
listedConfig: {
name: "DataGridListedConfig",
items: [
{
name: "NumberListedGridColumn",
bindTo: "Number",
type: Terrasoft.GridCellType.TEXT,
position: {
column: 1,
colSpan: 12
}
},
{
name: "DateListedGridColumn",
bindTo: "Date",
type: Terrasoft.GridCellType.TEXT,
position: {
column: 13,
colSpan: 6
}
}
]
},
tiledConfig: {
name: "DataGridTiledConfig",
grid: {columns: 24, rows: 3},
items: [
{
name: "NumberTiledGridColumn",
bindTo: "Number",
type: Terrasoft.GridCellType.TEXT,
position: {
row: 1,
column: 1,
colSpan: 24
},
captionConfig: {
visible: true
}
}
]
}
}
}
]
};
});

Нравится

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

Уже разобрался. Не указал базовый объект схемы детали.

Как добавить действие детали? Ни getSectionActions, ни getActions не срабатывают.

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

Посмотрите, пожалуйста, данный топик

"Резниченко Сергей" написал:

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

Посмотрите, пожалуйста, данный топик


Данный топик является примером добавления действия для раздела. Я же пытаюсь добавить действия для ДЕТАЛИ.
После просмотра файла BaseDetailV2 от которого наследуется деталь выяснялось, что для деталей не предусмотрен базовый метод getActions. Значит действие для ДЕТАЛИ добавить нельзя. Верно?
Тогда, возможно, для каждой записи детали можно добавить кнопку? Подскажите как это реализовать.

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

Вся манипуляции с действиями детали находится в BaseGridDetailV2, там есть

// Действия
{
   "operation": "insert",
   "name": "ActionsButton",
   "parentName": "Detail",
   "propertyName": "tools",
   "values": {
      "itemType": Terrasoft.ViewItemType.BUTTON,
      "caption": {"bindTo": "Resources.Strings.ActionsButtonCaption"},
      "visible": false,
      "menu": []
   }
},

В эту схему в меню и надо добавлять. Приведу небольшой пример:

{
                                                                              "operation": "insert",
                                                                              "name": "CopyRecordMenu",
                                                                              "parentName": "ActionsButton",
                                                                              "propertyName": "menu",
                                                                              "values": {
                                                                                              "caption": {"bindTo": "Resources.Strings.CopyMenuCaption"},
                                                                                              "click": {"bindTo": "copyRecord"},
                                                                                              "enabled": {"bindTo": "getCopyRecordMenuEnabled"}
                                                                              }
                                                               },
 
 {
                                                                              "operation": "insert",
                                                                              "name": "EditRecordMenu",
                                                                              "parentName": "ActionsButton",
                                                                              "propertyName": "menu",
                                                                              "values": {
                                                                                              "caption": { "bindTo": "Resources.Strings.EditMenuCaption" },
                                                                                              "click": { "bindTo": "editRecord" },
                                                                                              "enabled": {"bindTo": "getEditRecordButtonEnabled"}
 
                                                                              }
                                                               },

"Резниченко Сергей" написал:

Огромное спасибо! Все работает

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

Здравствуйте, помогите решить задачу!
Нужно добавить кнопку загрузки файла, кнопку загрузки фото, и кнопку импорта данных!
Два варианта:
1. В карточке продажи в раздел Действия(там где печатные формы).
2. На страницу карточки продаж где то возле текстовых полей.
Буду благодарен за любую информацию.

Нравится

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

Если это в 5 версии, тогда есть контрол UploadFile/Поле загрузки файла, что бы его увидеть возле поиска в левой панеле есть иконка нажми на нее и в самом низу нажми на "Все" в разделе "Элементы"

Юрий, если вопрос по BPMonline 7.0 для решения задачи по загрузке файлов, в качестве примера воспользуйтесь, пожалуйста, реализацией датали «Файлы и ссылки».
Схема FileDetail: методы onFileSelect, onFileLoad.
Код, реализующий добавление кнопки загрузки имеет вид:

buttonsContainer.items = [{
	className: 'Terrasoft.Button',
	id: 'addFileButton',
	caption: resources.localizableStrings.AddFileCaption,
	tag: 'addFileButton',
	fileUpload: true,
	click: {
		bindTo: 'onAddFileClick'
	}
				}];

Связка метода onFileSelect с обработчиком события onAddFileClick:

this.methods.onAddFileClick = function(event) {
	var button = Ext.getCmp('addFileButton');
	button.on('filesSelected', this.onFileSelect, this);
	};
Показать все комментарии

Подскажите пожалуйста. Вопрос у меня по работе с БД.
Необходимо осуществить добавления в БД не повторяющихся данных из файла. Как получить данные из файла и добавить я разобрался. Добавление делаю с помощью insert:

if (????????){
var insert = new Insert(UserConnection)
  .Into("ConfItemsCode")
  .Set("Name", Column.Const(str));
  insert.Execute();
}

Но передо добавлением в БД мне надо проверить есть ли в этой таблице уже такая запись. Делаю это так:
var select = new Select(UserConnection)
  .Column("Name")
  .From("ConfItemsCode")
  .Where("Name").IsEqual(str); // пробовал и IsLike

str - это переменная типа string - данный из файла.
Вопрос: Как мне узнать есть ли в select какие -либо записи. Пробовал RowCount, HasCondition. Подскажите как это сделать правильно. Желательно получить int или bool для того чтобы проверить а только потом добавлять.

Нравится

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

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

Проще всего воспользоваться EnitySchemaQuery классом:

string Str = "test";
 
 
var manager = UserConnection.EntitySchemaManager;
var query = new EntitySchemaQuery(manager, "Account");
var currentAccountId = query.AddColumn(query.RootSchema.PrimaryColumn.Name);
var accountPhone = query.AddColumn("Name").Name;
query.Filters.Add(query.CreateFilterWithParameters(FilterComparisonType.Equal, "Name", Str));
var queryResult = query.GetEntityCollection(UserConnection);
if (queryResult.Count == 0) 
{
       var insert = new Insert(UserConnection)
  .Into("ConfItemsCode")
  .Set("Name", Column.Const(str));
  insert.Execute();
}

Дмитрий, спасибо. Все получилось

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