Вопрос

Шаги воспроизведения:
Сайт клиента:
Версия: 7.12 Service Ent
 
Коллеги, требуется помощь.
По штатному функционалу https://academy.terrasoft.ru/documents/technic-sdk/7-13/rabota-s-obekta….
При добавлении пользователя в коллекцию SysAdminUnitCollection при сохранении вылетает ошибка, хотя при создании, например Контактов - всё ОК:

<?xml version="1.0" encoding="utf-8" standalone="yes"?><error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><code>4</code><message xml:lang="">Forbidden</message><innererror><message>Forbidden</message><type>System.Data.Services.DataServiceException</type><stacktrace>   at System.Data.Services.DataServiceConfiguration.CheckResourceRights(ResourceSetWrapper container, EntitySetRights requiredRights)&#xD;
   at System.Data.Services.Serializers.Deserializer.HandlePostRequest()&#xD;
   at System.Data.Services.DataService`1.HandlePostOperation(RequestDescription description, IDataService dataService)&#xD;
   at System.Data.Services.DataService`1.ProcessIncomingRequest(RequestDescription description, IDataService dataService)&#xD;
   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)&#xD;
   at System.Data.Services.DataService`1.HandleRequest()</stacktrace></innererror></error>

Авторизуюсь в сервисе под Supervisor.
Доступ к операциям и Доступ к объекту для внешних сервисов добавлен для SysAdminUnit на чтение, добавление, удаление, изменение.

Заранее благодарен за помощь.

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

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

В коде веб-сервиса жёстко зашиты права только для чтения, если схема начинается на «Sys» или «VwSys» (с небольшим списком исключений).

Значит, добавление по OData для этой таблицы применять нельзя.

Спасибо за информацию!

Ну и дела!

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

Добрый день!

Не обессудьте первый день рою bpm.

Увидел две таблицы: "Пользователь портала" и "Пользователи/роли (Представление)". В чем разница?

Я так понимаю чтобы добавить пользователя портала нужно добавить запись в таблицу "Пользователи/роли (Представление)"

Делаю через действия системы "Добавить данные" и он мне выдает ошибку: System.NullReferenceException: Object reference not set to an instance of an object.

Ошибка сама по себе понятна после выполнения результат данного действия равен NULL, вопрос почему? Или Таблица "Пользователи/роли (Представление)" вовсе не таблица, а как и написано в скобках это View и пользователя портала (системы) нужно добавлять как-то по другому.

И самый главный вопрос где прочитать? про это все можно искал в академии: толи там нет, толи искалка еще не выросла

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

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

Да, это - view. На основе SysAdminUnit.

Не нашел таблицу "Пользователь портала", но примерный алгоритм работы ролей и пользователей в bpm:

1) все роли и пользователи хранятся в SysAdminUnit (да, это помойка из кучи записей, с разными типами)

2) в SysUserInRole задаётся связь роли (из SysAdminUnit) с контактом (из того же SysAdminUnit)

Как-то так. И да, почитать - нигде. У нас тут практикуется исключительно хождение по граблям. Странный способ получения экспириенса, но какой есть...

Чисто для примера: я вот тут вчера узнал, что система в деталях возвращает UsrDate(поле типа DateTime из карточки родителя, подтягивал через аттрибуты) в виде строки. А при заходе в страницу редактирования той же самой записи, тот же самый код возвращает UsrDate, но уже в типе DateTime. Так и живем ¯\_(ツ)_/¯

Да, это - view. На основе SysAdminUnit.

Не нашел таблицу "Пользователь портала", но примерный алгоритм работы ролей и пользователей в bpm:

1) все роли и пользователи хранятся в SysAdminUnit (да, это помойка из кучи записей, с разными типами)

2) в SysUserInRole задаётся связь роли (из SysAdminUnit) с контактом (из того же SysAdminUnit)

Как-то так. И да, почитать - нигде. У нас тут практикуется исключительно хождение по граблям. Странный способ получения экспириенса, но какой есть...

Чисто для примера: я вот тут вчера узнал, что система в деталях возвращает UsrDate(поле типа DateTime из карточки родителя, подтягивал через аттрибуты) в виде строки. А при заходе в страницу редактирования той же самой записи, тот же самый код возвращает UsrDate, но уже в типе DateTime. Так и живем ¯\_(ツ)_/¯

Варфоломеев Данила,

Спасибо

Но я так понимаю в эти таблицы нельзя добавить данные через элемент бизнес-процесса "Добавить данные" (не представлены в выборе объектов для добавления) и нужно писать скриптом?

Красильников Аександр,

Есть, просто называются "Объект администрирования" и "Вхождение пользователя в роли"

Варфоломеев Данила,

Где можно узнать, "Понятное имя" таблиц БД?

В разделе «Конфигурация».

Или в базе в свойствах таблицы:

Красильников Аександр,

Используются для выбора заголовки таблиц

Всем спасибо за оперативные ответы

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

Добрый день,

На систему был поставлен пакет, в котором находился запускаемый по расписанию БП. После установки на систему, он начал запускаться от имени пользователя, который поставил пакет. Этого пользователя в дальнейшем деактивировали на системе, но БП продолжает запускаться от его имени. Пробовал выключать и заново включать БП - всё равно ответственный, тот, кто и первоначально. Пробовал запускать его собственноручно, он запустился 1 раз от имени нового пользователя, но по расписанию всё равно запускается от имени старого пользователя. Как изменить ответственного для этого БП, который запускается по расписанию?

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

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

Ищите БП планировщик который запускает ваш БП, там скорее всего указано от чьего имени и какой БП запускать, либо же это может быть триггер прямо в БД, так же и там посмотрите, либо же могли сделать, это через Системную настройку, нужно смотреть, так особо и не подсказать

Ищите БП планировщик который запускает ваш БП, там скорее всего указано от чьего имени и какой БП запускать, либо же это может быть триггер прямо в БД, так же и там посмотрите, либо же могли сделать, это через Системную настройку, нужно смотреть, так особо и не подсказать

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

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

 "UsrField": {

                dependencies: [
                    {
                        columns: ["UsrField2"],
                        methodName: "method"
                    }
                ]
            },

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

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

Использую onEntityInitialized:

methods: {
            onEntityInitialized: function() {
                this.setFinishDate();
            },
            
            setFinishDate: function() {
                    var finishDate = new Date();
                    finishDate.setFullYear(finishDate.getFullYear()+1);
                    this.set("UsrFinishDate", finishDate);
            }
        },

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

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

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

В конце onEntityinitialized добавить this.callParent(arguments);

В конце onEntityinitialized добавить this.callParent(arguments);

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

Здравствуйте, в детали [Амбулаторная карточка] есть поле [ФИО Врача] и поле [Специализация Врача]. Нужно вывести [Специализацию Врача] из установленного поля [Фио Врача]. Врач-это контакт и у него уже есть поле Специализации. Везде описывают кейс с числовыми значениями, но вывод из БД нигде нет. Буду очень благодарен, если подскажите.

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

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

Все можно проще сделать укажите чтоб для доктора вычитывались колонки ФИО и Специлизация и используйте их!

"UsrDoctor": {
  lookupListConfig: {
   columns: ["FIO","UsrDoctorsSpecialization"]
  }
 },

После єтого можно обращатся к полю как UsrDoctor.UsrDoctorsSpecialization

Если я правильно понял, то надо сделать вот так:

attributes: {
//Здесь мы "смотрим" внутрь справочного поля [UsrDoctor], которое ссылается на раздел [Контакты]
//и ищем там специализацию [UsrDoctorsSpecialization]
 "UsrDoctor": {
  lookupListConfig: {
   columns: ["UsrDoctorsSpecialization"]
  }
 },
//Здесь мы вызываем метод, который будет устанавливать специализацию, когда пользователь 
//внесет изменения в поле [UsrDoctor]
 "UsrDoctorsSpecialization": {
  dependencies: [
   {
    columns: ["UsrDoctor"],
    methodName: "setDoctorsSpecializtion"
   }
  ]
 }
},
methods: {
//собственно метод, который устанавливает специализацию в нужное поле
//условие можно и изящней написать. Сделал так, чтобы было понятно.
 setDoctorsSpecializtion: function() {
  var doctor = this.get("UsrDoctor");
  if (doctor) {
   if (doctor.UsrDoctorsSpecialization) {
    this.set("UsrDoctorsSpecialization", doctor.UsrDoctorsSpecialization);
   }
   else {
    this.set("UsrDoctorsSpecialization", null);
   }
  } 
  else {
   this.set("UsrDoctorsSpecialization", null);
  }
 }
},

 

Все можно проще сделать укажите чтоб для доктора вычитывались колонки ФИО и Специлизация и используйте их!

"UsrDoctor": {
  lookupListConfig: {
   columns: ["FIO","UsrDoctorsSpecialization"]
  }
 },

После єтого можно обращатся к полю как UsrDoctor.UsrDoctorsSpecialization

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

Вау, почему в документации еще нет этого способа?:)

Есть:

lookupListConfig — свойство, отвечающее за свойства поля-справочника. Подробнее об использовании данного параметра можно узнать из статьи "Применение фильтрации к справочным полям". Это конфигурационный объект, который может содержать в себе следующие опциональные свойства:

  • сolumns — массив имен колонок, которые будут добавлены к запросу дополнительно к колонке Id и первичной для отображения колонке.
  • orders — массив конфигурационных объектов, которые определяют сортировку данных при отображении.
  • filter — метод, возвращающий объект класса Terrasoft.BaseFilter или его наследника, который, в свою очередь, будет применен к запросу. Не может использоваться совместно со свойством filters.
  • filters — массив фильтров (методов, возвращающих коллекции класса Terrasoft.FilterGroup). Не может использоваться совместно со свойством filter.
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

Подскажите, можно ли как-то принудительно завершить подпроцесс, не дожидаясь его выполнения? Не отменить, а именно завершить.

 

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

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

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

На маркет плєйсе есть решение для массового закрытия БП по одному можно зайти в журнал БР выбрать нужный экземпляр и завершить!

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

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

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

Решение из маркет плейса не подходит по причине того что версия приложения 7.11.1, а дополнение должно работать на версии не ниже 7.11.3

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

А по поводу версий, Вы можете обновиться с 7.11.1 на 7.11.3, между минорными версиями не должно быть особо тяжело.

Шувалов Николай Юрьевич,

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

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

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

С возможностью вставки картинок из буфера обмена, а также просмотра их в ленте в уменьшенном виде с увеличением по клику?

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

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

Насколько я понимаю лента содержит html. А значит можно сохранять картинки в БД и подставлять к ним путь.

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

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

Насколько я понимаю лента содержит html. А значит можно сохранять картинки в БД и подставлять к ним путь.

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

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

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

Григорий, спасибо! А может подскажете, в маркетплейсе есть такая функциональность?

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

А вы уверены, что вам лента вообще нужна?

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

«Интернет не нужон!»©

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

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

Добрый день!

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

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

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

Право на операцию «Управление корпоративными тегами» (CanManageCorporateTags).

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

Спасибо!

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

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

Как можно в bpm'online перевести кроме элементов интерфейса на несколько языков еще и данные?
Необходимо отображать на языке пользователя некоторые поля справочников (Name, Description), а также некоторые поля разделов (например, названия, описания сервисов или продуктов)

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

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

Спасибо!

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

А как все уже существовавшие записи добавить для перевода?

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

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