Вопрос

Здравствуйте, есть необходимость переименовать организационную роль all emploees во "Все сотрудники" пока переименовал название роли в тестовой системе, новым пользователям роль присваивается, выдается записям. 

Переименовывал кто-то орг. роль all employees? Будут последствия для системы? 

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

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

Добрый день!
По сути орг. роль - это запись в таблице SysAdminUnit.
И должна быть связка по Id. Так что проблем быть не должно.

PS: поиск по "all emploees" по исходным кодам результата не дает

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

Добрый день!

Не удается передать веб-сервису параметры методом POST, БП просто запускается, но не получает параметры. При использовании метода GET ошибок не возникает. использую строку /0/ServiceModel/ProcessEngineService.svc/UsrAddContragentPDZ/RunProcess

 public static void SendData()
        {
            var Request = HttpWebRequest.Create(processServiceUri) as HttpWebRequest;
            Request.Method = "POST";
            Request.Accept = "application/json";
            Request.ContentType = "application/json";
            Request.CookieContainer = AuthCookie;

            CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(processServiceUri));
            string csrfToken = cookieCollection["BPMCSRF"].Value;

            Request.Headers.Add("BPMCSRF", csrfToken);

            using (var requestStream = Request.GetRequestStream())

            {
                using (var writer = new StreamWriter(requestStream))
                {
                    string json = new JavaScriptSerializer().Serialize(new
                    {
                        BossID = "GBO_048845",
                        StatusPDZString = "007C2385-2EDC-402A-B40A-E74625E0E6DD",
                        PDZString = "4098,56"
                    });
                    writer.Write(json);
                    writer.Flush();
                    writer.Close();
                }
            }

Где может быть ошибка?

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

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

Спасибо, Александр.

Все работает.

Также была ошибка в http-запросе - там не нужно имя схемы.

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

Стала проблема получения списка всех Id записей в реестре.

this.getGridData().collection.keys.toString(); - вот это возвращает Id, но возвращает только те, которые видно в реестре, можно ли как то получить все айдишки, которые есть в реестре?

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

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

По дефолту с целью увеличения производительности вычитываются записи постранично (кажется по 30 записей) Нужно больше? делайте свой запрос, но ожидать коректного возврата скажем нескольких десятков тысяч записей я бы не стал! Все упирается в то что вы с этими записями хотите делать....

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

Например, можете собрать все Id с помощью запроса esq следующего вида:

var ids = "";
 
var esq = this.getGridDataESQ();
this.initQueryColumns(esq);
this.initQuerySorting(esq);
this.initQueryFilters(esq);
this.initQueryEvents(esq);
 
esq.getEntityCollection(function(response) {
	if (response.success) {
		response.collection.each(function(item) {
			ids += item.get("Id") + ";";
		});
	}
}, this);

 

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

Коллеги, добрый день!

 

Подскажите, пожалуйста, как в визировании (в бизнес-процессе) при отказе сделать причину отказа обязательной для заполнения?

 

Без средств программирования, пожалуйста.

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

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

Как подготовка к аттестации в целом? 

Попробуйте через мастер детали настроить такое бизнес-правило обязательности поля 'Причина отказа' от статуса визы.

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

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

Добрый день!

Возникла необходимость поменять карточку объекта на новую. Я создал новую схему, наследованную от BaseModulePageV2, и подставил её Uid из таблицы SysSchema в столбец CardSchemaUid таблицы SysModule. Но, к сожалению, этого оказалось недостаточно, по прежнему запись в разделе открывается в старой карточке. Подскажите, пожалуйста, что мне ещё необходимо сделать чтобы всё корректно заработало.

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

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

Аналогично нужно сделать в таблице

SysModuleEdit

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

Сделал, как Вы сказали. Теперь ругается на параметр "operation":

На всякий случай обобщу свои действия:

1. Создал схему модели представления карточки, с родительским объектом BaseModulePageV2 (ESN).

2. Наполнил её:

define("MyEntityPage", [], function() {
    return {
        entitySchemaName: "MyEntity",
        attributes: {},
        modules: {},
        details: {},
        businessRules: {},
        methods: {},
        dataModels: {},
        diff: [{}]
    };
});

3. Получил UId из таблицы SysSchema, записал его в поле CardShemaUid таблиц SysModule  и SysModuleEdit.

Видимо, что-то ещё упустил.

Иван Небеддаг,

Какое именно сообщение об ошибке и когда оно возникает

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

Там была прикреплена картинка, но она куда-то исчезла. Может быть, в этот раз мне повезёт:

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

Господа, сталкивался ли кто-то с такой проблемой? И если да, то как вы её решили? Есть ли какая-то последовательность действий, которая поможет заменить карточку в разделе?

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

Добрый день.

Стоит задача из таблицы детали достать все записи по полю UsrSchoolName1Id равные Id раздела(this.get("Id")).

И посчитать количество записей по UsrPositionStaffId равной 07D2E5FA-1B0F-4B54-90AB-CCE23678ECFD.

Мой код:

isAccountPrimaryContactSet: function() {
var message = "";
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "UsrEntity1DetailStaff"
});
esq.addColumn("Id");
esq.addColumn("UsrPositionStaffId");
esq.addColumn("UsrSchoolName1Id");
var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"UsrSchoolName1Id", this.get("Id"));
var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"UsrPositionStaffId", "07e2e5fa-1b0f-4b54-90ab-cce23678ecfd");
esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.filters.add("esqSecondFilter", esqSecondFilter);
esq.addAggregationSchemaColumn("UsrPositionStaffId", Terrasoft.AggregationType.COUNT, Terrasoft.AggregationEvalType.ALL);
esq.getEntityCollection(function (result) {
    if (!result.success) {
        this.showInformationDialog("Ошибка запроса данных");
        return;
    }
    result.collection.each(function (item) {
        message += "Количество младших сотрудников: " + item.get("UsrPositionStaffId") + "\n";
    });
    this.showInformationDialog(message);
}, this);
 
 
 
}

Фото моей таблицы:

 

 

 

 

После нажатия кнопки данный код выводит следующую ошибку в консоли:

 

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

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

Насколько я понимаю, то в колонках "UsrPositionStaffId" и "UsrSchoolName1Id" Вам нужно убрать в конце "Id".

Alex Zaslavsky пишет:

Насколько я понимаю, то в колонках "UsrPositionStaffId" и "UsrSchoolName1Id" Вам нужно убрать в конце "Id".

 

Ошибка ушла теперь просто возвращает пустое поле. 

Казанцев Андрей Юрьевич,

я, честно говоря, ниразу не использовал AggregationSchemaColumn, я обычно пишу:

if (!result.success) {
  this.showInformationDialog("Ошибка запроса данных");
    return;
  }
this.showInformationDialog(result.collection.collection.length);

Это так, чисто протестить сколько записей я получил.

Alex Zaslavsky пишет:

Казанцев Андрей Юрьевич,

я, честно говоря, ниразу не использовал AggregationSchemaColumn, я обычно пишу:


 
if (!result.success) {
  this.showInformationDialog("Ошибка запроса данных");
    return;
  }
this.showInformationDialog(result.collection.collection.length);

Это так, чисто протестить что я получил.

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

var message = "";
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "UsrEntity1DetailStaff"
});
esq.addColumn("UsrPositionStaff");
esq.addColumn("UsrSchoolName1");
var esqFirstFilter = esq.createColumnFilterWithParameter("UsrSchoolName1",Terrasoft.ComparisonType.EQUAL,"UsrSchoolName1", "77250D61-1612-4D2B-BE38-361AF1E27E59");
esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.getEntityCollection(function (result) {
    if (!result.success) {
        this.showInformationDialog("Ошибка запроса данных");
        return;
    }
    result.collection.each(function (item) {
        message += "Количество младших сотрудников: " + item.get("UsrSchoolName1") + "\n";
    });
    this.showInformationDialog(message);
}, this);

Все id для js приводите к нижнему регистру те использовать вместо 

"77250D61-1612-4D2B-BE38-361AF1E27E59"

нужно

"77250d61-1612-4d2b-be38-361af1e27e59"

Для решение вашей проблемы посмотрите через профайлер sql запросов какой запрос идет в базу это поможет вам понять что не так с запросом и почему он не возвращает записей

Метод createColumnFilterWithParameter содержит 3 параметра, а у Вас 4:

createColumnFilterWithParameter(comparisonType, columnPath, paramValue)

Попробуйте написать вот так:

esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"UsrSchoolName1", "77250d61-1612-4d2b-be38-361af1e27e59")

Казанцев Андрей Юрьевич,

так что в итоге, все получилось?

Григорий Чех пишет:

Большое спасибо за подсказку с профайлером. Айди через get сделал.

Alex Zaslavsky пишет:

Спасибо и тебе Алекс. А то я с постоянным использованием  sql запросах в поддержке. Везде пихал за место объектов название запросов в базе.

Алла Савельева пишет:

Да, Алла ваш способ заработал. Хотя я все делал по примерам с академии.

У меня теперь такая проблема. Я не могу синхронно вывести подсчет.

Сам код подгружается так:

 onEntityInitialized: function() {
            	this.callParent(arguments);
            	  this.methodChain();
            },
	numberOfDetail: function(IdDetail) {
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "UsrEntity1DetailStaff"
});
esq.addColumn("UsrPositionStaff","UsrPositionStaff");
esq.addColumn("UsrSchoolName1","UsrSchoolName1");
var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"UsrSchoolName1", this.get("Id"));
var esqSecondFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,"UsrPositionStaff", IdDetail);
esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.filters.add("esqSecondFilter", esqSecondFilter);
esq.addAggregationSchemaColumn("UsrPositionStaff", Terrasoft.AggregationType.COUNT,"detailOfNumber",
Terrasoft.AggregationEvalType.NONE);
esq.getEntityCollection(function (result) {
    if (!result.success) {
        this.showInformationDialog("Ошибка запроса данных");
        return;
    }
    result.collection.each(function (item) {
 
        return item.get("detailOfNumber");
    });
}, this);
},
methodChain: function(){
 this.showInformationDialog("Младших учителей:" + this.numberOfDetail("07D2E5FA-1B0F-4B54-90AB-CCE23678ECFD") + "\n"+
"Старших учителей:" + this.numberOfDetail("019EF537-F8F1-4C01-BA2B-4B17D1285231") + "\n" +
"Ведущих учителей:" + this.numberOfDetail("F02850E9-264A-4D57-B64C-7409F0A84322") + "\n");
 
 
}

 

return в асинхронном обработчике плохая идея вам нужно вызывать methodChain втом же месте где вы получили(вычитали данные) те после 

(result.success)

для каждого элемента коллекции или после их перебора /(это смотря что вам нужно). Как вариант можно создать свои виртуальные колонки (атрибуты) вычитать туда нужные вам данные а потом в обработчике (например по нажатию кнопки) брать оттуда данные.

Григорий Чех пишет:
return в асинхронном обработчике плохая идея вам нужно вызывать methodChain втом же месте где вы получили(вычитали данные) те после 

Задача в том чтобы при открытии страницы выходило это окно. 

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

Добрый день! Подскажите, можно ли штатными средствами или настройками отобразить одновременно несколько календарей сотрудников (контактов)? Если дорабатывать - то какой подход?

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

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

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

Сделайте свою деталь с редактируемым реестром или со своей страницей добавления (Назвать можно Графики работы или  Календари) и подключить ее к контакту/сотруднику.

Создание детали описано тут и тут

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

Добрый день.

Хочу при изменении значения справочного поля вызывать метод.

Как мне поймать это изменение?

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

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

Казанцев Андрей Юрьевич,

Все верно - обычно данная задача решается именно через свойство dependencies атрибутов.

Вот ещё один пример с Академии.

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

Также можно использовать событийные процессы.

Выбор варианта реализации зависит от дополнительных условий поставленной задачи.

Нашел ответ здесь через подписку на событие:https://community.terrasoft.ru/articles/ne-srabatyvaet-metod-pri-podpis…
Но если есть и другие методы, через переопределение чего либо напишите пожалуйста.

Казанцев Андрей Юрьевич,

Все верно - обычно данная задача решается именно через свойство dependencies атрибутов.

Вот ещё один пример с Академии.

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

Также можно использовать событийные процессы.

Выбор варианта реализации зависит от дополнительных условий поставленной задачи.

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

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

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

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

Переопределите обработчик нажатия на кнопку [+] добавления новой записи. Обычно она называется AddRecordButton. Обработчик кнопки реализуйте аналогично примера на Академии. В методе openDocumentLookup накладывайте нужные фильтры, чтобы уже добавленная запись в списке выбора не появлялась.

Как вариант сделайте свою кнопку добавить или переопределите ее обработку и вызывайте где хотите свою страничку для добавления

 

Так же для добавления можно создать свою мини карточку детали тут

Переопределите обработчик нажатия на кнопку [+] добавления новой записи. Обычно она называется AddRecordButton. Обработчик кнопки реализуйте аналогично примера на Академии. В методе openDocumentLookup накладывайте нужные фильтры, чтобы уже добавленная запись в списке выбора не появлялась.

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

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

 

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

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

Заместить SectionActionsDashboard"

и

		{
			"operation": "remove",
			"name": "CallMessageTab"			
		},
		{
			"operation": "remove",
			"name": "EmailMessageTab"
		},
		{
			"operation": "remove",
			"name": "SocialMessageTab"
		},
		{
		   "operation": "remove",
		    "name": "TaskMessageTab"
		}

 

Вам нужно переопределить методы getSectionPublishers и getExtendedConfig в SectionActionsDashboard.

Посмотрите пример добавления нового канала в ActionDashboard и реализацию SectionActionsDashboard в пакетах TaskMessagePublisher, EmailMessagePublisher, CallMessagePublisher и SocialMessagePublisher.

Разобравшись в механизме добавления, Вы сможете понять, каким образом убрать существующие значки.

 

Заместить SectionActionsDashboard"

и

		{
			"operation": "remove",
			"name": "CallMessageTab"			
		},
		{
			"operation": "remove",
			"name": "EmailMessageTab"
		},
		{
			"operation": "remove",
			"name": "SocialMessageTab"
		},
		{
		   "operation": "remove",
		    "name": "TaskMessageTab"
		}

 

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