Здравствуйте.
Подскажите пожалуйста можна ли както сделать запрет на изменения даты начала активности менеджером?
Уточню: Вот у менеджера есть активность и у него есть дата начала. И если он не успевает ее обработать он переносит ее на следующий день. Но тут проблема - он может переносить ее как угодно на будущее. Мне нужно чтобы он смог ее переносить но не более чем на 7 дней вперед. Можна както это реализовать?

Нравится

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

Здравствуйте, Николай!

Вы можете сделать это на уровне триггеров в БД:
если измененная дата начала + 7 < новая дата начала, тогда Rollback транзакции.

"Демьяник Алексей" написал:Вы можете сделать это на уровне триггеров в БД:
если измененная дата начала + 7 < новая дата начала, тогда Rollback транзакции.

Это как то круто :) может все же попробовать сделать проверку на клиенте, смотреть SDK "Как добавить валидацию поля" (по ссылке 7.6 но не важно)

ps Правда придется еще как-то сохранить для сравнения то значение, что было в поле до редактирования.. на клиенте навскидку не подскажу
можно с текущей датой + 7 сравнивать

Здравствуйте!
У нас активности создаются автоматически при поступлении новой заявки и ее начало - єто дата поступления заявки. Но вот если заявки приходит в субботу или в воскресенье, тогда хочу чтобы активность имела Начало на следуюющий понедельник на 9-00 утра. Моги ли я Исользовать Элемент Изменение данных в БП и что мне нужно прописать и поле которое нужно изменить - Начало?

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

Добрый день.

Нигде не нашел документацию по WorkspaceConsole. Можно получить список всех параметров, а также примеры параметров для:
а) загрузки пакетов
б) выгрузки пакетов

Благодарю.

Нравится

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

Здравствуйте. Подскажите как сделать ссылку на внешний ресурс в текстовом поле.

Нравится

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

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

В текстовом поле достаточно перед текстом написать http:// и тогда данное поле в реестре записей будет восприниматься как ссылка. Если же Вам необходимо сделать ссылку на странице редактирования, то рекомендую ознакомиться с темой http://www.community.terrasoft.ru/forum/topic/9686

Демьяник Алексей,

Добрый день.

У меня такой же вопрос, а ссылка 

http://www.community.terrasoft.ru/forum/topic/9686 не открывается.

 

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

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

Может ли кто-нибудь подсказать, есть ли возможность указать явный порядок пунктов меню Печать в карточке редактирования сущности (например, Заказа)? Когда пунктов меню становится много, сложно найти нужный.

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

Нравится

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

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

Такая возможность есть. Вам необходимо переопределить PrintReportUtilities, либо переопределить отдельные его методы на странице редактирования/в разделе нужного объекта.

Алексей, спасибо за ответ! Не могли бы вы привести пример? Или хотя бы ссылку на документацию по методам PrintReportUtilites?

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

Могу ответить точечно, но не по всему миксину:smile:

Рекомендую посмотреть тему http://www.community.terrasoft.ru/blogs/15581

Алексей, премного благодарен!

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

initSectionPrintForms: function(callback, scope) {
	var reportsEsq = this.getModulePrintFormsESQ();
	reportsEsq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
			"ShowInSection", true));
	reportsEsq.getEntityCollection(function(result) {
 
		if (result.success && !result.collection.isEmpty()) {
			// Коллекция пунктов меню
			var printFormsMenuCollection = result.collection;
 
			/* Тут можно анализировать свои «условия» и удалять те или иные элементы printFormsMenuCollection */
			printFormsMenuCollection.collection.items = printFormsMenuCollection.collection.items.sort(
				function(item1, item2) {
					if (item1.values.Caption > item2.values.Caption) {
						return 1;
					}
					if (item1.values.Caption < item2.values.Caption) {
						return -1;
					}
					return 0;
				});
 
			this.preparePrintFormsMenuCollection(printFormsMenuCollection);
			printFormsMenuCollection.each(function(item) {
				item.set("Click", {bindTo: "generateSectionPrintForm"});
			}, this);
			var printMenuItems = this.preparePrintButtonCollection(this.moduleSectionPrintFormsCollectionName);
			printMenuItems.loadAll(printFormsMenuCollection);
			this.set(this.moduleSectionPrintFormsCollectionName, printMenuItems);
			this.getSectionPrintButtonVisible();
		}
 
		if (callback) {
			callback.call(scope || this);
		}
	}, this);
}

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

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

Уточните, пожалуйста, в схеме раздела также добавлена сортировка печатных форм или такая сортировка выполняется только на странице редактирования?

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

Здравствуйте, почему вы говорите о том, как ведет себя сортировка в карточке, и после обновления карточки. Если пишите метод «initSectionPrintForms». Так еще и речь заходит за написание этого кода в схеме секции.
Дело в том что, я было подумал что вы столкнулись с разницей работы кода в комбинированном режиме (когда слева видна часть секции, либо она спрятана за стрелочкой), и чистом режиме карточки (в который как раз можно попасть по F5).
Но метод initCardPrintForms, (CardPrint!) написанный в схеме страницы, отрабатывает как в комбинированном режиме, так и в чистом режиме карточки.
Вот к примеру чуть подправив ваш метод сортировки, написал его в initCardPrintForms, и в обоих режимах карточки, обратная сортировка работает:
Изначальный код метода брать необходимо из "PrintReportUtilities" т.к. от версии к версии он может разнится.

define("OpportunityPageV2", ["OpportunityPageV2Resources", "GeneralDetails", "StorageUtilities"],
function(resources, GeneralDetails, StorageUtilities) {
	return {
		entitySchemaName: "Opportunity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
		]/**SCHEMA_DIFF*/,
		attributes: {},
		methods: {
			initCardPrintForms: function(callback, scope) {
				var reportsEsq = this.getModulePrintFormsESQ();
				var entitySchemaName = this.getEntitySchemaName();
				reportsEsq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
					"ShowInCard", true));
				StorageUtilities.GetESQResultByKey({
					esq: reportsEsq,
					key: "ShowInCard_PrintForm_" + entitySchemaName,
					callback: function(result) {
						if (this.destroyed) {
							return;
						}
						if (result.success && !result.collection.isEmpty()) {
							var printFormsMenuCollection = result.collection;
 
							printFormsMenuCollection.collection.items = printFormsMenuCollection.collection.items.sort(
								function(item1, item2) {
									if (item1.values.Caption > item2.values.Caption) {
										return -1;
									}
									if (item1.values.Caption < item2.values.Caption) {
										return 1;
									}
									return 0;
								}
							);
 
							this.preparePrintFormsMenuCollection(printFormsMenuCollection);
							printFormsMenuCollection.each(function(item) {
								item.set("Click", {bindTo: "generateCardPrintForm"});
							}, this);
							var printMenuItems = this.preparePrintButtonCollection(this.moduleCardPrintFormsCollectionName);
							printMenuItems.loadAll(printFormsMenuCollection);
							this.set(this.moduleCardPrintFormsCollectionName, printMenuItems);
							this.getCardPrintButtonVisible();
						}
						if (callback) {
							callback.call(scope || this);
						}
					},
					scope: this
				});
			}
		},
		rules: {},
		userCode: {}
	};
});

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

Максим, прошу прощения за двусмысленность. Я привел код initSectionPrintForms секции, но вел речь о методе initCardPrintForms.

Ваш код я попробовал, результат тот же. Может, причина в различиях версии продукта (у нас BMP'Online Sales 7.7.0.2293)?

Скажите, а где я могу посмотреть код PrintReportUtilities?

Как ни странно, но в схеме PrintReportUtilities. :smile:

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

Всем спасибо за помощь! Решил проблему добавлением логики сортировки нужной колонки при составлении запроса к базе, переопределив метод getModulePrintFormsESQ() в OrderPageV2:

/**
 * Возвращает клиентский запрос для получения печатных форм.
 */
getModulePrintFormsESQ: function() {
	var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchema: SysModuleReport,
		isDistinct: true,
		rowViewModelClassName: "Terrasoft.BasePrintFormViewModel"
	});
	esq.addColumn(SysModuleReport.primaryColumnName);
	var captionColumn = esq.addColumn("Caption", "NonLocalizedCaption");
 
	// Устанавливает порядок сортировки колонки
	captionColumn.orderPosition = 0;
	captionColumn.orderDirection = Terrasoft.OrderDirection.ASC;
	...
	return esq;
}

То же самое сделал в методе getModulePrintFormsESQ() в OrderSectionV2 для раздела.

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

При выполнении бизнес - процесса возникает ошибка в элементе Задание-сценарий:

System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired)
в Terrasoft.Core.Process.UsrComingOnOrder.ScriptTask4Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Код сценария представляю ниже:

//берем все продукты из прихода

var stringVariable = "";
        EntitySchema ProductInSHOperationschema = UserConnection.EntitySchemaManager.GetInstanceByName("UsrProductInSHOperation");// товары в складском документе
        EntitySchemaQuery ProductInSHOperationesq = new EntitySchemaQuery(ProductInSHOperationschema);
        ProductInSHOperationesq.AddAllSchemaColumns();
        ProductInSHOperationesq.Filters.Add(ProductInSHOperationesq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrStoreHouseOperation", IdComing));
        EntityCollection ProductInSHOperationentities = ProductInSHOperationesq.GetEntityCollection(UserConnection);
       
        decimal kolvoComing=0.0m;//количество продукта в приходе
       
       
       
                foreach (Entity ProductInSHOpEntity in ProductInSHOperationentities) {
                                       
                        kolvoComing = ProductInSHOpEntity.GetTypedColumnValuedecimal>("UsrQuantity");//количество продукта в приходе
                        var ProductComing = ProductInSHOpEntity.GetTypedColumnValueGuid>("UsrProductId");//продукт в приходе
                         stringVariable = "ИД который получили:" + Convert.ToString(ProductComing)+"\n" + "Заказ который получили:" + Convert.ToString(OrderId);
                        //Получим строки продуктов из нашего заказа
                        Custom.UsrDebug.Utils.SendMessage(UserConnection, "mishutina-julja@rambler.ru", stringVariable);
                       
                        //берем  продукты из заказа поставщика по приходу (номер заказа, по которому создан приход = номеру заказа поставщика, сортипрвка по дате заказа поставщика)-скрытая деталь
                        EntitySchema OrderProvidersProductschema = UserConnection.EntitySchemaManager.GetInstanceByName("UsrOrderProvidersProduct");// товары из заказа поставщика
                        EntitySchemaQuery OrderProvidersProductesq = new EntitySchemaQuery(OrderProvidersProductschema);
                       
                        OrderProvidersProductesq.AddColumn("UsrQuantity");
                        OrderProvidersProductesq.AddColumn("UsrProduct");
                        OrderProvidersProductesq.AddColumn("UsrMust");
                        OrderProvidersProductesq.AddColumn("UsrOrderId");
                        OrderProvidersProductesq.AddColumn("UsrShipped");
                        OrderProvidersProductesq.AddColumn("UsrClientsOrderId");
                        OrderProvidersProductesq.AddColumn("UsrClientsOrderId.CreatedOn").OrderByAsc();
                       
                        OrderProvidersProductesq.Filters.Add(OrderProvidersProductesq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrOrderId", OrderId));
                        OrderProvidersProductesq.Filters.Add(OrderProvidersProductesq.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrProduct", ProductComing));
                       
                        EntityCollection OrderProvidersProductentities = OrderProvidersProductesq.GetEntityCollection(UserConnection);
                                       
                        foreach (Entity OrderProvidersProductEntity in OrderProvidersProductentities) {
                                 
                                if (kolvoComing == 0) break;
                               
                                decimal kolvoProvider = OrderProvidersProductEntity.GetTypedColumnValuedecimal>("UsrQuantity");//количество в заказе поставщику
                                var OrderProvidersProduct = OrderProvidersProductEntity.GetTypedColumnValueGuid>("UsrProductId");//продукт в скрытой детали
                               
                                stringVariable = "ИД OrderProvidersProduct который получили:" + Convert.ToString(OrderProvidersProduct);
                                Custom.UsrDebug.Utils.SendMessage(UserConnection, "mishutina-julja@rambler.ru", stringVariable);
                               
                                decimal Must =  OrderProvidersProductEntity.GetTypedColumnValuedecimal>("UsrMust");// надо
                                decimal Shipped = OrderProvidersProductEntity.GetTypedColumnValuedecimal>("UsrShipped");//отгружено
                                decimal kolvoRealNeed = Must - Shipped; //надо - отгружено
                               
                                stringVariable = "Must:  " + Convert.ToString(Must)+"  Shipped:" + Convert.ToString(Shipped)+"  kolvoRealNeed:" + Convert.ToString(kolvoRealNeed);
                                Custom.UsrDebug.Utils.SendMessage(UserConnection, "mishutina-julja@rambler.ru", stringVariable);
                               
                                //распределение количества из прихода в скрытую деталь   
                                        if  (OrderProvidersProduct == Guid.Empty) break;
                                        else {
                                        if (kolvoComing >= kolvoRealNeed) {
                                                OrderProvidersProductEntity.SetColumnValue("UsrShipped", Shipped + kolvoRealNeed);
                                                OrderProvidersProductEntity.Save();
                                                kolvoComing -= kolvoRealNeed;
                                        } else {
                                                OrderProvidersProductEntity.SetColumnValue("UsrShipped", Shipped + kolvoComing);
                                                OrderProvidersProductEntity.Save();
                                                kolvoComing = 0;
                                        }
                                        }//конец else
                        }//цикл по скрытой детали заказ поставщика
                }//цикл по приходу
                return true;

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

Нравится

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

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

Сообщение "System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта" возникает, если система не может найти какой-то объект.
Здесь два варианта:
Выполните действие "Компилировать все". Если это действие не помогло, значит где-то в коде встречается ссылка на несуществующий объект (проверьте названия объектов, к которым Вы обращаетесь в коде).

Юлия,

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

Когда появится ошибка, у Вас будет возможность понять, какой именно объект не может найти система.

Спасибо большое, разбираемся

Заменили Save на Update...и все данные сохранились))

var update = new Update(userConnection, "UsrOrderProvidersProduct")
.Set("UsrShipped", Column.Parameter((Shipped + kolvoRealNeed)))
.Where("UsrProductId").IsEqual(Column.Parameter(ProductComing))
.And("UsrOrderIdId").IsEqual(Column.Parameter(OrderId));
update.Execute();

Хоть вопрос и решен, но все же отпишусь, вдруг пригодится кому-нибудь.
Была такая же проблема. Ошибка при вызове метода Save() для Entity
Было сделано следующее наблюдение:
Код:

var esqNumeration = new EntitySchemaQuery(userConnection.EntitySchemaManager, "UsrObjectNumeration");
//esqNumeration.AddColumn("UsrNumber");
esqNumeration.AddAllSchemaColumns();
var entitiesNumeration = esqNumeration.GetEntityCollection(userConnection);
number = entitiesNumeration[0].GetTypedColumnValue<int>("UsrNumber") + 1;
entitiesNumeration[0].SetColumnValue("UsrNumber", number);
entitiesNumeration[0].SetColumnValue("UsrNumber", number);
entitiesNumeration[0].Save();

Прошу обратить внимание на строки:

//esqNumeration.AddColumn("UsrNumber");
esqNumeration.AddAllSchemaColumns();

При такой записи ошибки при вызове метода нет.
Но если сделать наоборот, т.е. добавить только одну колонку, без вызова метода AddAllSchemaColumns(), то получим ошибку "Ссылка на объект не указывает на экземпляр объекта" при вызове entitiesNumeration[0].Save()

Эмин, большое спасибо за Ваш комментарий.

Таким образом, получается, что нам нужно было выбрать все колонки в запросе, а не только те, которые нам необходимы были. И тогда Save() бы сработал. Я Вас правильно поняла?

"Юлия Мишутина" написал:

Таким образом, получается, что нам нужно было выбрать все колонки в запросе, а не только те, которые нам необходимы были. И тогда Save() бы сработал. Я Вас правильно поняла?


Да, все верно. Save() работает только если вызвать AddAllSchemaColumns().

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

Добрый день

Просьба подсказать, где находится процесс по копированию карточки е-мейл? Имеется в виду процесс, к-ый происходит при нажатии на кнопку "Копировать" . Я хотела бы посмотреть, как описаны действия по копированию данных из "старой" е-мейл в новую? Заранее спасибо

Нравится

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

Это не процесс, а логика в нескольких карточках.

Базовая для всех разделов логика копирования полей записи находится в «BaseModuleEditPage» в скрипте «ScriptPageLoadComplete» после строки «if (IsCopy)».
Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».

В обоих случаях проверяется истинность параметра IsCopy в БП карточки и в зависимости от этого производятся те или иные действия.

Подскажите, пожалуйста, как лучше сделать процесс пересылки е-мейл активности? Новую кнопку "Переслать" (здесь нужно скопировать данные е-мейл-активности в новую е-мейл активность, перед этими данными написать, как в outlook
From:
Sent:
To:
Cc:
Subject: .
в полях карточки е-мейл Кому и копия = скопированные адреса) ?
Или же модифицировать имеющиеся скрипты?

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

Вы можете заказать такие доработки у компании Terrasoft или кого-то из партнёров.

Спасибо, я хочу сама попробовать это сделать

"Зверев Александр" написал:Для Email также есть отдельно логика копирования файлов в «EmailEditPage» в скрипте «FilesCopyScriptTask».

не нашла такого скрипта в EmailEditPage

А он есть.

Можете выслать, что именно написано в FilesCopyScriptTask?
ВОзм-но, в EmailEditPage этот скрипт не так называется.

public virtual bool FilesCopyScriptTaskExecute(ProcessExecutingContext context) {
			var targetGuid = Page.DataSource.ActiveRow.PrimaryColumnValue;
var srcGuid = new Guid(Page.GetParameterValue("recordId").ToString());
CopyFiltes(UserConnection, Page.DataSource.ActiveRow, srcGuid, targetGuid, "Activity", string.Empty, true);
return true;
		}

Из неё вызывается:

public virtual void CopyFiltes(UserConnection userConnection, Entity activeRow, Guid srcGuid, Guid targetGuid, string srcSchema, string targetSchema, bool isChangeHtmlBody) {
			if(string.IsNullOrEmpty(targetSchema)){
	targetSchema = srcSchema;
}
var targetEntitySchema = userConnection.EntitySchemaManager.GetInstanceByName(string.Format("{0}File", targetSchema));
Dictionary<Guid, Guid> fileList = new Dictionary<Guid, Guid>();
 
var srcESQ = new EntitySchemaQuery(userConnection.EntitySchemaManager, string.Format("{0}File", srcSchema));
srcESQ.IsDistinct = true;
var idColumn =srcESQ.AddColumn(srcESQ.RootSchema.GetPrimaryColumnName());
var nameColumn = srcESQ.AddColumn("Name");
var dataColumn = srcESQ.AddColumn("Data");
var notesColumn = srcESQ.AddColumn("Notes");
var versionColumn = srcESQ.AddColumn("Version");
var sizeColumn = srcESQ.AddColumn("Size");
var typeColumn = srcESQ.AddColumn("Type");
srcESQ.Filters.Add(srcESQ.CreateFilterWithParameters(FilterComparisonType.Equal, srcSchema, srcGuid));
var srcList = srcESQ.GetEntityCollection(userConnection);
foreach(var src in srcList) {
	var idSchemaColumn = src.Schema.Columns.GetByName(idColumn.Name);
	var fileId = src.GetTypedColumnValue<Guid>(idSchemaColumn.ColumnValueName);
 
	var nameSchemaColumn = src.Schema.Columns.GetByName(nameColumn.Name);
	var fileName = src.GetTypedColumnValue<String>(nameSchemaColumn.ColumnValueName);
 
	var dataSchemaColumn = src.Schema.Columns.GetByName(dataColumn.Name);
	var fileData = src.GetBytesValue(dataSchemaColumn.ColumnValueName);
 
	var notesSchemaColumn = src.Schema.Columns.GetByName(notesColumn.Name);
	var fileNotes = src.GetTypedColumnValue<String>(notesSchemaColumn.ColumnValueName);
 
	var versionSchemaColumn = src.Schema.Columns.GetByName(versionColumn.Name);
	var fileVersion = src.GetTypedColumnValue<System.Int32>(versionSchemaColumn.ColumnValueName);
 
	var sizeSchemaColumn = src.Schema.Columns.GetByName(sizeColumn.Name);
	var fileSize = src.GetTypedColumnValue<System.Int32>(sizeSchemaColumn.ColumnValueName);
 
	var typeSchemaColumn = src.Schema.Columns.GetByName(typeColumn.Name);
	var fileTypeId = src.GetTypedColumnValue<Guid>(typeSchemaColumn.ColumnValueName);
 
	var targetEntity = targetEntitySchema.CreateEntity(userConnection);
	targetEntity.SetDefColumnValues();
	Guid newGuid = targetEntity.PrimaryColumnValue;	
	targetEntity.SetColumnValue(string.Format("{0}Id", targetSchema), targetGuid);	
	targetEntity.SetColumnValue("Name", fileName);
	targetEntity.SetColumnValue("Data", fileData);
	targetEntity.SetColumnValue("Notes", fileNotes);
	targetEntity.SetColumnValue("Version", fileVersion);
	targetEntity.SetColumnValue("Size", fileSize);
	targetEntity.SetColumnValue("TypeId", fileTypeId);
	if(targetEntity.Save()){
		fileList.Add((Guid)fileId, newGuid);
	}
}
 
if(isChangeHtmlBody && fileList.Count > 0){		
	string columnName = "Body";
	if(activeRow.Schema.Columns.FindByName("HtmlBody") != null){
		columnName = "HtmlBody";
	}
	string messageBody = activeRow.GetTypedColumnValue<string>(activeRow.Schema.Columns.GetByName(columnName));	
	messageBody = messageBody.Replace(srcGuid.ToString(), targetGuid.ToString());
	foreach(var item in fileList){
		messageBody = messageBody.Replace(item.Key.ToString().ToLower(), item.Value.ToString().ToLower());
	}
	var update = new Update(userConnection, activeRow.Schema.Name)
    				.Set(columnName, Column.Parameter(messageBody))
    				.Where("Id").IsEqual(Column.Parameter(activeRow.PrimaryColumnValue));
	update.Execute();
}
		}

А схема процесса какая?

EmailEditPage.
схема БП карточки

Добрый день
подскажите, пожалуйста, где в системе указывается, что при нажатии на кнопку "Копировать" срабатывает условие IsCopy ? т.е. где связь кнопки и условия?

В базовой странице реестра. Это можно увидеть, задав в поиске по исходникам схемы по слову "Copy" (с кавычками). А далее в странице редактирования вычитывается это же слово из параметров в URL.

Добрый день

Создала параметр my (логический), который при нажатии на кнопку "Переслать" принимает значение true.

Опубликовывает без ошибок, но файлы не копируются при нажатии на "Переслать".

// в Скрипте подготовки процесса действия Открыть карточку указано:
my = true;
var defValuesId = Guid.NewGuid();
var defValues = new Dictionary ();

defValues.Add("Contact", Page.ContactEdit.Value.ToString());
defValues.Add("Account", Page.AccountEdit.Value.ToString());
defValues.Add("CopyRecepient", Page.CopyRecepientEdit.Value.ToString());
defValues.Add("Title",Page.TitleEdit.Value.ToString());

if (new Guid (Page.IncidentEdit.Value.ToString()) != Guid.Empty)
{defValues.Add("Incident",Page.IncidentEdit.Value.ToString());}

Guid contactId = UserConnection.CurrentUser.ContactId; //id контакта текущего пользователя
string contactName = UserConnection.CurrentUser.ContactName; //имя контакта текущего пользователя
string contactmail = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Email", contactId);
string contactdol = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "JobTitle", contactId);
string contactphone = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "Phone", contactId);
string contactMobilePhone = Terrasoft.Configuration.CommonUtilities.GetEntityTypedColumnValue(UserConnection, "Contact", "MobilePhone", contactId);

string s6 = "


С уважением,
"+ contactName + "
" + contactdol + "
Департамент информационных технологий
АО «ДКС»"+ "

Tel :"+ contactphone + ", " + contactMobilePhone + "
e-mail :"+ contactmail +" , www.dkc.ru";

string text1 = Page.RecepientEdit.Value.ToString();
text1 = text1.Replace(",", "");
text1 = text1.Replace("", "");
text1 = text1.Replace("'СТП'", "");
text1 = text1.Replace("СТП", "");
string text2 = Page.SenderEdit.Value.ToString();
text2 = text2.Replace("support.it@dkc.ru", "");
string text = text2 + "," + text1;
defValues.Add("Recepient", text);

string s1 = "
From :"+ Page.SenderEdit.Value.ToString();
string s2 = "
Sent :"+ (DateTime)Page.DueDateEdit.Value +"(мск)";
string s3 = "
To :" + Page.RecepientEdit.Value.ToString()+"
Cc :"+ Page.CopyRecepientEdit.Value.ToString();
string s4 = "
Subject :"+Page.TitleEdit.Value.ToString()+"


";
string s5 = "


______________________________________________________________________________________________________________
";

string s = s6 + s5 + s1 + s2 + s3 + s4;
string html = Page.DataSource.ActiveRow.GetTypedColumnValue("HtmlBody");
string str = String.Concat(s,html);
defValues.Add("HtmlBody", str);

var ActivityId = Guid.NewGuid();

UserConnection.SessionData[defValuesId.ToString()] = defValues;
var parameters =
new Dictionary {
{"createWithUId", ActivityId.ToString()},
{"entitySchemaUId", "c449d832-a4cc-4b01-b9d5-8a12c42a9f89"},
{"defValuesId", defValuesId.ToString()}
};
OpenTaskEditPage1.OpenerInstanceId = InstanceUId;
OpenTaskEditPage1.UseCurrentActivePage = true;

OpenTaskEditPage1.PageUId = new Guid("dcdda065-321b-4560-aacb-05f6cc72cd80");
OpenTaskEditPage1.PageParameters = parameters ;

return true;

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

Ну не расстраивайтесь, есть многое, чему можно и радоваться :wink: Если хотите порассуждать на эту тему - я еще тот психолог :idea:

Да, зато опубликовалось без ошибок!:mrgreen:

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

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

Нравится

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

Олег, уточните, о каких именно ссылках идет речь?

Речь идет о ссылках ведущих в записи других разделов

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

Вам необходимо заместить соответствующий модуль. Для списка это DashboardGridModule.

Спасибо, еще небольшое уточнение - если для графика нажать показать данные - оттуда тоже можно перейти в другие разделы, за это тоже отвечает DashboardGridModule?

"Сафонов Олег" написал:

Спасибо, еще небольшое уточнение - если для графика нажать показать данные - оттуда тоже можно перейти в другие разделы, за это тоже отвечает DashboardGridModule?

Не совсем. У каждого типа итогов свой модуль.

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

Добрый день коллеги! Помогите пожалуйста избавиться от ошибки.
При отрытии мастера деталей - вылетает :

basecollection.js:20 Uncaught Terrasoft.ItemAlreadyExistsException: Элемент с ключём "771456ac-bf0a-494d-9136-086080423d03" Уже существует

сделал поиск по ключу - это id детали, из таблицы sysDetail. Можно ли как то обойти эту ошибку без удаления детали? или единственный выход удалить и заново зареестрировать деталь?

Нравится

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

Здравствуйте, Влад.

Вам необходимо удалить деталь.
Почистить за ней все в БД
И заново создать её.

ок, спасибо за быстрый ответ!

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

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

Версия BPM 7.6.0.1265, развернута OnSite.

Используя Terrasoft.Sync в БП вывожу сообщение в консоль браузера:

SyncMsgLogger _clientLogger = new SyncMsgLogger((UserConnection)context.UserConnection, Guid.Empty);
_clientLogger.LogInfo("ProcessStart");
UsrTest.TestWriteLog();

или используя код в классе:
public static class UsrTest
{
        private static SyncMsgLogger _clientLogger;
        internal static SyncMsgLogger ClientLogger {
                get {
                        return _clientLogger != null ? _clientLogger : (_clientLogger = new SyncMsgLogger((UserConnection)HttpContext.Current.Session["UserConnection"], Guid.Empty));
                }
        }
       
        public static void TestWriteLog()
        {
                ClientLogger.LogInfo("TestWriteLog");
        }
}

При работе на компьютере на котором развернута BPM, оба сообщения появляются в консоле браузера. Но при работе с другого компьютера(внешний доступ) сообщения не появляются.

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

Нравится

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

Здравствуйте.
Во вложении - рекомендации по использованию логгера log4net (возможно будут полезными).

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

Коллеги, подскажите пож-та.
Есть необходимость добавить дополнительное поле
Как добавить поле "Название страны на анг" в справочник "страна" ?

Нравится

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

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

Ответили в рамках поддержки, но может кому-то еще понадобится.
Данная задача может быть выполнена следующим образом:
0) Перйдите в конфигурацию
1) Добавьте поле в объект "Страна" (поле с типом строка). Вы можете добавить это поле, заместив объект "Страна"
2) Добавьте схему с типом "Замещающая страница". Схему с типом "Замещающая страница" Вы можете найти в расширенном представлении кнопки "Добавить"
3) Выберите в качестве родительской страницы страницу "Страница редактирования страны"
4) В MainContolLayout Вам необходимо добавить элемент "Текстовое поле" (выделите MainContolLayout и нажмите правой кнопкой мышки, чтобы открыть доступные варианты)
5) Выделите добавленное поле в структуре и переместите его на нужное место (обычное перетаскивание мыши)
6) В свойствах этого поля укажите "Источник данных" - DataSource, Колонка данных - созданная на первом шаге колонка объекта "Страна".
7) Сохраните и опубликуйте страницу.

В результате новое поле будет добавлено на страницу редактирования справочника "Страна".

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