Добрый день, когда пытаюсь в разделе активность вывести все записи с типом Email, то ничего не отображается, хотя если произdодить поиск тем же способом через справочник, то все нормально выводитИзображение удалено.

 

Нравится

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

Добрый день.

В разделе [Активности] отображаются все активности, кроме email.

Для работы с письмами на маркетплейсе реализованы дополнительные разделы. Например, Email extension for Creatio.

Добрый день.

В разделе [Активности] отображаются все активности, кроме email.

Для работы с письмами на маркетплейсе реализованы дополнительные разделы. Например, Email extension for Creatio.

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

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

Ошибка появляется после фиксации пакета в svn. Скриншоты прикрепил.

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

Нравится

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

Код ActivityPageV2 прикрепите.

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

 

Также в старых сборках версии 7.12 был неправильный формат файлов, созданных мастером разделов, при фиксации пакета в SVN была такая же ошибка. Но в более поздних сборках 7.12.4.415, 7.12.3.986, 7.12.2.936 уже исправили. Если у Вас не 7.17, а одна из старых версий 7.12 и ниже, то обновите до указанных.

Полозюков Евгений Петрович,

 

После пересохранения файла в конфигурации, ругается на след. файлы. И так далее... Файлов много, ручками пересохранять будем.

Зверев Александр,

 

Обновлял до 7.17, не помогло.

Посмотрю настройки SVN. Или руками пересохранять всё буду, спасибо.

Вопрос решился пересохранением всех клиентских модулей в конфигурации. 

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

Доброго времени суток коллеги. У меня возникли две проблемы. Имею вызов метода 


      SetUrlAnswer: function() {
 
        var xhr = new XMLHttpRequest();
 
        var url = "http://localhost/0/rest/Service1/Testing";
 
        xhr.open("GET", url);
 
        xhr.responseType = "json";
 
        xhr.setRequestHeader("Content-type", "application/json");
 
        var self = this;
 
        xhr.onreadystatechange = function() {
 
            if (xhr.readyState === 4 && xhr.status === 200) {
 
                // for (var i = 0; i < xhr.length; i++ ) {
 
                  self.set("UsrCharCode",
 
                   JSON.stringify(xhr.response[0].CharCode));
 
                  self.set("UsrID", 
 
                   JSON.stringify(xhr.response[0].ID));
 
                  self.set("UsrNameV", 
 
                   JSON.stringify(xhr.response[0].Name));
 
                  self.set("UsrNominal", 
 
                   JSON.stringify(xhr.response[0].Nominal));
 
                  self.set("UsrNumCode",
 
                   JSON.stringify(xhr.response[0].NumCode));
 
                  self.set("UsrPrevious", 
 
                  JSON.stringify(xhr.response[0].Previous));
 
                  self.set("UsrValues", 
 
                   JSON.stringify(xhr.response[0].Value));
 
                // }
 
 
 
            } else {
 
               // Пока не реализовано
 
                self.set("UsrCharCode", "Не правильное получение данных!");
 
            }
 
        };xhr.send();
 
 

Как мне сделать правильную итерацию? Чтобы вот такого говно-кода избежать?



Вопрос второй(очень важный): Этот метод возвращает каждый раз разный массив данных. Вопрос в  том  Creatio предусмотрено генерация полей исходя из ответа сервера? Например мне в ответ приходит 4 видов валют USD, RUB, EUR, UZS и исходя из ответа сгенерировать таких групп полей:Изображение удалено.Надеюсь смог объяснить свою боль. Спасибо

Нравится

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

Ислам Ибрагимжанов,

Я описал общую идею как работает DataService, можете поискать реализацию и попробовать понять, но это про сложные вещи.



Вам пока нужно начать использовать ServiceHelper и его функцию callService.

И читайте документацию, там такие кейсы описаны.

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

https://academy.terrasoft.ru/docs/7-16/developer/back-end_development/c…

Итерацию можно сделать циклом по массиву с наименованиями полей. Можно сделать по переменным объекта. Список полей для итерации можно возвращать со стороны сервера. Тут у вас полная свобода действий.

Полозюков Евгений Петрович,

Я не понял один момент

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

Вы это про мой второй вопрос? Я что то не до  конца понял. 

Ислам Ибрагимжанов,

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

Полозюков Евгений Петрович,

Мне нужно сгенерировать поля для этих данных. Через выше указанный способ релаьно реализовать такое?

Ислам Ибрагимжанов,

Я описал общую идею как работает DataService, можете поискать реализацию и попробовать понять, но это про сложные вещи.



Вам пока нужно начать использовать ServiceHelper и его функцию callService.

И читайте документацию, там такие кейсы описаны.

Полозюков Евгений Петрович, Спасибо за помощь. Я понял идеюyes

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

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

Прочитал пару ответов поэтому вопросу тут в Community,  и написал функцию: 

 

clearFileBalance: function() {
  var budgetSales = this.get("UsrBudgetSales");
      this.set(budgetSales, null);
  var facticallySum = this.get("UsrFacticallySum");
      this.set(facticallySum, null);
  var result = this.get("UsrEqualsBudget");
      this.set(result, null);
  }
},

Она вызывается тут по клику: 

clearFileBalanceClick: function(clearFileBalance) {
       this.clearFileBalance();
 }

Он почему-то она не работает. Что я делаю не так? Спасибо

Нравится

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

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Доброе утро.

this.get("НазваниеПоля") - получает значение

 

this.set("НазваниеПоля", Значение) - устанавливает Значение в НазваниеПоля. Название поля в данном случае должно быть текстом

 

 

var budgetSales =  this.get("UsrBudgetSales"); //код запишет в переменную budgetSales ЗНАЧЕНИЕ поля UsrBudgetSales.

Чтобы очистить поле, нужно в UsrBudgetSales записать null:

this.set("UsrBudgetSales", null);

 

Есть еще вот такой вариант записи:

this.$UsrBudgetSales = null;

Дмитрий А., Я понял) Спасибо ) Заработало)

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

 

 

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

 

 

Доброго времени суток коллеги. Я столкнулся с проблемой у меня есть функция:

 

 calculateBalance: function() {
                var amount = this.get("UsrBudgetSales");
                if (!amount) {
                    amount = 0;
                }
                var paymentAmount = this.get("UsrFacticallySum");
                if (!paymentAmount) {
                    paymentAmount = 0;
                }
                var result = amount - paymentAmount;
                this.set("UsrEqualsBudget", result);
 
            }

Она сразу же ставит значение в поле, а нужно чтобы при нажатии на кнопку "Вычислить" вызывалась функция и присваивался значение в колонку "Остаток бюджета": 

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

Не могу сделать проверку тут,

	onPageClick: function(SetHelloAttribute, calculateBalance) {
                // if(какая-то проверка) {
                    this.calculateBalance();
               // }
 

Как я понял свойство set сразу же устанавливает значение в поле. А в methodName она вызывается? 

  dependencies: [
                    {
                        columns: ["UsrBudgetSales", "UsrFacticallySum"],
                        methodName: "calculateBalance"
                    }

Буду благодарен разъяснение. Так как недавно начал изучать Creatio, мог ошибиться в общей логике. Спасибо

Нравится

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

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

Таким образом для того, чтобы функция вызывалась только по нажатию кнопки Вам нужно полностью закомментировать блок dependencies и вызывать функцию только в обработчике нажатия кнопки [Вычислить].

Добрый вечер.

 

В dependencies в свойстве columns указываются поля, при изменении которых вызывается метод, описанный в methodName.

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

 

Таким образом для того, чтобы функция вызывалась только по нажатию кнопки Вам нужно полностью закомментировать блок dependencies и вызывать функцию только в обработчике нажатия кнопки [Вычислить].

Алла Савельева, Все сработало. Благодарю

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

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

Нравится

2 комментария
addRecord: function() {
              	var defaultValues = this.get("DefaultValues");
 
              	this.console.log("Данные")
              	this.console.log(defaultValues);
			 	this.showInformationDialog("Select All not implemented yet...");
 
 
			// 	//this.callParent(arguments);
 
			 },

Случайно нашел, в дефолт валуис =) содержится необходимая нам информация , айди и представление

Dima Avdoshin,

Все правильно там оно и лежит. Можете еще вывести console.log(this); там в values и не только можно найти интересные значения.

Также можно самому дописывать значения в defaultValues в коде карточки на которой размещена деталь.

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

При выделении заказа в разделе "Заказы" появляется кнопка "Копировать. Она создает новый заказ и переносит только основные поля. 

Где можно найти этот механизм, чтобы добавить в него еще копирование продуктов и цен?

Нравится

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

Можно убрать копирование поля, сняв в объекте у него признак копирования. Но тогда цена будет 0.



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

Возможно, с этим дополнением будет легче - https://marketplace.terrasoft.ua/app/copy-detail-records-creatio

Необходимо переопределить кнопку копировать и написать свой код который будет к примеру отправлять id заказ в ваш процесс или веб сервис и там прописать свою логику копирования.

Владимир Соколов,

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

Появилась другая проблема, что он копирует подчистую, то есть, старые цены

Как можно поправить эту ситуацию, чтобы при копировании автоматически,

старые цены обновлялись на текущие?

Можно убрать копирование поля, сняв в объекте у него признак копирования. Но тогда цена будет 0.



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

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

Поясните, пожалуйста, какие параметры использовать в SQL-скриптах при установке пакета?



Конкретная ситуация: на PostgreSQL необходимо изменить длину текстового поля, но это поле используется в VIEW. Соответственно, если не предпринять ничего дополнительного, то при установке получаем ошибку:



Terrasoft.Core.DB.DBMetaActionExecuteException: Error "0A000: cannot alter type of a column used by a view or rule" occurred when updating schema structure



Логично хочется перед установкой схемы объекта удалить VIEW. Но Drop view с параметром 'Before Saving Package' не сработал - всё равно в логах та же ошибка.



Как же сделать так, чтобы один скрипт срабатывал ДО установки схем, а второй - ПОСЛЕ?

 

Нравится

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

Владимир Соколов,

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

Обходной вариант разнести их в несколько пакетов и сначала поставить пакет1 потом пакет2.

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

Кроме параметра Тип установки порядок установки sql скриптов больше никак не контролируется.

Полозюков Евгений Петрович пишет:

Кроме параметра Тип установки порядок установки sql скриптов больше никак не контролируется.

А как можно заставить их выполняться в нужный момент? 

Владимир Соколов,

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

Обходной вариант разнести их в несколько пакетов и сначала поставить пакет1 потом пакет2.

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

Полозюков Евгений Петрович,

Иногда у клиента бывает, что в стандартные 250 символов не помещается текст, и он просит увеличить до 500... Переделывать всю логику очень лень :)



Поддержка же отмалчивается.



С пакетами идея! А как пакеты объединить потом в одно "дополнение", чтобы высылать одним файлом?

Владимир Соколов,

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

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

В вашем случае если вы объедините пакеты в один проблема с установкой может остаться. В таком случае перед установкой пакетов надо самостоятельно на бд удалить view, по-другому я не вижу вариантов.

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

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

Владимир Соколов,

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

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

К примеру если вы добавляете записи с помощью insert, перед выполнение необходимо проверить наличие записи с помощью select. Если запись есть insert не выполнять.

Примеры написания скриптов есть в базовых пакетах.

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

Сделали атрибут (LOOKUP) на странице, который ссылается на SysAdminUnit (но пробовали и с другими объектами - то же самое).

"UsrCurrentUserRole": {
    "dataValueType": Terrasoft.DataValueType.LOOKUP,
    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
    "isLookup": true,
    "referenceSchemaName": "SysAdminUnit"
}



Задали в бизнес-правилах его сравнение со значением Lookup. Всё сохранилось (в коде страницы тоже), всё работает корректно.



Но если зайти в это бизнес-правило, то не старые установленные значения не отображаются.

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

Что ещё надо указать, чтобы всё работало корректно? 

Нравится

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

Владимир Соколов,

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

Если вы хотите создать его в редакторе, создайте в редакторе сразу такое какое нужно.

Я не понимаю что вы такое пытаетесь сделать.

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



Проблема может быть из-за того что это системный справочник SysAdminUnit.

Создайте подобное новое правило из редактора бизнес правил и посмотрите в секции businessRules как оно будет описано.

Полозюков Евгений Петрович пишет:

Я же именно так и делал. И оно описано корректно, и даже работает. Но если хотите исправить, то при открытии видим, что всё пусто 



Баг или фича?

Владимир Соколов,

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

Если вы хотите создать его в редакторе, создайте в редакторе сразу такое какое нужно.

Я не понимаю что вы такое пытаетесь сделать.

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



Проблема может быть из-за того что это системный справочник SysAdminUnit.

Полозюков Евгений Петрович пишет:

Я не понимаю что вы такое пытаетесь сделать.

Я хочу создавать такое правило из Мастера страницы, настраивая бизнес-правила, а потом менять их, если необходимо.

И при этом не лезть в код.



От справочника не зависит 

Владимир Соколов,

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

 

Вообще вести серьезную разработку и не лезть в код нельзя.

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

Такой кейс. Хочу немного автоматизировать свою работу, а именно раздачу прав пользователям на сетевые папки. Есть готовый скрипт PowerShell с параметрами. Как его подключить и запустить из бизнес-процесса?

Нравится

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

В бизнес процессе написать c# код в ScriptTask. Пример запуска powershell из с# https://docs.microsoft.com/ru-ru/powershell/scripting/developer/hosting…

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

В бизнес процессе написать c# код в ScriptTask. Пример запуска powershell из с# https://docs.microsoft.com/ru-ru/powershell/scripting/developer/hosting…

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

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