Коллеги, приветствую.

Есть некоторый код простого клиентского модуля, который должен показать простую карточку с текстовым полем и кнопками "Отмена" и "Далее".

 

define("UsrPlanningTasksForCustomer", ["CustomProcessPageV2Utilities"], function() {
        return {
                entitySchemaName: "Contact",
                mixins: {
                        BaseProcessViewModel: "Terrasoft.CustomProcessPageV2Utilities"
                },
                attributes: {
                        "Employee": {
                        caption: { "bindTo": "Resources.Strings.EmployeeCaption" },
                        dataValueType: Terrasoft.DataValueType.TEXT
                        }
                },
                details: {
                },
                methods: {
                        getHeader: function() {
                                return this.get("Resources.Strings.PageHeaderCaption");
                        },
                        onMyCancelButtonClick: function() {
                                this.set("Result", "RejectedByCustomer");
                                this.acceptProcessElement();
                        },
                        onNextButtonClick: function() {
                                this.set("Result", "Next");
                                this.acceptProcessElement();
                        }
                },
                diff:
                [
                       
                        {
                                "operation": "remove",
                                "name": "DelayExecutionButton"
                        },
                        {
                                "operation": "remove",
                                "name": "actions"
                        },
                        {
                                "operation": "remove",
                                "name": "SaveButton"
                        },
                        {
                                "operation": "remove",
                                "name": "CancelButton"
                        },
                        {
                                "operation": "remove",
                                "name": "DiscardChangesButton"
                        },
                        {
                                "operation": "remove",
                                "name": "ViewOptionsButton"
                        },
                        {
                                "operation": "remove",
                                "name": "PrintButton"
                        },
                        {
                                "operation": "remove",
                                "name": "CloseButton"
                        },
                       
                        {
                                "operation": "insert",
                                "parentName": "LeftContainer",
                                "propertyName": "items",
                                "name": "MyCancelButton",
                                "values": {
                                        caption: { "bindTo": "Resources.Strings.MyCancelButton" },
                                        itemType: Terrasoft.ViewItemType.BUTTON,
                                        classes: {textClass: "actions-button-margin-right"},
                                        style: Terrasoft.controls.ButtonEnums.style.RED,
                                        click: {bindTo: "onMyCancelButtonClick"}
                                }
                        },
                        {
                                "operation": "insert",
                                "parentName": "LeftContainer",
                                "propertyName": "items",
                                "name": "NextButton",
                                "values": {
                                        caption: { "bindTo": "Resources.Strings.NextButtonCaption" },
                                        itemType: Terrasoft.ViewItemType.BUTTON,
                                        classes: {textClass: "actions-button-margin-right"},
                                        style: Terrasoft.controls.ButtonEnums.style.GREEN,
                                        click: {bindTo: "onNextButtonClick"}
                                }
                        },
                       
                        {
                        "operation": "insert",
                        "parentName": "Header",
                        "name": "DataGroup",
                        "propertyName": "items",
                        "values": {
                                itemType: Terrasoft.ViewItemType.CONTROL_GROUP,
                                items: [],
                                "caption": {"bindTo": "Resources.Strings.DataGroupCaption"},
                                "layout": { "column": 18, "row": 0, "colSpan": 18 },
                                controlConfig: {collapsed: false}
                        }
                        },
                        {
                        "operation": "insert",
                        "name": "TopCenterInfoBlock",
                        "parentName": "DataGroup",
                        "propertyName": "items",
                        "values": {
                                "layout": { "column": 0, "row": 0 },//, "colSpan": 15 },
                                "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                                "items": []
                        }                                      
                ]
        };
});

 

Собственно, кнопки "Отмена" и "Далее" отображаются, но не отображается мое текстовое поле и, ко всему, появляются ряд полей, которые я не определял, как то "Продукт", "Прайс-лист", "Цена", "Валюта", "Налог".

Как удалить преднастроенные элементы и отобразить текстовое поле?

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

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

Так, собственно, как текстовое поле добавить примерно понял - нужно добавить соответствующий атрибут и в блоке diff определить контейнер, в него вложить метку и само поле:

attributes: {
	"EmployeeTextField": {
		caption: { "bindTo": "Resources.Strings.EmployeeCaption" },
		dataValueType: Terrasoft.DataValueType.TEXT
	}
}
...
 
diff:
[
	...
	{
		"operation": "insert",
		"parentName": "ProductGeneralInfoBlock",
		"propertyName": "items",
		"name": "PlanningBlock",
		"values": {
			"itemType": this.Terrasoft.ViewItemType.GRID_LAYOUT,
			"layout": { "column": 1, "row": 2, "colSpan": 24 },
			"items": []
		}
	},
	{
		"operation": "insert",
		"parentName": "PlanningBlock",
		"name": "EmployeeLabel",
		"propertyName": "items",
		"values": {
			"itemType": this.Terrasoft.ViewItemType.LABEL,
			"caption": { "bindTo": "Reources.Strings.EmployeeCaption" },
			"layout": { "column": 0, "row": 0, "colSpan": 2 }
		 }
	},
	{
		"operation": "insert",
		"parentName": "PlanningBlock",
		"propertyName": "items",
		"name": "EmployeeTextField",
		"values": {
			"itemType": this.Terrasoft.ViewItemType.TEXT,
			"layout": { "column": 2, "row": 0, "colSpan": 20 }
		}
	}
]

Но как удалить преднастроенные поля?

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

Да, нужно указать родительский объект "Базовая схема карточки ( NUI )"

Думаю как то так.
{
"operation": "remove",
"name": "PlanningBlock"

},

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

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

Нравится

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

Здравствуйте!
Стоит задача сохранить карточку детали без выхода из неё. Также обязательным условием является выполнение событий обработки обновления записи, описанной в объекте. (Событие SxMyObjUpdating)

this.save(), this.saveEntity(function () {}); - Событие Udpating отрабатывает, но сразу закрывается карточка

this.saveEntity() - В Событие Updating не попадает + результат:

 Uncaught TypeError: Cannot read property 'call' of undefined
core.js:466 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
 file: http://pashchenko:7400/0/core/5bd338b22650c32496b5ec4322b7b2eb/combined/... line: 618
 message: Uncaught TypeError: Cannot read property 'call' of undefined
 date: Mon Feb 02 2015 18:19:25 GMT+0300 (Саудовское время (зима))

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

Нравится

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

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

Здравствуйте, Александр!
Чтобы понимать, что происходит при вызове методов всегда смотрите исходники. Например, метод save() определен в "BasePageV2", выглядит следующим образом:

save: function(config) {
		this.showBodyMask();
		Terrasoft.chain(
			this.saveCheckCanEditRight,
			this.saveAsyncValidate,
			this.saveEntityInChain,
			function(next) {
				this.saveDetails(function(response) {
					if (this.validateResponse(response)) {
						next();
					}
				}, this);
			},
			function() {
				this.onSaved(this.cardSaveResponse, config);
				this.cardSaveResponse = null;
				delete this.cardSaveResponse;
			},
			this);
	},

Здесь нет переходов в другие разделы, значит нужно смотреть в методы, вызываемые внутри save(). Смотрим метод onSaved() и видим, что карточку можно сохранит в "тихом" режиме, тогда она закрываться не будет и не будет публиковаться сообщение "UpdateDetail", если в объекте config свойство isSilent имеет значение true:

				onSaved: function(response, config) {
					this.hideBodyMask();
					if (!this.get("NextPrcElReady")) {
						this.set("NextPrcElReady", response.nextPrcElReady);
					}
					if (config && config.isSilent) {
						this.onSilentSaved(response, config);
					} else {
........

А config, соответсвенно, берется из save(config).
Итого, нужно сохранять запись следующим образом:

this.save({isSilent:true});

Андрей, спасибо за подсказку.
Действительно так работает. Я так тоже пробовал, но оказалось, что из-за открытого дебаггера не скрывалась кнопка "Сохранить", что ввело в заблуждение.

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

bpm 5.4 on-site

не присваивается идентификатор полю в карточке

В Карточке Есть поле "Контрагент". В объекте системы это соответствует "Account", в базе "AccountID".

Пишу код

Page.DataSource.ActiveRow.SetColumnValue("AccountID", firma);

либо

Page.DataSource.ActiveRow.SetColumnValue("Account", firma);

получаю следующую ошибку:

Exception Message: Значение с именем "AccountID" не найдено
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Подскажите, пожалуйста, как исправить ошибку.

Нравится

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

Здравствуйте, Илья!
Название справочного поля в БД формируется как название поля в объекте + постфикс "Id". Именно "Id", а не "ID". То есть, правильно писать так:

Page.DataSource.ActiveRow.SetColumnValue("AccountId", firma);

если в объекте поле называется "Account".

Нет, так не работает.

Здравствуйте, Илья!
Как Вы поняли, что функция не работает? Если Вы ожидаете, что на странице изменится значение справочного поля, то Вы этого не увидите, так как Id меняется, но отображаетмое значение остается старое, новое нужно подгружать вручную, например так:

Page.DataSource.ActiveRow.SetColumnValue("AccountId", new Guid("8F2E3098-932C-49A8-8D06-B40462DA98CD"));
Page.DataSource.ActiveRow.LoadLookupDisplayValues("Account");
Показать все комментарии

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

Terrasoft CRM 3.x
В карточке редактирования контакта есть кнопка "отправить КП". При нажатии на эту кнопку открывается модальное окно "отправка КП". Необходимо в скрипт инициализации модального окна передать значение поля e-mail с карточки редактирования контакта.

Вопрос: как передать значение поля с карточки редактирования в карточку "отправка КП"?

Нравится

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

Ну я не знаю как в версии 3.3.0
В 3.4 окно открывается так

var EditWindowUSI = 'wnd_ContractEdit';
var Attributes = GetNewDictionary();
Attributes.Add('RecordID', GUID_NULL);          
Attributes.Add('NotifyObject', Self);
var DefaultValues = GetNewDictionary(); 
ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);

Если у вас также, то просто в DefaultValues передать параметр как-то так:

DefaultValues.Add('Email', Dataset('Email'));

Здравствуйте, Илья!
В 3.3.0 все так же, как описал Александр. Попробуйте.

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

Для некоторых клиентов карточки стали неактивны. Свойство IsEnabled для элементов, которые нельзя корректировать = true. Попытался сравнить записи, поля в которых доступны для редактирования, удаления и те, в которых недоступны. Особых различий не нашел. Сравнил свойства однотипных элементов из редактируемой и нередактируемой карточки. Отличается только свойство Color.
Что это может быть?
Карточка в прикрепленном файле.
Как ее хотя бы сделать активной, если нельзя сказать, почему она стала неактивной?

Нравится

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

Если бы дело в IsEnabled, то и названия были бы серые. А так получается что поля только для чтения. Скорее всего, что-то не так с правами, посмотрите различия на детали "Доступ".

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

Господа, всем доброго времени суток!
Возникает вопрос, а как снять запрет на поле набора данных, если в настройках ds на поле отключена галка "Только для чтения".
А у самого набора данных все опции включены ("Редактирование", "Добавление", "Удаление" и т.д.)

Добрый день.

Тут, скорее всего, проблема в правах доступа. Проверьте:

а) есть ли доступ для тек. пользователя на ваше поле в разделе "администрирование-доступ к полям"
б) посмотрите на детали "Доступ" в нужном Вам разделе, выделив "проблемную" запись под "проблемным" пользователем. Возможно у пользователя доступ только на чтение на эту конкретную запись.

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

А пользователь - Supervisor (если не ошибаюсь он вообще полный доступ иметь должен)

Если он админ - да.

Программно также можно... В функции OnPrepare Скрипта нужного Вам окна необходимо добавить проверку:

if(Connector.CurrentUser.UserContactID == 'ID какого либо контакта') {
      edtMyField.IsEnabled = false;
} else {
      edtMyField.IsEnabled = true;
}
Показать все комментарии

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

Есть задача: на карточке редактирования добавить свою логику сохранения записи, при которой нужно выводить в messagePanel сообщение подобное "Поле {0} обязательно для заполнения" и не давать сохранять запись.

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

Нравится

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

Здравствуйте Constantine!
Это просто.
У карточки редактирования есть метод: "AreConditionsCorrect". Переопределив его и добавив свою логику (установив Page.[EditControl].Required = true [данный метод установит свойство поле обязательно для заполнения] и панель сообщений сама Вам выведет указанное в описании сообщение со ссылкой на поле) или Вы можете вернуть значение "false" из метода перед этим заполнив MessagePanel, и базовая логика сохранения не отработает.
А лучше, если Вы будете устанавливать свойство обязательности в своей логике, например при смене значения другого поля.
И наконец, почему бы Вам просто не изменить свойство в объекте, установив значение "Обязательно для заполнения на уровне приложения"?

Спасибо за совет, Андрей!
Я видимо не совсем правильно сформулировал саму задачу. Указанное сообщение я упомянул для примера, а логика разрешения/запрета сохранения записи не касается обязательных для заполнения полей.
Буду копать в сторону этого метода

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

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

function wnd_CallEditOnPrepare(Window) {
Window.ForceBringToFront();// - разворачивает свернутое окно и выводит его на передний план.
Window.BringToFront();//– выводит на передний план не свернутое окно.
         Initialize(Window);
}

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

Нравится

Поделиться

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

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

в разделе Документы в закладках Подчиненный/Родительский документ при добавлении нового документа необходимо в карточке выбора документа отобразить колонку "Контрагент".

Как это сделать?

Нравится

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

В скрипте wnd_DocumentInDocumentGridAreaScript есть функция AddDocument(), внутри нее вызывается AddData(), первым параметром которой и передаются отображаемые поля. Вам нужно указать 'Title;AccountID'.

Спасибо, Ольга!
Небольшая поправочка: указать AccountID нужно уже внутри AddData(), а именно вот здесь:

function AddData(DisplayFieldName, SubjectFieldName, SelectDataDatasetUSI) {
var DisplayFieldNames =
		FormatStr('%1;OwnerID;AccountID', DisplayFieldName);
	var SearchFieldNames =
		FormatStr('%1;OwnerID;AccountID', DisplayFieldName);
...

www.informicus.ru

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

Ну это лишним не будет.
А при добавлении AccountID в параметр у меня ошибки вылетали.

www.informicus.ru

Прошу прощения, не учла, что SearchFieldName в AddData() нужно по-другому вычислять.

var SearchFieldName = DisplayFieldNames.substr(0, DisplayFieldNames.indexOf(';'));

Да-да, оно.спасибо!

www.informicus.ru

"Раловец Ольга" написал:В этом случае колонка появится и в окнах выбора подчиненных/ родительских счетов и договоров, а Вы спрашивали про документы

Полностью согласен! Лучше добавить по-отдельности поля в AddDocument, AddInvoice и AddContract - так при изменении каких либо полей можно легко изменять параметр для каждого дока:smile:
Спасибо за вопрос и ответ:twisted:

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

Здравствуйте.
1. Предметом продаж являются выполняемые работы. Есть ли возможность организовать учет субподрядов в карточке продаж (с учетом стоимости, сроков выполнения, плана и факта оплаты)? Можно добавить поля пользователя; но можно ли таким путем настроить их связь с последующим отражением данных в отчетах и запросах?
2. Каким путем лучше отражать в продажах сдачу и оплату работ в несколько этапов в рамках одного договора?
Спасибо.

Нравится

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

1. Конечно же можно. Для этого есть отдельный раздел - Проекты.
У каждой работы есть исполнитель (субподрядчик), сроки, стоимость, взаиморасчеты и т.п.
2. Там же отображается и сдача работ, условия оплаты (в виде счетов / договоров / доп. соглашений / конкретных условий по каждой услуге или ресурсу).

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

Пригласите к себе нашего менеджера - он с удовольствием Вам все продемонстрирует.

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