Добрый день!

 

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

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

Но в итоге вижу, что часть обновлений клиентских схем на целевом стенде не появляется. 

Анализируя логи, обнаружила записи типа



.....

2021-12-30 00:47:46,632 Сравнение пакетов

2021-12-30 00:47:46,901 Сохранена схема "SmaNeedSection" в пакете "SmaMain"

..... (тут идут записи про установку пакетов)

2021-12-30 00:47:49,241 Генерация исходного кода схемы "SmaNeedSection" из пакета "SmaMain"

 

В устанавливаемом пакете как раз содержались обновления схемы "SmaNeedSection" и именно их нужно было установить на стенд.

 

Вопрос:

- как происходит сравнение пакетов, что именно при этом сравнивается?

- на основании чего Creatio определяет, что какие-то схемы нужно отдельно сохранить, а потом их восстановить? 

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

Нравится

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

Если распаковать пакет через clio или выгрузить в файловую систему, то у каждой схемы есть файл descriptor.json, в нем есть свойство "ModifiedOnUtc", вот по этой дате, если она отличается, и определяется нужно ли обновить схему на целевой среде или нет. Так же на целевой среде у схем (таблицы в бд) "SysSchema",  "SysPackageSchemaData",  "SysPackageReferenceAssembly ",  "SysPackageSqlScript", должно быть установлено IsChanged =0 и IsLocked =0, где SysPackageId = id вашего пакета (таблица SysPackage)

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

Доброго времени суток, уважаемое комьюнити!



На днях столкнулся с проблемой при переносе кейсов путем экспорта -> импорта между средами. Дело в том, что изначально кейсы были созданы в пакете "А", после чего, перед экспортом, были перенесены через UI конфигурации в пакет "B" и ошибок не наблюдалось. После импорта этих кейсов на локальную среду ловлю ошибку с трэйсом "DcmSettingsId не найден." Ниже прикрепляю изображение:



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



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

Нравится

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

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

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

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

Добрый день. Есть задача с помощью элемент веб сервис вызвать soap сервис.

Но для авторизации в  блок header нужно добавить метод. Не подскажете как это можно реализовать через мастер? Так как параметр заголовка в SOAP это другое.



-



-



-

POLIESCHUKT

YHcauQXSLgJtWAJIOCYaqxuaMWaOCOQqagkn



-



-

2600700000002

UAH

POLIESCHUKT

Нравится

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

Игорь, здравствуйте.



Обращаю Ваше внимание на следующую информацию:

Настройка аутентификации идентична для REST и SOAP-сервисов.



Для любого типа аутентификации (Basic/Oauth), есть официальная документация на этот счёт.

https://academy.terrasoft.ua/docs/7-17/user/kastomizacija_no_code/web_s…



Для использования же JSON Web Tokens, например, необходимо писать пользовательский методы аутентификации,



Рекомендую ознакомиться не только с данной статьёй, но и с веткой в целом.

Роман Казекин,

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

-<ns1:UsernameToken>

<ns1:Username>POLIESCHUKT</ns1:Username>

<ns1:Password>YHcauQXSLgJtWAJIOCYaqxuaMWaOCOQqagkn</ns1:Password>

</ns1:UsernameToken>

 

В теле запроса а не в заголовке вот тут

 

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

Добрый день!

 

Реализовали функционал копирования деталей при копировании записи частично на примере существующего дополнения:

- в методе onSaved если режим  isCopy мы вызываем БП, в который отправляем конфиг с id старой\новой записи, название схемы и тд. Бизнес-процесс на основе заполненного справочника с колонками деталей создает новые связи с новой (скопированной записью).

 

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

Как лучше поступить в таком случае? Можно было бы реализовать это в событийном процессе базовой записи, но не очень понятно как в нем узнать, что сейчас происходит копирование, а не добавление. И почему вообще может возникать ошибка? Может быть в onSaved есть возможность доработки с ожиданием создания записи в бд? Заранее благодарю за ответы

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

Нравится

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

А данное дополнение не подошло под ваши задачи? https://marketplace.terrasoft.ru/app/copy-detail-records-creatio

Трефилов Павел Сергеевич,

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

Если это единичный случай, то я делал по другому:

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

		methods: {
			copyRecord: function(primaryColumnValue) {
				this.runCustomCopyProcess(primaryColumnValue);
			},
 
			runCustomCopyProcess: function(primaryColumnValue){
				var args = {
					sysProcessName: "UsrCopySpecificationCustomer",
					parameters: {
						specificationsId: primaryColumnValue
					}
				};
				ProcessModuleUtilities.executeProcess(args);
			},
		}

Это все можно сделать и через isCopy, но там надо отловить момент, когда основная запись уже сохранилось и тогда запускать копирование детали, пример есть в InvoiceSection, правда код крайне замороченный, плюс там еще и вьюшки задействованы. По мне так проще через БП сделать, как у меня, пусть и не очень "красиво".

Трефилов Павел Сергеевич,

В плане копирования связей проблем нет -- сделали БП, там все работает. Проблема скорее в отлавливании момента, когда запись копии основной страницы уже создалась. Казалось бы, у нас для этого есть onSaved -- бери и делай. Но нет, не всегда в момент срабатывания onSaved запись уже создана в бд видимо...

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

Добрый день!



Может ли кто-то пояснить как работает контроль целостности?

 

Есть объект "журнал", в котором есть колонка Контакт. 

1) заполняем колонку Контакт в записи "журнал".

2) удаляем запись контакта.

 

1. Если стоит радиобаттон"удалять" у поля "Контакт" в Журнале, то по идее должна удаляться запись журнала -- удаляется

2. Если стоит радиобаттон "блокировать" у поля "Контакт" в Журнале, то выходит окно с контролем целостности с указанием на страницу Журнала. Тут есть возможность удалить связанные записи, но в нашем случае происходит какое-то зацикливание и после ожидания "подготовки данных к удалению" мы снова попадаем в окно контроля целостности

 

Самое интересное как работает галка "не контролировать целостность"

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

- если будет поставлена галка "не контролировать" и радиобаттон "блокировать", то при удалении объекта все равно попадаем в окно контроля целостности

- если стоит галка "не контролировать" и радиобаттон "удалять"  -- только в этом случае обычно все нормально работает.



Почему вообще при постановке галки "не контролировать" доступны радиобаттоны? не было бы логичнее делать их тдч и вообще не учитывать при удалении?



В общем какое-то странное поведение, которое не дает нам полностью реализовать необходимую логику.



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

Нравится

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

Добрый день.

Ниже описано как в приложении Creatio реализованы три стратегии удаления.



Блокировать удаление (RESTRICT):

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



При этом у пользователя остается возможность выполнить удаление связанной записи, то-есть остается возможность использовать 2 стратегии удаления: удалять связанный объект (CASCADE) и&nbsp;очищать связь со связанным объектом (SET NULL)







Удалять связанный объект (CASCADE):

Если установлен признак "Удалять записи из...", то при наличии связей с этим объектом, диалогового окна не будет и связанная запись будет удалена.



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







Очищать связь со связанным объектом (SET NULL):

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

 

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

Приветствую. Представьте себе ситуацию. Есть некоторое событие, которое наступит через n  дней. Событие важное, а потому в системе отправляется уведомление "через n дней произойдет событие" , соответственно на следующий день отправляется новое уведомление "через n-1 дней произойдет событие", что очевидно не очень хорошо. В связи с этим появилась идея: обновить текст раннее отправленных уведомлений во вкладке системных уведомлений Изображение удалено.

С помощью бизнес-процесса удалось обновить колонку description в объекте Reminding, который как раз и хранит в себе все системные уведомления. Однако после обновления данных в бд, на фронте никаких изменений не последовало, т.е. боковое меню с системными уведомлениями не обновилось. 

 

Вопрос: как принудительно обновить список системных уведомлений?

Нравится

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

У вас после обновления страницы данные обновляются?

Если да и вам требуется обновить записи без участия пользователя, то нужно использовать механизм сообщений. Пример реализации описан в этой статье https://academy.terrasoft.ru/documents/technic-sdk/7-16/clientmessagebr…

 

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

Илья, добрый день! 



Во вкладке  хранятся уведомления с типом Notification (id = 685e7149-c015-4a4d-b4a6-2e5625a6314c). Что касается объекта Reminding, это другой тип уведомлений (напоминания), который находится в первой вкладке центра уведомлений. 

 

Если Вам необходимо поменять текст в уведомлениях с типом Notification, то Вам потребуется изменить содержимое колонки SubjectCaption. В бизнес-процессе Вы можете сделать это выбрав объект "Уведомление" и поле "Заголовок" в нём. 

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

Добрый день!

 

Пытаюсь удалить пакет, который был установлен из хранилища SVN (напротив имени пакета иконка с зеленым замком), но получаю предупреждение: "Невозможно удалить элемент ... пакета ..., т.к существует зависисый элемент в пакете "Custom"" и пакет не удаляется. Пробовал удалить из пакета Custom элементы, выходит сообщение: "Невозможно удалить элемент ..., т.к. он создан сторонним издателем или установлен из файлового архива". Подскажите, что можно будет сделать? 

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

Нравится

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

Роман Сидаш,

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

Для решения нужно выключить права и удалить замещения в Custom.

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

Доброе время суток!



Есть такая задача:

Есть вебсервис который отправляет запрос и ответ получает в таком виде:

{

  "range": "'Лист1'!A1:T985",

  "majorDimension": "ROWS",

  "values": [

    [

      "id",

      "created_time",

      "ad_id",

      "ad_name",

      "adset_id",

      "adset_name",

      "campaign_id",

      "campaign_name",

      "form_id",

      "form_name",

      "is_organic",

      "platform",

      "full_name",

      "phone_number",

      "email"

    ],

    [

      "l:264287232248572",

      "2021-12-03T14:08:57+02:00",

      "ag:23849343099100250",

      "S1R",

      "as:23849343099080250",

      "Широкая / 21-45 / no Ex / Exp off",

      "c:23849343098930250",

      "Bid",

      "f:1560978927585929",

      "S1R-copy",

      "FALSE",

      "fb",

      "Валера Булдужкин",

      "380999586316",

      "mariapirogova86@ukr.net"

    ],

    [

      "l:663271345038273",

      "2021-12-03T13:12:49+02:00",

      "ag:23849343099100250",

      "S1R",

      "as:23849343099080250",

      "Широкая / 21-45 / no Ex / Exp off",

      "c:23849343098930250",

      "Bid",

      "f:1560978927585929",

      "S1R-copy",

      "FALSE",

      "fb",

      "Татьяна Муховна",

      "380675683876",

      "tat.ign@ukr.net"

    ]

  ]

}



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

Нравится

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

Стрилец Антон,

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

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

Мобильное приложение должно ведь по умолчанию быть доступным. Как на демо-версии. Или же нужен отдельный сервер для него?

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

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

Нравится

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

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

 

Мобильное приложение это клиент, который подключается к основному приложению — серверу(веб-приложению). 

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

 

Самая быстрая проверка доступности это попытаться ввести адрес сервера в браузере на ПК. 

 

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

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

Добрый день!

 

Подскажите, где можно узнать расположение логов приложения? В мастере мобильного приложения при настройке реестра раздела выходит ошибка в консоли браузера: "Unexpected end of JSON input", хотелось бы узнать подробнее, что не так

 

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

Нравится

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

Здравствуйте, Роман!

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

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

Для того чтобы устранить ошибку, необходимо, либо удалить схему, либо прописать "[ ]".

Схемы находятся в конфигурации и имеют вид: Mobile + название объекта + затем Grid/RecordPageSettings + название рабочего места.

Например - MobileActivityGridPageSettingsDefaultWorkplace.



Касаемо Вашего вопроса по поводу расположения логов.

Если говорить о последней версии МП, то файлы логов не хранятся в директории мобильного приложение. Логи можно выгрузить по кнопке "Отправить лог".

Если говорить о более старых версиях, то логи МП должны быть доступны в проводнике на устройстве, во внутренней памяти телефона в папке "creatio" - "Logs".

Станислав Чернышев,

спасибо!

 

А логи десктопной версии приложения где могу найти?

 

Касаемо схем, пакет был установлен из хранилища SVN с другой среды, на другой среде такой ошибки нет. После установки пакета была выполнена компиляция

Здравствуйте, Роман!

Местоположение файлов логов зависит от Вашей версии, поскольку до версии 7.17.2 используется решение log4net, а после библиотека логирования NLog, а также значения системных переменных Windows.

Детальнее расположение логов описано в соответствующих статьях.

NLog: https://academy.terrasoft.ru/docs/developer/instrumenty_razrabotki/logi…

log4net: https://academy.terrasoft.ru/docs/7-17/developer/development_tools/logg…

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

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

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