Добрый день, занимаюсь обновлением creatio sales c 7.16 на 7.18,
столкнулся с проблемой конфигурирования сервиса выгрузки дистрибутивов.
Файл downloader.json настроил следующим образом:
{
    "WebRootDirectory": "C:\inetpub\wwwroot\Sales",
    "WorkDirectory": "C:\copy",
    "Site": "название из IIS",
    "Product": "SalesEnterprise",
    "DbEngineType": "PostgreSQL",
    "VersionBuild": "7.16.1.2135",
    "SkipBinary": "true",
    "ConnectionString": "Server=1.2.3.4;Port=5432;Database=crm;User ID=postgres;password=12345;Timeout=500;CommandTimeout=400;MaxPoolSize=1024;",
    "CurrentSchemaName": "public"
}
Часть данных в конфиге и логах обезличил.
Папка с UpdateService находится в корне диска с дистрибутивом на сервере.
Вот лог ошибок:

ConvertFrom-Json : Нераспознанная escape-последовательность. (29): {
        "WebRootDirectory": "C:\inetpub\wwwroot\Sales",
        "WorkDirectory": "C:\copy",
        "Site": "название из IIS",
        "Product": "SalesEnterprise",
        "DbEngineType": "PostgreSQL",
        "VersionBuild": "7.16.1.2135",
        "SkipBinary": "true",
        "ConnectionString": "Server=1.2.3.4;Port=5432;Database=crm;User ID=postgres;password=12345;Timeout=50
0;Comm
andTimeout=400;MaxPoolSize=1024;",
        "CurrentSchemaName": "public"
}
C:\UpdaterService\Downloader.ps1:407 знак:23
+     $config = $content | ConvertFrom-Json
+                          ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

Add-Member : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL.
C:\UpdaterService\Downloader.ps1:463 знак:18
+         $environment | Add-Member "Locale" "ENU" -Force
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Member], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCo
   mmand

Add-Member : Не удается привязать аргумент к параметру "InputObject", так как он имеет значение NULL.
C:\UpdaterService\Downloader.ps1:466 знак:18
+         $environment | Add-Member "SkipVersions" @() -Force
+                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Add-Member], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.AddMemberCo
   mmand

Нравится

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

Добрый день.

 

Попробуйте указать информацию по путям к директориям через 2 слеша - у Вас через 1.

 

Также рекомендую прочитать ещё раз внимательно иструкцию по обновлению на Академии.

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

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

{
"WebRootDirectory": "c:\\inetpub\\wwwroot\\delivery",
"WorkDirectory": "c:\\temp\\delivery",
"Site": "имя вашего сайта в IIS",
"Product": "Studio",
"VersionBuild": "7.14.1.935"
}

Так как такой вид содержит меньше параметров, вероятность допустить ошибку при указании параметров меньше.

 

Добрый день.

 

Попробуйте указать информацию по путям к директориям через 2 слеша - у Вас через 1.

 

Также рекомендую прочитать ещё раз внимательно иструкцию по обновлению на Академии.

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

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

{
"WebRootDirectory": "c:\\inetpub\\wwwroot\\delivery",
"WorkDirectory": "c:\\temp\\delivery",
"Site": "имя вашего сайта в IIS",
"Product": "Studio",
"VersionBuild": "7.14.1.935"
}

Так как такой вид содержит меньше параметров, вероятность допустить ошибку при указании параметров меньше.

 

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

Добрый день!

После добавления визирования в стандартный раздел Продаж (Opportunity), перестали приходить уведомления в Центр уведомлений коммуникационной панели. Уведомления были добавлены отметкой чек-бокса "Enable approval in section" в секции "Approval" мастера разделов. Уведомления перестали приходить в том числе и для разделов Order, Invoice, по которым они ранее приходили. Индикатор визирования в коммуникационной панели отображается,  но текст уведомления в коммуникационной панели отсутствует. Добавление схемы "OpportunityVisaNotificationProvider", записи "Terrasoft.Configuration.OpportunityVisaNotificationProvider" в таблицу "NotificationProvider" не помогло.

В консоли браузера выводится ошибка :

POST https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
[HTTP/2 400 Bad Request 84ms]
Error while sending request response status:
    400 (Bad Request)
    request url: https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
    method: POST
    request data: {"sysAdminUnitId":"3190ebaf-a3cf-461d-95f6-29115215bd39","requestOptions":{"isPageable":true,"rowCount":15}} 
The server encountered an error processing the request. The exception message is '42601: each UNION query must have the same number of columns'

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

Нравится

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

Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.

Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".

В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"

И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.

Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".

В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"

И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

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

Подскажите,
1) базовый - это BaseVisaNotificationProvider? 
2) должна ли быть запись для нового раздела Opportunity в таблице "NotificationProvider" ?
3) нужно ли добавлять копии БП по подобию "OrderVisaBaseSubprocess", 

"OrderVisaBaseSubprocessOrder1",
"OrderVisaBaseProcess",
"OrderVisaBaseProcessOrder1" ?

 

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

Спасибо, починил! Отличие было в другом разделе.

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

Согласно описанию тут:

https://community.terrasoft.ru/articles/nastroika-znacenii-polei-detali…

Можно установить значения по умолчанию для новых записей, заимствуя их из текущей карточки:

        "defaultValues": {
            "UsrContract": {//колонка детали
                "masterColumn": "Id"//колонка основной записи (Важно! добавление id тоже нужно прописать (если связь не по id, а иначе - ориентироваться на блок "filter":))
            },
            "Account": {//колонка детали
                "masterColumn": "Account"//колонка основной записи
            },
            "UsrProject": {//колонка детали
                "masterColumn": "UsrProject"//колонка основной записи
            }
        }

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

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

 

Нравится

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

Мерещук Сергей,

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

У вас пример уже полноценный. Хотите добавить например связь с Продуктом (при наличии), То пишите
 

"defaultValues": {
            "Product": {//колонка на вашей детали (в объекте)
                "masterColumn": "Product"//колонка из основной записи 
            }
        }

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

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

Мерещук Сергей,

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

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

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

добавлен скрипт на оф сайте

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

Спасибо.

Нравится

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

Как я понял из консоли, при обработке запроса его перенаправляют на страничку авторизации. Если я правильно понимаю, мне нужно добавить авторизацию в код?
И куда именно?

Булат Хабирзянов, добрый день!

 

 

Уточните, пожалуйста, Вы вносили указанный код на лендинг? 

Также сверьтесь с документацией:

https://academy.terrasoft.ru/docs/user/instrumenty_crm/lendingi_i_web_f…

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

Код внесен на сайт

При обработке запроса к сайту вылетает на страницу авторизации

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

Добрый день.

С чем это может быть связано, и как это поправить?

 

Версия Creatio - 7.16.1.2135.

Нравится

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

Вверху справа, под кнопкой Настройки, справа от Молнии выпадающее меню, нажмите там на галочку "Все" (находится внизу списка)

Добрый день.

 

Сделайте скриншот схемы объекта, чтобы было понятно, где Вы смотрите.

Вверху справа, под кнопкой Настройки, справа от Молнии выпадающее меню, нажмите там на галочку "Все" (находится внизу списка)

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

 спасибо!

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

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

При попытке добавить новое поле и затем сохраниться, вылезает следующая ошибка:

Error while saving: Конфликт инструкции INSERT с ограничением FOREIGN KEY "FKLAgjV0BBzQyDeCfqA7BsIwad5RA". Конфликт произошел в базе данных "creatio2", таблица "dbo.SysCulture", column 'Id'.
Выполнение данной инструкции было прервано.

При этом в другом объекте новое поле без проблем добавилось, и в этот объект ранее поля тоже успешно добавлялись.
Таблица SysCulture заполнена, у пользователя соответствующий SysCultureId корректный.

Попробовал ему попереключать языки Ru <-> En, не помогло.

Куда копать?

Нравится

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

Проверил по БД, данный внешний ключ связывает с SysCulture таблицу SysPackageResourceChecksum.

Добрый день,

Советую ознакомится с этим вопросом, там помогла перезагрузка редиса. 

Если это не помогло, то советую выполнить в БД скрипт UPDATE SysPackageResourceChecksum SET IsChanged = 0 WHERE IsChanged = 1 после чего снова перезагрузить редис.

В итоге почему-то помогло установка русской локали в качестве локали по-умолчанию. После этого проблема исчезла и не вернулась и после возврата английской локали в качестве дефолтной.

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

Добрый день.

 

Ситуация следующая. Пользователь пишет письмо на почтовый ящик. 

С почтового ящика приходит автоответ, с присвоенным номером запроса, темой, и датой создания. 

Но, если так же ответ писать через систему, 

Соответственно, на почте отображается нормально. 

 

В первом случае, запрос зарегистрирован 9 июня, а во втором, 6 сентября.

 

В шаблоне автоответа в строке "Дата регистрации" есть параметр:

 

<td class="es-m-txt-l" align="left" style="padding:0;Margin:0;padding-bottom:20px;"> <p style="Margin:0;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;mso-line-height-rule:exactly;font-size:14px;font-family:arial, 'helvetica neue', helvetica, sans-serif;line-height:21px;color:#6F6F6F;">Ваше обращение зарегистрировано под <!--[#Category.Name#] --> <span style="color:#254E5F;"><strong>No.[#Number#]</strong></span></p><p style="Margin:0;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;mso-line-height-rule:exactly;font-size:14px;font-family:arial, 'helvetica neue', helvetica, sans-serif;line-height:21px;color:#254E5F;">"[#Subject#]"</p><p style="Margin:0;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;mso-line-height-rule:exactly;font-size:14px;font-family:arial, 'helvetica neue', helvetica, sans-serif;line-height:21px;color:#6F6F6F;">Дата регистрации: <span style="color:#254E5F;">[#RegisteredOn#]</span>.</p><p style="Margin:0;-webkit-text-size-adjust:none;-ms-text-size-adjust:none;mso-line-height-rule:exactly;font-size:14px;font-family:arial, 'helvetica neue', helvetica, sans-serif;line-height:21px;color:#6F6F6F;">

 

Вопрос, где искать, что ЦРМ отправляет? Возможно это прописано в каком то справочнике, но в каком?

Проверил, что на сервере с датами всё ок.

Нравится

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

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

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

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

Алла Савельева, Добрый день. Подскажите где это искать?

Георгий,

Не имея доступа к срм, не могу сказать(

Георгий,

 

Добрый день!

Формат даты и времени напрямую берётся из профиля пользователя - поле "Формат даты и времени". 
В случае, если данное поле не заполнено, формат даты и времени берётся из формата даты и времени на сервере.

 

Также за конвертацию дат в макросах отвечает системная настройка "Конвертировать даты в макросах с учетом часового пояса"

Проверьте, пожалуйста, соответствующие настройки.

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

 

Добрый день. Если имелось ввиду изменение как в данной теме (https://community.terrasoft.ru/questions/format-daty-i-vremeni)

То это я сделал. 

Ранее там вместо timezone стоял вопрос, но зайдя в настройки пользователя (от которого осуществляется отправка автоответов), там было проставлено Москва ... (+3:00).

 

Отправив тестовое письмо, Дата по прежнему пишется в Американском формате.

 

Так же вопрос, как попасть в необходимый макросы?

Спасибо.

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

почему при добавлении фильтра нельзя использовать значение поля NrbCity.Name?

                                    esqResult.AddAllSchemaColumns();
                                    esqResult.AddColumn("NrbCity.Name");           
                        var entity = esqResult.GetEntity(UserConnection, purchaseId);

этот код выполняется без ошибок.

а вот дальше:

esqMatching.CreateFilterWithParameters(FilterComparisonType.Equal, "UsrCity", entity.GetColumnValue("NrbCity.Name").ToString());
ругается что 

Terrasoft.Common.ItemNotFoundException: 'Значение с именем "NrbCity.Name" не найдено'
что не так-то? как использовать значение этого поля дальше в другом фильтре?

Нравится

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

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

 

Для работы с такой колонкой можно сохранить её название в переменную и потом обращаться по нему:

string cityColumnName = esqResult.AddColumn("NrbCity.Name").Name;
...
entity.GetColumnValue(cityColumnName).ToString();

Система формирует названия таких колонок по-другому, по-моему, через подчеркивание. Вот таким образом: 'NrbCity_Name'.

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

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

 

Для работы с такой колонкой можно сохранить её название в переменную и потом обращаться по нему:

string cityColumnName = esqResult.AddColumn("NrbCity.Name").Name;
...
entity.GetColumnValue(cityColumnName).ToString();

Система формирует названия таких колонок по-другому, по-моему, через подчеркивание. Вот таким образом: 'NrbCity_Name'.

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

entity.GetColumnValue<string>("NrbCity.Name").Name

 

Dima Avdoshin,

это ничем не отличается от моего варианта

entity.GetColumnValue<string>("NrbCity.Name") - не будет найден

 

Алла Савельева,

да, спасибо! именно так все и оказалось.

Gladushkin Peter,

("NrbCity.Name").Name у вас приведение к стрингу, а у меня взято свойство Name , как Аллы показано при добавлении колонки
Показать все комментарии

в проекте Terrasoft.Configuration.sln

через метадату отображатся вот такие описания встроенных методов:

public EntitySchemaQueryColumn AddColumn(EntitySchemaQueryFunction function);
        //
        // Summary:
        //     ####### # ######### ####### # ####### ###### # ##### ####### ## ######### ####
        //     # ####### ############ ######## #####.
        //
        // Parameters:
        //   columnPath:
        //     #### # ####### ##### ############ ######## #####.
        //
        // Returns:
        //     ######### ######### #######.
        //
        // Exceptions:
        //   T:Terrasoft.Common.ArgumentNullOrEmptyException:
        //     #### # ######## ######### columnPath ######## ###### ######## ### null.

почему так и как исправить на читаемое?

Нравится

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

Добрый день.

В ядре Creatio некоторые классы и методы описаны комментариями на русском языке и итоге затираются. Это уже обсуждалось тут.

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

я новичок , прошу помочь с основами.

Вот я включил разработку в ФС, открываю в студии Terrasoft.Configuration.sln
меняю в нем код, а команды из external tools (Buld Workspace и Rebuld workspace)

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

Нравится

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

Добрый день!

Рекомендую проверить правильность настройки приложения для работы в файловой системе согласно инструкции 

https://academy.terrasoft.ua/docs/developer/development_tools/developme…

Что до того, что у вас сбрасываются изменения, то возможно вы не сохраняете их прежде чем провести компиляцию. Следует внимательно ознакомится с примером разработки в файловой системе по этой ссылке
https://academy.terrasoft.ua/docs/developer/development_tools/developme…
 

Также можно ознакомится с этим обсуждением ранее.

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