Добрый день.

Как мне из схемы конфигурации ActivityMiniPage получить данные привязанного лида ?

При наведении на активность в боковой панели вызываю функцию getEmail. В ней пытаюсь получить сначала id лида, потом по этому id получить объект из БД. Как это правильно сделать?

    

getEmail: function() {
     var id = ??;
     var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
            rootSchemaName: "Lead"
         });
     esq.addColumn("Id");
     esq.addColumn("Email");
     esq.getEntity(id, function(result) {
         this.console.log(result.entity.get("Email"));
     }, this);

 

Нравится

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

" При наведении на активность в боковой панели вызываю функцию "

Так. стоп. Т.е вы наводите на активность, появляется миникаточка, и тут где-то в недрах комм. панели происходит вызов функции? Просто я немного не понимаю скоуп вызова метода.

Если он всё-таки вызывается в миникарточке, то

var id = this.get("Lead") ? this.get("Lead").value : null;

Если в другой схеме, то тут надо реализовывать логику через сообщения

 

я пробовала уже так. постоянно null, даже когда лид привязан. функцию вызываю тут: 

{
"operation": "insert",
"name": "ContactEmailButton",
"parentName": "ActivityGeneralInfoContainer",
"propertyName": "items",
"values": {
			"itemType": Terrasoft.ViewItemType.LABEL,
		    "caption": {"bindTo": "getEmail"},
									
	},
"visible": {
			"bindTo": "isIconVisible"
    }
}

 

>Т.е вы наводите на активность, появляется миникаточка, и тут где-то в недрах комм. панели происходит вызов функции

да

Ужас какой smiley

1) ActivityGeneralInfoContainer, есть в ActivityMiniPage. Всё-таки туда вы добали esq, а не в комм.панель. 

2) "caption": {"bindTo": "getEmail"}. Не сработает. Кепшн биндится на статичную переменную, а не асинхронную функцию.

Попробуйте добавить аттрибут,  тип текст. В diff кепшн биндите на этот аттрибут, а на onEntityInitialized запускайте свою функцию (там лид скорее всего будет известен) и после того как вытащите из лида email перенесите его в аттрибут 

или ещё легче.

это в аттрибуты

"Lead": {
	"lookupListConfig": {
		"columns": ["Email"]
	}
},
"MyLabelCaption": {
	dataValueType: 1,
	value: ""
}

это в методы

onEntityInitialized: function(){
	this.callParent(arguments);
	this.set("MyLabelCaption", this.get("Lead") ? this.get("Lead").Email : "лид не найден");
}

это в дифф

{
    "operation": "insert",
    "name": "ContactEmailButton",
    "parentName": "ActivityGeneralInfoContainer",
    "propertyName": "items",
    "values": {
			"itemType": Terrasoft.ViewItemType.LABEL,
		    "caption": {"bindTo": "MyLabelCaption"},
            "visible": {"bindTo": "isIconVisible"}
    }
}

 

спасибо огромное

а не подскажите еще, пожалуйста, как мне этот имейл сделать в таком вот виде  http://prntscr.com/gwf5yb ? или хотя бы как обработать клик по элементу ?

это кнопка, с пустым кэпшеном, стиль - "transparent", наложена иконка с изображением, ну и с каким-то обработчиком.

при нажатии на имейл надо чтобы открывало окно с отправкой имейла. делаю вот так : 

    onTypeIconButtonClick: function() {
		var value = this.get("Lead").Email;
		if (value) {
			var path = this.getLinkUrl(value);
			this.console.log(path);
			if (path) {
				this.onLinkClick(path.url)
			  }
			}
		},
		getLinkUrl: function(value) {
		    if (!value || Ext.isEmpty(value)) {
			    return {};
		    }
		    var emailUrl = EmailHelper.getEmailUrl(value);
		    if (Ext.isEmpty(emailUrl)) {
					return {};
		    } 
		    return {
			    url: emailUrl,
			    caption: value
		    };
		    return {};
	    },
		onLinkClick: function(path) {
			window.location.href = path;
		},

в консоле: http://prntscr.com/gwhngk

и на страницу с отправкой имейла не переходит

попробуйте

onTypeIconButtonClick: function() {
	var value = this.get("Lead").Email;
	if (value) {
		this.openCard("EmailPageV2", "add", Terrasoft.generateGUID());
	}
}

 

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

Как создать уведомление в коде C#?

Нравится

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

1) Если это активность, то:

var Activity = UserConnection.EntitySchemaManager.GetInstanceByName("Activity");
var EntityActivity = Activity.CreateEntity(UserConnection);
EntityActivity.SetDefColumnValues();
EntityActivity.SetColumnValue("OwnerId", contactID);
EntityActivity.SetColumnValue("Title", "Активность с уведомлением");
EntityActivity.SetColumnValue("RemindToOwner", true);
EntityActivity.SetColumnValue("RemindToOwnerDate", DateTime.UtcNow);
EntityActivity.Save(false);

2) Если другой объект системы, для которого есть  NotificationProvider, то можно сделать аналогичный инсерт в таблицу reminding. Наполнение как из скриншота (скрин из бп, переделывать под createEntity немного лень). Единственное что в поле "Объект" надо вставить ID нужного объекта из вью, в "Уник. индетификатор заголовка" - id конкретной страницы

3)  Если другой объект системы, у которого нет NotificationProvider, то обходной вариант - в активность прикреплять ссылку на ваш объект, уведомление прикреплять к активности. Или лепить собственный NotificationProvider, где-то тут на форуме уже обсуждалась данная тема.

И комментируя ваш батхёрт в соседней теме. "смотрите примеры в конфигурации" - это , пожалуй, девиз террасофта. так было полтора года назад, так осталось и сейчас. никто на форуме (за исключением 5-6 отдельных товарищей) не выкладывает отдельных решений кодом для вопрошающих.

Варфоломеев Данила,

спасибо за инф. у меня свой раздел. провайдера не было. провайдера нового написал. занес запись о нем в таблицу NotificationProvider. Создаю из кода уведомление, не вижу его нигде. Подскажете что еще нужно? может настройка какая-нибудь или еще какое-то сообщение нужно послать?

 

Данько Дмитрий Леонидович пишет:

Подскажете что еще нужно?

Насколько я помню надо проверить наличие записи в Reminding (isread должно быть false), проверить, чтобы был зарегистрирован провайдер для раздела в NotificationProvider, проверить ошибки в консоли (отрабатывает ли C# код провайдера) и самое главное надо для коммуникационной панели сделать описание айтема уведомления (верный способ, что всё работает, но нет описания для уведомления — в коммуник. панели "пустое" место, нет картинки, что нет напоминаний, как на скрине)

Варфоломеев Данила,

1) в таблицу NotificationProvider добавил 1 строку - описание провайдера ClassName = 'xxxxxxxxxx' (полное название моей схемы), Type=1 (Notification)

2) в таблицу Reminder добавил уже несколько строк - все заполнены. они как бы и должны появляться в уведомлениях. но не появляются.

В коде стоит обработка исключений они не появляются, записи успешно уходят в SQL.

3) у меня выглядит так как вы выложили на фото. пусто. что означает сделать описание итема для комуник панели? подскажите пож.

Варфоломеев Данила,

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

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

Данько Дмитрий Леонидович пишет:

что означает сделать описание итема для комуник панели? подскажите пож.

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

Загляните в ReminderNotificationsSchema (в схеме из пакета nui - свалка, можете глянуть в пакете Invoice). По сути там в diff описывается как отрисовывается единичное уведомление для конкретного объекта.

Добрый день,

можно ли поподробнее про пункт "создать описание айтема уведомлений"? Что это и , где хранится? Цель создать визу для кастомного объекта через свой кастомный Approval процесс. Notification provider описан и зарегистрирован, никаких ошибок он уже больше не кидает, в конечном результате имею именно пустое, без картинки пространство в коммуникационной панели.

Видимо, речь о пункте 3 в инструкции:

3. Заместить схему вкладки напоминаний ReminderNotificationsSchema

1. Чтобы отображались напоминания по требуемому объекту, создайте в пользовательском пакете замещающую схему ReminderNotificationsSchema и добавьте в нее необходимую программную логику.

...

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

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

Желательно присутствие бывалых Одинов, которые повидали многое в данном продукте.

В продолжение предыдущего поста было принято решения не отходить от стандартной реализации отправления файла, используя FileAPI.



На данный момент были созданы на основе базовых схем, следующие схемы:

аналог FileUploadInfo,

аналог IFileUploadInfo,

KmFileUploadService - аналог сервиса FileApiService,

аналог FileUploader аналог.



Так же была заимствована логика подготовки и отправки файла до FileAPI из FileDetailV2 и ConfigurationFileApi.




При выборе некого файла (если помните ранее писал про кнопку Selec file, клик которой создает скрытый input с type = file и реализует клик по нему) после логики схем FileDetailV2 и ConfigurationFileApi файл попадает в FileAPI, где на мой взгляд происходит его подготовка и разбиение на Chunk (далее Чанки).

После всех манипуляций дынный Api посылает его в KmFileUploadService
 , который вызывает унаследованный FileUploader, конкретно метод Upload, где происходит проверка размера файла, а далее ведется проверка связанная с Чанками (!fileUploadInfo.IsChunkedUpload || fileUploadInfo.IsFirstChunk) и в зависимости от проверки запускается метод Save или AppendData.



Как только текущий Чанк попадает в Save, исходя из нашей логики я организовываю запросы на Ftp по созданию файла (ничего такого, чего нет на MSDN).

Далее как я понимаю идёт обратный запрос к FileAPI который в свою очередь отдает нам следующий Чанк, который попадает в AppendData.



Базовая реализация этого метода подразумевает вызов метода DBLobUtilities.AppendBlob.

В нашем случае мы не используем этот метод, так как сохранение файла в базу у нас не велось. Мы используем аналогичный подход как в нашем Save только указываем WebRequestMethods.Ftp.AppendFile ,который должен нам исходя из следующего Чанка дописать ранее созданный экземпляр файла. По завершению этого действия по идее должен быть обратный ответ от FileAPI, который вышлет нам следующий Чанк и так далее пока все Чанки не кончатся, но этого не происходит. См. приложенный скриншот.

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



Итак самое главное вопросы:

1. Не удалось найти реализацию базового метода DBLobUtilities.AppendBlob, т.е. что он выполняет и каким образом запросы к FileAPI не прерываются. Потому что в нашем случае весь процесс состоит из двух Чанков, + второй Чанк сильно переписывает и ломает тело файла.

2. Хотелось бы узнать существует ли возможность в наш сервис передать кастомное значение типа пункта назначения фолдера, куда сохранять файл. Есть подозрения что нужно будет расширить FileUploadInfo и интерфейс который он использует, и обязательно расширить UI методы который формируют объект для FileAPI.

 

P.s. если не использовать данный подход, а работать с обыкновенным FileReader и читать тело файла readAsDataURL то всё бы ничего, но вот если файл весит свыше 10мб у сервиса начинается батхерт со временем обработки запроса.

Нравится

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

Не понимаю зачем зарывать в такие дебри. У меня сработало так:

1) Создал миксин, обрабатывающий  клик и загрузку.

define("TmUploadMixin", ["MaskHelper", "ConfigurationFileApi"],
	function(MaskHelper) {
		
		Ext.define("Terrasoft.configuration.mixins.TmUploadMixin", {
		alternateClassName: "Terrasoft.TmUploadMixin",

		/**FILE_IMPORTER**/
		onFilesSelected: function(file, tag) {
			if (file.length <= 0) {
				return;
			}
			var config = this.getUploadConfig(file, tag);
			this.upload(config);
		},
		getUploadConfig: function(file, tag) {
			return {
				uploadWebServicePath: "TmFilesUploader/Upload", // "FileApiService/Upload"
				scope: this,
				columnName: "columnName",
				parentColumnName: "parentColumnName",
				parentColumnValue: "parentColumnValue",
				onFileComplete: this.onFileComplete,
				entitySchemaName: tag,
				files: file,
				isChunkedUpload: false
			};
		},
		upload: function(config) {
			MaskHelper.ShowBodyMask();
			Terrasoft.ConfigurationFileApi.upload(config);
		},
		onFileComplete: function(error, xhr, file, options) {
			MaskHelper.HideBodyMask();
			//debugger;
			var data = JSON.parse(Terrasoft.decode(xhr.responseText));
			if (data.error !== "False") {
				this.showInformationDialog("Ошибка импорта. Подробнее — в консоли");
				console.log(data.data);
			} else {
				this.showInformationDialog("Записей импортировано: "+data.data);
				//this.reloadGridData();
			}
		}

	});
	return Terrasoft.TmUploadMixin;
});

 

2) Создал сервис

namespace Terrasoft.Configuration.TmFilesUploader
{
	using System;
	using System.IO;
	using System.Net;
	using System.Data;
	using System.Runtime;
	using System.Collections.Generic;
	using System.Runtime.Serialization;
	using System.ServiceModel;
	using System.ServiceModel.Web;
	using System.ServiceModel.Activation;
	using System.Web;
	using System.Web.SessionState;
	using Terrasoft.Common;
	using Terrasoft.Core;
	using Terrasoft.Core.Factories;
	using Terrasoft.Core.Entities;
	using Terrasoft.Configuration.FileUpload;
	using Terrasoft.Web.Common;


	[ServiceContract]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
	public class TmFilesUploader : BaseService, IReadOnlySessionState
	{
		[Obsolete]
		public const string HeaderContentRange = "Content-Range";
		[Obsolete]
		public const string HeaderRange = "Range";
		[Obsolete]
		public const string HeaderContentDisposition = "Content-Disposition";

		[OperationContract]
		[WebInvoke(Method = "POST", UriTemplate = "Upload", ResponseFormat = WebMessageFormat.Json)]
		public string Upload(Stream fileContent) {
			string value;
			bool error=false;
			try {
				IFileUploadInfo fileUploadInfo = new FileUploadInfo(fileContent, new HttpRequestWrapper(HttpContext.Current.Request);
				/**стрим будет валяться в fileUploadInfo.Content**/
			} catch (Exception ex) {
				value = ex.Message+"|"+ex.Source+"|"+ex.StackTrace+"|"+ex.InnerException;
				error = true;
			}
			
			return "{\"error\":\"" + error + "\",\"data\":\"" + value + "\"}";
		}
	}
}

И как бы всё... Ну единственно отрубил chunkedUpload и оставил дефолтный террасофтовский метод по проверке веса файла (думаю можно отредактировать если надо)

Варфоломеев Данила пишет:

Варфоломеев Данила

Добрый день/ночь, вот что получаем в итоге при ~20+ мб весом файла, ограничение Террасофта в настройке повысил. Понимаю что файл надо разбить каким-то образом на осмысленные части и грубо говоря из сервиса append'ить эти части между собой. Но мысли пока зашли в тупик.

Есть предположения у Вас коллега? 

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

Добрый день всем.

При попытке обращения к сервису через Js возникает 500 ошибка.

Пример объявления метода Сервиса:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "Upload", BodyStyle = WebMessageBodyStyle.Wrapped,
RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
   public string Upload(Stream fileContent, string fileName, string fileDestination) {

 

Пример вызова из Js:

var file = files[0];
    var reader = new FileReader();
    reader.readAsBinaryString(file);
    reader.addEventListener("load",
         function(item) {
	 var data = {
       	      fileContent: item.target.result,
	      fileName: file.name,
	      fileDestination: destinationPath
	 };
	 ServiceHelper.callService("KmFileUploadService",
	      "Upload",
     	      function(response) {
	           this.console.log(response);
	      },
	      data,
	      this
	 );
	 }.bind(this),
    false);

Кто знает, в чём конкретно может быть проблема? При попытках вызова сервиса (когда у метода всего 1 параметр) не возникает никаких проблем.

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

Нравится

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

Максим Шевченко пишет:

https://stackoverflow.com/questions/7999634/parsing-a-stream-and-a-para

 Хм, повторюсь. Я брал пример с исходников. Если там всё работает исправно то и в моем случае должно отрабатывать как часы. Тип роли не играет. Хоть 3 стринга там указать всё равно будет 500 ошибка.

Кисловский Михаил Андреевич,

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

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

Всем доброго времени суток. Версия 7.10

На деталь Средства связи контакта добавили запреты на использование:

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

Запреты должны быть связаны со стандартными колонками Контакта DoNotUseEmail, DoNotUseCall и так далее. Их тоже вывели на страницу:

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

Далее подключил синхронизацию по схеме: https://community.terrasoft.ru/questions/sinhronizacia-kolonok-kartocki…

В атрибуты ContactPageV2 добавил вызов метода syncEntityWithCommunicationDetail, переопределил ContactCommunicationDetail, где в initMasterDetailColumnMapping добавил новые типы:

//Запреты на использование
						{
							"CommunicationType": "105728d2-d097-4dea-94be-713cd9c6f38c",
							"MasterEntityColumn": "DoNotUseEmail"
						},
						{
							"CommunicationType": "b6e11e60-8ce5-46d7-a7e9-1a356d762263",
							"MasterEntityColumn": "DoNotUseCall"
						},
						{
							"CommunicationType": "476feae6-8162-4997-904e-447a6d916371",
							"MasterEntityColumn": "DoNotUseFax"
						},
						{
							"CommunicationType": "1dc8b3d6-1028-4524-b3d8-8e05663b3bb3",
							"MasterEntityColumn": "DoNotUseSms"
						},
						{
							"CommunicationType": "71b3e7ae-efaf-474e-a76a-82d13ef376b0",
							"MasterEntityColumn": "DoNotUseMail"
						},

Проблема 1:

Синхронизация работает только в одну сторону. Если я выбираю пункт на детали Средств связи, или удаляю его, то чекбокс на странице Контакта отмечается. В противоположном случае - если я уберу отметку на чекбоксе, который на странице - изменений на детали не происходит.

Проблема 2 (возможно, проблема 1 следует из неё):

Синхронизация, даже если она работает,то  происходит не сразу. Чтобы изменения были видны, мне нужно сохранить страницу, выйти из неё и зайти заново.

Как правильно сделать синхронизацию для чекбоксов?

Нравится

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

В процессе изучения проблемы заметил, что id у пунктов из списка запретов (см. скриншот) меняются при каждой перезагрузке страницы, а в объектах BaseCommunication, ContactCommunication записей, как-то связанных с чекбоксами нет вовсе.

Добрый день, Денис.

Метод syncEntityWithCommunicationDetail не связан с кнопками "не использовать" на детали средства связи, поскольку работает с абсолютно другой коллекцией детали. Вам стоит смотреть в сторону создания своих сообщений sandbox для работы с методом doNotUseCommunication, который добавляет элемент в коллекцию RestrictionsCollection детали. Также обратите внимание на метод getRestrictionsItemConfig, который создает конфиг для каждой кнопки, связанной с запретом на использование.

>> Синхронизация, даже если она работает,то происходит не сразу

Это возникает по тому, что элементы, связанные с неиспользованием, синхронизируются в момент сохранения записи в событийных бп на стороне сервера.

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

Всем доброго времени суток. Версия 7.10.

При создании нового контакта обычно вызывается мини-карточка. Сейчас при нажатии на кнопку "Добавить" на странице списка контактов сделан выбор между двумя типами контактов - клиентом и сотрудником (у разных типов контактов немного разные страницы). Однако мини-карточка вызывается только при создании контакта с типом Сотрудник, если выбран тип контакта Клиент, то открывается сразу страница контакта.

В базовой схеме раздела BaseSectionV2 есть функция addRecord, где есть проверка типа:

if (this.hasAddMiniPage(typeColumnValue)) {
						this.openAddMiniPage({
							entitySchemaName: this.entitySchemaName,
							valuePairs: this.getAddMiniPageDefaultValues(typeColumnValue)
						});
					} else {
						this.openCardInChain({
							schemaName: schemaName,
							operation: ConfigurationEnums.CardStateV2.ADD,
							moduleId: this.getChainCardModuleSandboxId(typeColumnValue),
							instanceConfig: {
								useSeparatedPageHeader: this.get("UseSeparatedPageHeader")
							}
						});
					}

typeColumnValue - это guid типа контакта.

Вопрос - где искать функцию hasAddMiniPage, или быть может где-то нужно добавить тип контакта в некий список?

Попробовал в переопределении ContactSectionV2 сделать так:

hasAddMiniPage: function(typeColumnValue){
				if ( (typeColumnValue == "00783ef6-f36b-1410-a883-16d83cab0980") || (typeColumnValue == "60733efc-f36b-1410-a883-16d83cab0980") ){
					return true;
				} else {
					this.callParent(arguments);
				}
			}

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

Нравится

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

Денис, добрый день!

Информация касательно использования миникартчоки хранится в базе данных в таблице SysModuleEdit. Если для страницы редактирования используется миникарточка, то в поле MiniPageSchemaUId указывается UId схемы миникарточки.

Также, рекомендую ознакомиться со статьей: https://academy.terrasoft.ru/documents/technic-sdk/7-11/sozdanie-mini-k…

Новак Руслан,

Руслан, спасибо, но есть ещё пара вопросов:

Нашёл в базе две записи:

Id:"a4f8a54f-2794-4eae-9ce4-4f8d66061a60"
MiniPageSchemaUId:"2741dd1e-7c35-432c-915a-9aa228eb057b"
PageCaption:"Сотрудник"

Id:"7b055f93-bb7e-463a-a6ce-24c2730f0f8e"
MiniPageSchemaUId:""
PageCaption:"Клиент"

Судя по MiniPageSchemaUId - это они. Запросом через batch query добавил такой же id "2741dd1e-7c35-432c-915a-9aa228eb057b" и в запись для клиента. Но миникарточка всё равно не показывается.

Где-то ещё нужно поправить?

Смородинов Денис,

возможно, после добавления Uid миникарточки в запись в таблице SysModuleEdit, требуется почистить кэш, перелогиниться, и, возможно еще и redis

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

Добрый день

Как изменить данные справочника с помощью CURL запроса ? Какая должна быть ссылка и поля ?

Например, для добавления контакта используется ссылка /0/ServiceModel/EntityDataService.svc/ContactCollection/ и массив с такими полями http://prntscr.com/gqa80f

Нравится

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

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

Посмотрите здесь:

https://academy.terrasoft.ru/documents/technic-sdk/7-8/rabota-s-obektami-bpmonline-po-protokolu-odata-s-ispolzovaniem-http-zaprosov

Пункт «Изменение существующего объекта», делается это по примерно тому же урл только с методом PUT и указанием какой именно записи через нужный guid. Справочники те же объекты, так что в ссылке будет имя объекта справочника + Collection как и с разделами.

/0/ServiceModel/EntityDataService.svc/ContactCollection

тут ContactCollection, а для справочников как ?

Бохонок Татьяна,

ну, если это, например, справочник по странам (т.е. объект базы - таблица Country), то коллекция будет CountryCollection...

если справочник по типам контрактов, то ContractTypeCollection...

и т.д.

Максим Цынгаев, 

Спасибо!)

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

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

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

На отдельной вкладке изменяю модуль-схему. Сохраняю. В эмуляторе жму синхронизация.Происходит синхронизация и перезапуск приложения-эмулятора. Проверяю изменения. И в это время вкладка с модулем-схемой сообщает о системной ошибке.

Сталкивались ли вы с таким поведением? Может это как то лечится?

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

Нравится

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

попробуйте очистить Redis и перезапустить application pool

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

Спасибо за предложения.

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

Добрый день!

Посоветуйте, как решить задачу. Есть офисная АТС, которая для выхода в город требует ввести "0" перед номером телефона.

При этом вводить этот "0" в каждом телефоне не хочется (да, и не совсем правильно, так как при синхронизации с Google Contacts сложно его добавлять/убирать).



Можно ли сделать так, что при звонке (из карточки, CTI или других мест системы) этот "0" подставлялся бы автоматически?

Нравится

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

Может проще через маску номера на АТС это сделать? Что за АТС?

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



Как посоветовал Александр ранее. Данную настройку необходимо выполнить со стороны АТС.В этом случае при наборе в bpm'online телефона без "0", АТС сама преобразует его и отобразит уже измененный номер на CTI-панели. Донастройка данного параметра зависит от используемой вами телефонии. При этом Вам нет необходимости вносить изменения в номера телефонов в базе

Не может Webitel AnyVoip ничего поменять, а АТС (Platan) то, что получает по SIP, туда и звонит

Владимир, так как Platan настроен у нас в "ручном режиме" из-за его специфики, то и 0 добавить вначале сможем Вам сделать. Зарегистрируйте инцидент на портале. Хотя, такая задача решается очень легко в webitel callmanager, а не в AnyVoip, где это не предусмотренно...

Спасибо, разберемся тогда в возможностях!

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

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

Нравится

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

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

Просьба уточнить, что Вы подразумеваете под "созданный словарь"? Какое-то свое поле?

Добрый день. Я создал новую страницу которая относиться к активности. на этой странице есть новосозданий словарь в котором прописано стадия выполнения активности. Задача чтоб в центре активности показывал пункт на какой стадии находиться а не стандартный вариант- заголовок. Пробую сделать по  бизнес процесу но пока не получаеться. Я в этом новачок.  Заранее благодарен. 

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

Можно попробовать изменить на клиенте отображение уведомлений для конкретного объекта.

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

В замещенной схеме нужно переопределить метод добавления колонок addColumns, добавив в него своё поле. Базовую реализацию метода  addColumns нужно взять из схемы BaseNotificationsSchema.

Далее, в схеме BaseNotificationsSchema есть метод для формирования заголовка - getNotificationSubjectCaption.

Метод getNotificationSubjectCaption необходимо переопределить в замещенной схеме SystemNotificationsSchema. Необходимо добавить проверку на schemaName и если она равна необходимой сущности, то брать не SubjectCaption а значение своей колонки.

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