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

 

Каким образом возможно переименовать название поля в Мобильном приложении?

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

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

Нравится

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

Точно не помню, но попробуйте посмотреть в Дизайнере системы - Дизайнер мобильной версии, выбираете нужное рабочее пространство, раздел и там смотрите, что можно с полем сделать.

В «Мастере мобильного приложения» можно только выбирать поля, уже существующие в объекте. Соответственно, чтобы переименовать, нужно менять в самом объекте раздела, его в дизайнере (или в переводах, нужно смотреть). Но так поле переименуется везде.

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

Доброго времени!

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

Спасибо!

Нравится

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

Есть несколько вариантов обходных решений. 

1. В манифесте выставляем параметр - PreferedFilterFuncType: 'Terrasoft.FilterFunctions.SubStringOf'. 

Поиск станет не чуствителен к регистру. Но и станет искать по подстроке (во всех разделах).

2. Вводим при поиске значок %. 

Проверялось только на английской локализации.

Мотков Илья,

Всё реализовано именно так, как описано в 1 пункте. В результате тестов было замечено, что на Android устройствах, в режимах работы online/offline всё корректно работает. На ios же в online поиске всё отрабатывает корректно, а вот offline чувствителен к регистру.

Мотков Илья,

Причём заметил, что на английской локализации всё корректно, что нельзя сказать про русскую в режиме Offline на ios. 

Спасибо за уточняющую информацию, она будет передана разработчикам.

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

Коллеги всем доброго времени суток!

Столкнулся со следующей проблемой, обработки исключений возвращаемых при запросе к внешнему API.

Делаю запрос через WebClient

 

public void Patch(string method, Dictionary<string, string> parameters)
        {
            try
            {
                NameValueCollection parametersValues = new NameValueCollection();
 
                foreach (var parameter in parameters)
                {
                    if (String.IsNullOrEmpty(parameter.Value))
                    {
                        parametersValues.Add(parameter.Key, null);
                        continue;
                    }
                    parametersValues.Add(parameter.Key, parameter.Value);
                }
 
                string uri = $"{abUrl}{method}";
                using (WebClient webClient = new WebClient())
                {
                    string credentials = Convert.ToBase64String(
                        Encoding.ASCII.GetBytes(LoginDev + ":" + PassDev));
                    webClient.Headers[HttpRequestHeader.Authorization] = $"Basic {credentials}";
                    webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                    byte[] result = webClient.UploadValues(uri, "PATCH", parametersValues);
                    var response = Encoding.UTF8.GetString(result);
                }
 
            }
            catch (WebException e)
            {
                var exceptionMessage = e.Message;
                if (e.Status.Equals(WebExceptionStatus.ProtocolError))
                {
                    if (e.Response is HttpWebResponse)
                    {
                        var sr = new StreamReader(e.Response.GetResponseStream());
                        var response = sr.ReadToEnd();
                        sr.Close();
                        sr.Dispose();
                    }
                }
            }
        }

Когда пытаюсь обработать WebException в Bpm то мне записывает в логи - http://prntscr.com/kr7aja

 

При выполнении данного кода через консольное приложение обработка срабатывает корректно - http://prntscr.com/kr7baj

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

Заранее благодарен.

Нравится

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

Попробуйте, вместо public void Patch сделать public string Patch, объявите переменную, например result и в catch, сделайте result += e.Message, ну и по итогу соответственно return result

Литвинко Павел,

я в самом методе Patch в блоке catch логирую 

e.Message - http://prntscr.com/kr838h

в Bpm у меня метод Patch возвращает string. Суть в другом почему в catch обрабатывается Too many redirects, а при выполнении данного метода из консольного приложения обрабатывается корректно, то что возвращает сервер к которому запрос был.

Нигрескул Алексей,

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

Литвинко Павел,

В консоли - при выполнении кода вылетает в catch и потом на выход метода 

При выполнении метода из консоли запустил fiddler запрос ушел один раз - http://prntscr.com/kr8oum

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

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

Привет всем,

У меня такая проблема, 

Выдаёт ошибку 404 если нажимаю на кнопку что бы оценить работу службы поддержки. А после ещё и выходит из bpm (автологин, то есть не заходит автоматом).



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

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

Нравится

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

Проверьте что в системной настройке “Адрес сайта” в поле [Значение по умолчанию] указан правильный адрес сайта, используемый для доступа к bpm’online ( например, http://bpmonline.com) ?

Если нет скоректируйте “Адрес сайта” перевойдите, возможно потребуется чистка кэша рэдиса.

Если не помогло проверьте что у вас установлен http активатор для WCF Services. Подробности в документации по развертіванию системы onsite или в интернете

 

 

 

Если ввести URL со скриншота и заменить 5 на несуществующую оценку, вместо 404 выдаст сообщение об отсутствии лицензий. Возможно, стоит их перезаказать или выдать системному пользователю, от имени которого идёт голосование.

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

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

var TabCandidatesList = tabsCollection.contains("TabCandidatesList") ? tabsCollection.get("TabCandidatesList"):false;
if (!TabCandidatesList) 
     tabsCollection.insert(0, "TabCandidatesList", Terrasoft.TabCandidatesList);
 
var TabConditions = tabsCollection.contains("TabConditions") ? tabsCollection.get("TabConditions"):false;
if (TabConditions) {
	Terrasoft.TabConditions = TabConditions;
	tabsCollection.removeByKey("TabConditions");
}

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

Нравится

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

В твоем случае возможно лучше делать так...

//hide
closeTabs: function() {
	var tabsCollection = this.get("TabsCollection");
	tabsCollection.eachKey(function(tabName, tab) {
		var tabContainerVisibleBinding = tab.get("Name");
		this.set(tabContainerVisibleBinding, false);
		}, this);
	},
//activate
setActiveTab: function(activeTabName) {
	this.closeTabs();
	this.set("ActiveTabName", activeTabName);
	this.set(activeTabName, true);
},

 

Вы не удаляйте вкладку, а скрывайте ее:



 

init: function() {   
 
this.callParent(arguments);
 
var scope = this;
 
require(["jQuery"], function() {
 
  scope.hideTabs();
 
});
 
},
 
 
 
hideTabs: function() {
 
$(document).bind("DOMNodeInserted", function(e) {
 
  if (e.target.id === "Нужный контейнер") {
 
   var tabs = Ext.getElementById("Нужный элемент");
 
   var tab = Ext.get(tabs.children[1]);
 
   if (Условие при котором скрывать) {
 
    tab.setWidth(0);
 
    tab.hide();
 
   }
 
   else {
 
    tab.setWidth("auto");
 
    tab.show();
 
   }
 
  }
 
}.bind(this));
 
}

 

Через DOM работать не получится, т.к. содержимое вкладок подгружается только после нажатия на вкладку... я попробовал работать по схеме описанной в этой теме но видимо есть нюансы работы.  Подскажите, если ли возможно ли назначить активную вкладку из кода используюя tabscollection? 

mcNosferatum,

может быть обновиться до 7.12.4 и использовать это 

http://prntscr.com/kr0luu ?

Попробуй так активировать вкладку

var activeTabName = "GeneralMacrosTab";
this.set("ActiveTabName", activeTabName);
this.set(activeTabName, true);

 

В твоем случае возможно лучше делать так...

//hide
closeTabs: function() {
	var tabsCollection = this.get("TabsCollection");
	tabsCollection.eachKey(function(tabName, tab) {
		var tabContainerVisibleBinding = tab.get("Name");
		this.set(tabContainerVisibleBinding, false);
		}, this);
	},
//activate
setActiveTab: function(activeTabName) {
	this.closeTabs();
	this.set("ActiveTabName", activeTabName);
	this.set(activeTabName, true);
},

 

Литвинко Павел,

Спасибо! Подкорректировал Ваш код и свой и вышло то что нужно)

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

Пользователь нажимает кнопку/действие - идет вызов Исходного кода. Там вылолняется работа и возвращает MemoryStream(это файл ПДФ)

Как теперь сделать чтобы этот файл или скачался или отобразился в новой странице?

Нравится

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

Как то так:

var response = System.Web.HttpContext.Current.Response;
	response.ClearContent();
	response.ContentType = "application/pdf";
	response.AddHeader("Content-Disposition", "inline; filename=" + docName);
	response.AddHeader("Content-Length", docStream.Size);
	response.BinaryWrite((byte[])docStream);
	response.End();

 

Как то так:

var response = System.Web.HttpContext.Current.Response;
	response.ClearContent();
	response.ContentType = "application/pdf";
	response.AddHeader("Content-Disposition", "inline; filename=" + docName);
	response.AddHeader("Content-Length", docStream.Size);
	response.BinaryWrite((byte[])docStream);
	response.End();

 

Григорий Чех,

Благодарю, вот в итоге рабочий код:

var response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.ContentType = "application/pdf";
response.AddHeader("Content-Disposition", "inline; filename=Ведомость расчетов с клиентом.pdf");
response.AddHeader("Content-Length", f.GetLongLength(0).ToString());
response.BinaryWrite(f);
response.End();

f - это тип byte[]

Рад что у вас получилось smiley

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

Добрый день!

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

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

 

Нравится

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

Вариантов много например так: создайте объект (по которой в дальнейшем можно и деталь сделать прикрепленную к обращению и отчет построить ) в которой будут колонки:

1) Id обращения (или сразу номер обращения для отчета)

2) код статуса (или сразу название статуса для отчета)

2) время установки статуса

3) время закрытия статуса

Создайте БП который по смене статуса будет вносить корректировки в выше созданый объект. А по созданию обращения делать первую запись. Таким образом при переходе в согласование например смотрите какой статус был раньше (в обращениях была колонка - приведущий статус) и для объекта меняете время закрытия преведущего статуса для текущего обращения. И вносите время установки для текущего статуса. Как то так.

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

В итоге получите номер обращение, статус, время пребывания в статусе (по разнице 2х дат). Сгрупировать по номеру обращения и статусе, для случаев когда обращение пребывало в одном статусе несколько раз, те если например обращение несколько раз возвращают в работу то нужно групировать и  суммировать время пребывания в статусе. Линейную таблицу транспонировать к нужному вам виду (перевернуть).

И как вариант можно настроить журнал изменения на отслеживание изменения статуса обращения и оттуда дергать данные для отчета. Вместо журнала изменений можно использовать вариант с тригером в БД для тех же целей (логирование изминения статуса обращения).

 

 

 

 

Вариантов много например так: создайте объект (по которой в дальнейшем можно и деталь сделать прикрепленную к обращению и отчет построить ) в которой будут колонки:

1) Id обращения (или сразу номер обращения для отчета)

2) код статуса (или сразу название статуса для отчета)

2) время установки статуса

3) время закрытия статуса

Создайте БП который по смене статуса будет вносить корректировки в выше созданый объект. А по созданию обращения делать первую запись. Таким образом при переходе в согласование например смотрите какой статус был раньше (в обращениях была колонка - приведущий статус) и для объекта меняете время закрытия преведущего статуса для текущего обращения. И вносите время установки для текущего статуса. Как то так.

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

В итоге получите номер обращение, статус, время пребывания в статусе (по разнице 2х дат). Сгрупировать по номеру обращения и статусе, для случаев когда обращение пребывало в одном статусе несколько раз, те если например обращение несколько раз возвращают в работу то нужно групировать и  суммировать время пребывания в статусе. Линейную таблицу транспонировать к нужному вам виду (перевернуть).

И как вариант можно настроить журнал изменения на отслеживание изменения статуса обращения и оттуда дергать данные для отчета. Вместо журнала изменений можно использовать вариант с тригером в БД для тех же целей (логирование изминения статуса обращения).

 

 

 

 

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

Задача - на островах Контакт и Контрагент в Лиде сделать функционал, аналогичный Квалификации (ну не устраивает кнопка Квалификация((...)

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

Подскажите как  привязать  процесс к кнопке Добавить? Что то не можем до нее добраться).

спасибо!

 

 

Прикрепленные файлы

Нравится

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

Смотри BaseProfileSchema  метод addRecord

Смотри BaseProfileSchema  метод addRecord

Григорий, спасибо! попробуем)

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

Привет всем !

Кто нибудь знает как убрать обязательное заполнение поля Ответственный в разделе Аналитика при выборе фильтров для построения отчета ?



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

Нравится

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

Сначала нужно найти схему этой страницы, как описано тут. Затем в ней смотреть, как сделано это поле. У меня такого отчёта по счетам нет, а в отчёте по задачам поле «Ответственный» выглядит так же, но не является обязательным, отчёт строится и с пустым.

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

Как включается режим использования bundle-схем в версии 7.12.3?

Включил UseIncludeDependenciesSource во внутреннем веб-конфиге, но ничего не получается.

Компиляции и перезапуски ИИС или пула так же ничего не меняет.

Нравится

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

В 7.11 это настраивалось в web.config (папка Terrasoft.WebApp) приложения в секции "appSettings" строкой

"add key="SeparatedJsFiles" value="true" /"

SeparatedJsFiles это одно, и оно у меня не добавлено, т.е. файлы не Separated, но при этом они не объединены в Bundle-ы. У клиента на проде все дефайны разбиты по бандлам, у меня на тесте нет, как результат тестирование не совсем полное, могут быть нюансы, которые лучше бы отлавливать и исправлять до передачи пакетов.

Вы имеете введу выгрузку исходного кода клиентских схем?

Тогда смотри тут

Нет, про выгрузку в файловую систему я ничего не писал.

Версии на проде и тесте совпадают?

Григорий Чех,

Да.

 

Отключите UseIncludeDependenciesSource  и добавьте во внутрений web.config (папка Terrasoft.WebApp) в секцию "appSettings" строкой

<add key="SeparatedJsFiles" value="true" />

Перезайдите в систему

Григорий Чех

Повторюсь, включать SeparatedJsFiles я умею. Вопрос совсем не об этом.

Сергей, в таком случае выключите SeparatedJsFiles, это решит и Ваш вопрос. Либо же опишите более подробно, что у Вас сейчас и что хотите получить.

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