Я хочу изменить значение по умолчанию аттрибута IsReadOnly для окна выборки. Я так понимаю это должно быть доступно в обработчике события OnPrepareSelectWindow LookupDataField, однако не смог разобраться как. все, что смог найти - это указать SelectWindowUSI и настроить LoockupDataset для окна выбора.
Денис, этот атрибут задаётся в свойствах или датасета, или окна. Вот как он проверяется в скрипте scr_SelectData:
var IsReadOnlyFromDataset =
GetAttribute(SelectData.Dataset, IsReadOnlyAttrName);
var IsReadOnlyFromWindow = GetAttribute(Window, IsReadOnlyAttrName);
SelectData.IsReadOnly= IsReadOnlyFromDataset || IsReadOnlyFromWindow;
А так он задаётся в обработчике OnPrepareSelectWindow в wnd_CampaignEditScript:
function edtOwnerOnPrepareSelectWindow(LookupDataControl){
PrepareLookupDataControl(LookupDataControl, dlData.Dataset);}
Эта функция в scr_WindowUtils:
function PrepareLookupDataControl(LookupDataControl, Dataset){
var DataFieldName = LookupDataControl.DataFieldName;
var DataField = Dataset.DataFields.ItemsByName(DataFieldName);
var LookupDataset = DataField.LookupDataset;
SetAttribute(LookupDataset, 'IsReadOnly', true);}
Зачастую приложение разработанное на BPMOnline, как и последующие его доработки требуется предоставлять в виде "all inclusive", т.е. всё что нужно, в т.ч. и настройки и бэкраунд-данные должны быть в Ваших пакетах, и единственное что остается сделать клиенту или его специалистам - это установить их. Но в части механизма переноса данных в самой архитектуре приложения есть проблемные моменты, в основном часто встречающиеся юзкейсы:
1) Перенос/инсталляция элементов организационной структуры, или изменений в ней через пакет. проблематика: Через "Данные" не переносятся, подключить их в пакет у Вас конечно получится с кучей связей, но при установке вас ожидает фиаско, в первую очередь потому, что требуется четкое соблюдение порядка добавления записей, в таблице SysAdminUnits есть внутренние связи FK между колонками Id и ParentId (значение одной колонки ссылается на значение из другой колонки этой же таблицы). Этими значениями определяется иерархия, по этому Вам необходимо добавлять записи в соответствии с их положением в дереве: от корня в глубь. совет: организовывайте вашу структуру в мастере в том числе проставьте галочки на "Есть руководители" (т.к. создается отельный орг.юнит), после чего в любом удобном инструменте просмотра таблиц БД, в таблице SysAdminUnits отсортируйте записи по колонке "CreatedOn" в порядке возрастания, и в таком виде экспортируйте INSERT инструкции для каждой записи отдельным блоком. PS: так же зачастую требуется перенос значений из таблиц SysAdminUnitsInRole (пользователи включенные в орг.юнит), и SysFuncRoleInOrgRole (связи орг.юнитов друг с другом),
а перед инсталяцией орг.юнитов пользователей - сначала инсталируйте контакты с которыми они будут связаны.
2) Перенос/инсталляция настроек рабочих мест, или изменений в них через пакет. проблематика: По той причине что организационную структуру Вы через данные не переносите, настройка рабочих мест просто не даст Вам создать данные так, как вы не включаете в виде данных необходимые значения для орг.юнитов. PS: Сами рабочие места, и даже разделы вы можете перенести через данные,
но если вам нужны данные о пользователях группах пользователей в раб.местах - тут только SQL-скрипт. Так что лучше уж тогда все переносить в скрипте.
3) Перенос/инсталляция настройки колонок в реестрах, деталях, окнах выбора и т.д. проблематика: Через "Данные" не переносятся, т.к. содержат бинарные данные в 2-х колонках (ObjectData, ObjectDifference) таблицы SysProfileData по какой-то причине не включаются в пакет вместе с данными, и аналогично предыдущему пункту вы можете создать такие "Данные", но при инсталляции получите записи с пустыми вышеупомянутыми колонками. совет: Опять же настраиваем "ручками в системе" потом отлавливаем новые записи в любом SQL-view, дампим записи (их будет 2-3 на каждый элемент настройки колонок) в блоках INSERT, но в данном случае не забудьте, что вам при инсталляции надо будет проверить существуют ли в таблице записи с такими же соотношениями колонок "Key" - "ContactId" и удалить их (не обновлять) если они есть после чего вставлять Ваши записи.
Вообщем у Вас может получиться объемистая часть данных которые надо включать в пакеты в виде SQL-скрипта. И идеальный подход для этого конечно использование подхода "Вставить, а если существует - обновить".
Так вот TSQL не предлагает каких либо "сахарных" инструкций aka MySQLUPSERT или PostgreSQLON DUPLIKATE KEY
В TSQL ближайший аналог это монстроузный MERGE который можно использовать для реализации вышеупомянутого подхода, ну конечно можно еще c использование IF EXISTS писать еще более "монструозные простыни", и даже делать SELECT->FOR-IF-UPDATE/INSERT но это уж простите меня - совсем "нубство".
Первый взгляд на MERGE вас конечно немного испугает и заставит пропотеть, особенно учитывая тот факт что вам не обойтись без многократного описания колонок и их соотношений, а в большинстве таблиц с которыми Вам его надо будет применять - более 10-ти колонок. :) а Вам понадобится их перечисление в 4-х местах в разном виде.
Но на помощь нам приходят современные средства разработки !
Итак... вот вам пошаговый рецепт составления такого скрипта на примере составления MERGE для переноса/обновления из таблицы SysAdminUnits в среде Jetbrains DataGrip (если вы или Ваши друзья коллеги студенты IT-смежной специальности, Вы без проблем получите ключ на год на весь пантеон из продуктов, WebStrom просто незаменим для JavaScript, особенно в свете того что с 7.10 версии наконец-то можно работать с пакетами в файловом режиме) PS: наверняка в SQL Managment Studio можно обвеситься плагинами и получить аналогичную функциональность (я сейчас про некоторые хоткеи и мультикурсорность, которые и есть суть - все сильно упрощают), если это так - прошу знатоков отписаться в комментариях что для этого потребуется, или же подтвердить что там так не выйдет.
Итак поехали:
Копируем шаблон конструкции
DROPTABLEIFEXISTS #Temp; CREATETABLE #Temp (
);
MERGE TargetTable AS dst USING #Temp AS src ON(dst.Id=src.Id)
WHEN MATCHED THEN UPDATESET
WHEN NOT MATCHED BY TARGET THEN INSERT (
) VALUES(
);
GO
ДАЛЬНЕЙШИЕ ИЗОБРАЖЕНИЯ ЭТО GIF-АНИМАЦИЯ, CLICKайте и ПРОСМАТРИВАЙТЕ
Открываем необходимую таблицу в структуре и переходим к ее определению (вкладка DDL) поиск в боковой схеме - простой набор символов с клавиатуры при выделении любой таблицы
открытие таблицы - F4
и копируем определение колонок в определение колонок временной таблицы шаблона, даем временной таблице осмысленное имя,
и вот тут начнется "магия" мультиселекта это IDE Alt+j (установка мультикурсорности на обнаруженных паттернах выделенного фрагмента)
Нам необходимо избавиться в обявлении колонок от значений "по умолчанию" (не знаю почему, но с этим иногда бывают проблемы, в контексте нашей задачи, проще избавиться, чтобы наверняка).
А так же удалем FK определения они нам само собой тоже не нужны
При помощи мощи мультиселекта и хоткеев паттерного выделения (выделить слово, добить/убрать из выделения символ) "творим магию"
обратите внимание на то, что лишние запятые изначально оставляются чтобы все строки соответствовали паттерну, а потом удаляются, остается установить имя целевой таблицы.
и вот мы получили вот такой вот скрипт
DROPTABLEIFEXISTS #TempSysAdminUnits; CREATETABLE #TempSysAdminUnits (
Id UNIQUEIDENTIFIER PRIMARYKEYNOTNULL,
CreatedOn DATETIME2,
CreatedById UNIQUEIDENTIFIER,
ModifiedOn DATETIME2,
ModifiedById UNIQUEIDENTIFIER,
Name NVARCHAR(250)NOTNULL,
Description NVARCHAR(250)NOTNULL,
ParentRoleId UNIQUEIDENTIFIER,
ContactId UNIQUEIDENTIFIER,
TimeZoneId NVARCHAR(250)NOTNULL,
UserPassword NVARCHAR(250)NOTNULL,
SysAdminUnitTypeValue INT NOTNULL,
AccountId UNIQUEIDENTIFIER,
Active BIT NOTNULL,
LoggedIn BIT NOTNULL,
SynchronizeWithLDAP BIT NOTNULL,
LDAPEntry NVARCHAR(250)NOTNULL,
LDAPEntryId NVARCHAR(250)NOTNULL,
LDAPEntryDN NVARCHAR(500)NOTNULL,
IsDirectoryEntry BIT NOTNULL,
ProcessListeners INT NOTNULL,
SysCultureId UNIQUEIDENTIFIER,
LoginAttemptCount INT NOTNULL,
SourceControlLogin NVARCHAR(250)NOTNULL,
SourceControlPassword NVARCHAR(250)NOTNULL,
PasswordExpireDate DATETIME2,
HomePageId UNIQUEIDENTIFIER,
ConnectionType INT NOTNULL,
UnblockTime DATETIME2,
ForceChangePassword BIT NOTNULL,
LDAPElementId UNIQUEIDENTIFIER,
DateTimeFormatId UNIQUEIDENTIFIER, );
потратив на его составление менее 5-ти минут :)
Ну а далее в этот скрипт перед операцией MERGE перенесите INSERT конструкциями, то что требуется изменив назначение на временную таблицу
Вуаля... итого 5-7 минут и готово.
Другими способами и копипастой, такой скриптик писать с таким огромным разношерстным объявлением - минут 20-30 :)
Так что юзайте возможности современных средств разработки коллеги.
мы на 79 переносили оргструктуру, пользователей и даже права на объекты через данные
там есть два момента:
1) надо сбросить, а после установки пакета вернуть, триггер TRSysAdminUnitRoot (без триггера не было проблем с установкой SysAdminUnit - я так понимаю механизм установки следит за порядком SAME REFERENCE записей)
2) (не уверен надо ли это вообще)) следить за порядком установки (он алфавитный) - контакты перед пользователями, роли перед пользователями и вхождениями ролей в роли и пользователей в роли (SysUserInRole, т.к. SysAdminUnitsInRole - заполняется в процессе актуализации оргструктуры см сленд пункт)
3) после установки пакета выполнить tsp_ActualizeAdminUnitInRole, просто чтобы не забыть сделать это вручную
4) осторожнее с корневыми ролями и Supervisor'ом
"Андросов Дмитрий" написал:3) после установки пакета выполнить tsp_ActualizeAdminUnitInRole, просто чтобы не забыть сделать это вручную
Да, это важное и полезное дополнение :)
Спасибо.
"Андросов Дмитрий" написал:(не уверен надо ли это вообще)) следить за порядком установки (он алфавитный)
ну вот это прям сомнительное утверждение :)
Ну если я конечно понимаю о чем идет речь.
Так как у потомка в колонке ParentId идет FK на Id этой-же таблицы, т.е. порядок просто ОБЯЗАН быть соблюден, иначе лови ошибки FK инсерта строк на уровне таблицы SysAdminUnit, при установке через данные именно в этом и проблема:
Мы профилировали запросы и там INSERT идет через перечисление VALUES а не каждая строка отдельной инструкцией... (так что тут фактически повезет / не повезет как сортируются значения в перечислении мне не ведомо да и мы в любом случае не можем это контролировать)
"Севостьянов Илья Сергеевич" написал:да и мы в любом случае не можем это контролировать
мы можем контролировать порядок иначе:
создаем данные на корневые роли, называем "SysAdminUnit1Roles"
далее на роли второго уровня, называем "SysAdminUnit2Roles"
далее на третий, называем "SysAdminUnit3Roles" и т.д.
[странно, но мы переносили 5ти уровневую оргструктуру в одних данных, поэтому и сомневался - не разбирает ли установщик данных, что в рамках одних данных установить сначала?]
после этого на самих пользователей "SysAdminUnit999Users" (контакты пользователей установили ранее)
после этого на SysUserInRole для переноса вхождения пользователей в группы
я имел ввиду, что во время установки по алфавиту упорядочиваются не записи, а схемы данных
Добрый день. Подскажите а где можно найти описание доступных настроек объектов на странице.
Скажем есть контрол "CONTROL_GROUP" где я могу почитать о его свойствах которые я могу настраивать в diff?
Если же вам интересно больше примеров то смотрите их в базовых схемах любых конфигураций, либо, вот схема которая обрабатывает diff и строит по нему интерфейс:
ViewGeneratorV2
Почитайте её код.
Расскажите, а зачем в 7.10 сделали циклическую связь Case-Activity? Теперь при обычном подходе удаления (удалить связанные записи) пользователь попадает в цикл.
Добрый день, Владимир!
Я проверил указанный Вами кейс, с версии продукта 7.10 обращение связывается с активностью, а активность связывается с обращением, получается так сказать дублирующая взаимосвязь. Но проблема не в этом, данный функционал корректный и на эту логику очень много нового функционала будет добавлено и часть уже добавлено.
Проблема в другом, функционал удаления записей не корректно работает с записями, у которых есть дублирующие взаимосвязи. Данная проблема известна и Ваш кейс я так же добавил в описание для исправления командой разработки.
Но есть на данный момент обходной путь, вывести в реестр колонку "Родительская активность" и очистить данное поле до удаления самой записи.
Что касается поля ServiceCategory(Категория сервиса) - данное поле так же не выведено по умолчанию в реестре обращений, так как базовой логики на это поля реализованной нет.
Но многие данное поле используют, в случае существования одинаковых "Сервисов", но с разными категориями для более детальной структуризации.
В карточке договора расположено поле "Реквизиты контрагента". При клике на поле появляется список, который отображает значения, которые указаны в определенном поле в платежном реквизите контрагента. Мне нужно отображать значение другого поля, указанного в платежном реквизите. Подскажите, как это сделать? Может кто-то сталкивался и реализовывал подобное.
подскажите пожалуйста для примера, какие поля из схемы таблица Платежные реквизиты контрагента вы хотите отображать на экране при нажатие выбора Платежных реквизитов в договоре. Я вам приведу пример кода.
подскажите пожалуйста для примера, какие поля из схемы таблица Платежные реквизиты контрагента вы хотите отображать на экране при нажатие выбора Платежных реквизитов в договоре. Я вам приведу пример кода.
Михаил, у меня в платежных реквизитах создано поле "Юр.лицо" (тестовое поле). Мне вот нужно, чтобы при нажатии на "Реквизиты контрагента" в договоре, отображался список именно того, что занесено в данное поле (юр.лицо).
Добрый день! Есть задача настройки кастомной автонумерации объекта Case.
Необходимо создать такую маску "INC_(дата в формате: год.месяц.день)_порядковый номер".
Как сделать "INC_порядковый номер" ясно из документации. А как добавить ещё и вставку даты?
Добрый день, Павел!
В том виде, в котором реализована маска сейчас есть возможность передать только 1 параметр, в данном случае номер в формате "{0:00000000}".
По Вашему кейсу необходимо будет передавать 2 параметра минимум, дата + номер. Если необходимо это модифицировать, то нужно изменить логику создания номера обращения в процессе на объекте "CasePage", также переопределить базовые классы вызова номера в схеме IncidetRegistrationFromEmailHelper. Данные манипуляции базовыми средствами выполнить невозможно. Необходимо или разблокировать базовые схемы или выполнить данную разработку в рамках проекта.
Спасибо за понимание!
Версия: 7.9 Добрый день подскажите куда копать:
Был модуль "CSSFix" со временем для унификации наименования схем
его понадобилось переименовать на "KmTenderCSSFix", что и было сделано через Конфигуратор.
А теперь вот при сохранении самого модуля и схемы в которой он подключается, имеем ошибку:
"Элемент с именем CSSFix не найден"
Само собой и куки и кешь вычищались, сайт перзапускался, Redis сбрасывался и т.д.
Так же я произвел поиск по БД на предмет упоминания CSSFix - пусто
В метаданных схем тоже "CSSFix" не обнаружен.
PS: При этом сохранение в реальности происходит, и все даже работает, но ошибка как-то бесит, да и не ясно где "хвосты" и когда можно будет нарваться на последствия, ашь спортивный интерес, где-же он информацию сохранил-то ?
Данная ошибка, скорей всего, была связана с метаданными схемы, которые были пере генерированы после "генерации исходных кодов". Не видя самой ошибки трудно назвать точную причину.
А никакого описания и не было - вот только то что на скриншоте, в "пуш-апе".
"Мотков Илья" написал:была связана с метаданными схемы,
Я смотрел в метаданные доступные для просмотра через пункт контекстного меню конфигуратора.
Хотел еще конечно выгрузить схемы в MD и поискать там, но предположил, что там будет "суть то же самое".
Вот.
Для исключения подобных ошибок в дальнейшем рекомендуем вам при переименовании желательно как пересохранить любую схему для генерации бандл модулей, так и перегенерировать\скомпилировать приложение.
Давно уже не программировал на BPM, поэтому возникло несколько вопросов:
1) Где посмотреть как создать деталь файлы и примечания для своего раздела?
2) Стоит задача - прочитать файл excel. Т.е. прикрепляем файл на деталь, потом при изменении статуса считываем этот файл (можно и просто сделать поле для файла и считывать при загрузке, не суть):
Задача минимум - вытащить значение из определенной ячейки, например С10.
Задача максимум - прошерстить полностью файл (например, в ячейках B10:B12 лежат параметры (могут в разнобой) и значения лежат в ячейках С)
Т.е.
Файл 1:
parameter1 40
parameter2 30
parameter3 20
А может быть файл 2:
parameter3 20
parameter1 40
parameter2 30
Как это сделать, где посмотреть?
3) Можно ли (вообще теоретически) сделать представление календаря на детале (пример на скриншоте)? Почитав форум я понял, что документации нет даже, чтобы сделать календарь для своего нового раздела, и надо просто брать и методом проб и ошибок делать. Но также интересует вопрос про календарь в детале: представление календаря может встать на деталь (сталкивался кто-то с этим?) или же календарь исключетельно для раздела и даже и не пытайся вставить его в деталь, не получится?
Доброго времени суток, при создании своего раздела так же в пакете создается объект (допустим), раздел MyModule, то объект будет MyModuleFile.
Вам необходимо зарегистрировать деталь в таблице SysDetails.
В колонку DetailSchemaUId необходимо заинсертить UId схемы FileDetailV2 (если не ошибаюсь).
В колонку EntitySchemaUId необходимо указать UId объекта MyModuleFile (у вас будет другое название).
Ну про Caption думаю вы догадаетесь)
А потом через мастер можете добавить деталь на страницу.
По поводу Примечаний это не деталь, а строка с неограниченной длинной только со стилями)
Прикреплю два документа, там более подробные инструкции что, куда и как)
Использую действие Добавление данных (AddDataUserTask1) Мне нужно создать активность по клиенту типа SMS (в допустимых действиях только Задача, Звонок и E-mail)
var Body =(string)SysSettings.GetValue(UserConnection, "RKO_OpeningAccount");
Guid SchemaId =new Guid("C449D832-A4CC-4B01-B9D5-8A12C42A9F89");
var DefValues=new Dictionary string, object>();
DefValues.Add("Recepient", Phone);
DefValues.Add("MsgSubject", "Информирование об открытии счета");
DefValues.Add("Body", Body);
DefValues.Add("StartDate", DateTime.Now);
DefValues.Add("DueDate", DateTime.Now);
DefValues.Add("OwnerId", "410006E1-CA4E-4502-A9EC-E54D922D2C00");//Петр Петрович Петров
DefValues.Add("AuthorId", "410006E1-CA4E-4502-A9EC-E54D922D2C00");//Петр Петрович Петров
DefValues.Add("StatusId", "4BDBB88F-58E6-DF11-971B-001D60E938C6");//Завершена
DefValues.Add("DetailedResult", "Cмс отправлено");
DefValues.Add("ContactId", Contact);
DefValues.Add("AccountId", Account);
DefValues.Add("EmployeeFolder", Otdelenie);
DefValues.Add("LeadId", LeadId);
Если Вы хотите просто создать в скрипте новую активность с нужными значениями полей, а потом сохранить в базу с отработкой всей логики на объекте, то можно воспользоваться методами Entity. См., например, как это сделано:
var communication =new Activity(userConnection);
communication.SetDefColumnValues();if(isEmail){
communication.Title=(string)Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, "EmailTypeCommunicationPrintingFormText");}elseif(isImmidiateProcessing){
communication.StatusId= ActivityConsts.CompletedStatusUId;
communication.Title="Коммуникация по обработке на месте";}else{
communication.Title="Коммуникация с письменным ответом";}
communication.Commentary= serviceRequestEntity.GetTypedColumnValue<string>(shortDescColumn.Name);if(isEmail){
var contactEmail = serviceRequestEntity.GetTypedColumnValue<string>(emailColumnName.Name);if(!string.IsNullOrEmpty(contactEmail)){
communication.Recepient= string.Format("{0} <{1}>; ", serviceRequestEntity.GetTypedColumnValue<string>(contactNameColumn.Name), contactEmail);}
communication.HtmlBody= communication.Title;}elseif(isSms){
communication.Recepient= serviceRequestEntity.GetTypedColumnValue<string>(contactPhoneColumn.Name);}
communication.ContactId= serviceRequestEntity.GetTypedColumnValue<Guid>(contactIdColumn.Name);
communication.TypeId= activityTypeId;
communication.ActivityCategoryId= ActivityConsts.ToDoCategoryUId;
communication.MessageTypeId= ActivityConsts.OutgoingEmailtypeUId;
communication.ServiceCallId= recordUId;
communication.Save();
Александр, я поступила по-другому - создала новый процесс на добавление данных и передаю туда данные из основного событийного подпроцесса.
Есть вопросы по поводу сериализациии в БД - для чего она нужна и везде ли она нужна?
При добавление в событийный подпроцесс процесса по добавлению данных получена ошибка: Элемент "CreatedSMS" не может быть сериализован в БД, т.к. не сериализуется процесс.
Методом перебора вариантов получилось сохранить страницу только после того, как в процессе по добавлению данных убрала галочку «сериализовать в БД», все сохранилось и работает.
НО! Мне нужно в основной событийный подпроцесс после создания объекта добавить еще один процесс (старый, написан не мной) и опять такая же проблема: Элемент "SendSmsProcess" не может быть сериализован в БД, т.к. не сериализуется процесс.
Сериализация элемента процесса в БД нужна для того, чтобы после перерыва в выполнении процесса (например, пока пользователь не выполнит задачу) в нём хранились те же значения, что и до.
В API текущего приложения, не входит каких либо инструментов для упрощенной работы с элементами организационной структуры: "Функциональные роли", "Организационные юниты", "Пользователи" (само по себе)
Уже обсуждалось вот в этой теме
Там же я выложил первые наработки, миксин-модуля с некоторыми методами решающими классические "юзкейсы".
С тех пор его пришлось существенно доработать и расширить функционал, по этому выложу его в этой отдельной теме для тех кому может понадобиться.
Во вложении (ZIP-архив) вы найдете исчерпывающую документацию в виде HTML-страницы.
Модуль реализован в виде "миксина", т.е. без каких либо трудностей подключайте в любой схеме и пользуйтесь на здоровье :) так же в конце темы есть исходный код, а так-же Уже готовая к импорту схема в виде MD-файла. Краткое описание: getRelAU ([id], callback, [contactModeFlag], [scope]);
Получить информацию об административных юнитах связанных с пользователем, по его идентификатору Id или Id связанного с ним контакта, или для текущего пользователя если опустить первый аргумент.
(элементы "Организационной структуры", "Функциональные роли", "Организации", "Роли руководителей" (если он в них входит)) в виде структурированного объекта с дополнительной информацией (н/п о родительских OU/FU) будут переданы в callback вызов. checkUserInAU (AUname, [AUtype], [UserId], callback, [scope])
Проверить принадлежит ли текущий пользователь (или произвольный по его Id) к конкретному административному юниту по его имени (элементу "Организационной структуры", "Функциональные роли", "Организации").
В целях оптимизации предусмотрен поиск только по конкретным типам Орг.юнитов. Результат передается в виде булева примитива в callback-функцию getUsersFromRole (RoleId, [getManagerFlag], callback, [scope])
Получить всех пользователей непосредственно входящих в целевые орг.юнит или функциональную роль, в том числе руководителей (пользователей из специалищированного связанного орг.юнита).
Коллекция пользователей будет передана в callback-функцию
код миксина обновлен (исправлены некоторые проблемы, добавлены некоторые решения), MD-файл из приложений убрал он не актуален.
берите код из листинга в теме.
примеры для вызова getRelAU
//Получаем результирующий объект для текущего пользователяthis.getRelAU(
function(result){
console.log(result);});//Тот же вызов, но с явным определением контекста для callback-функцииthis.getRelAU(
function(result){
console.log(result);}
, context);//Получаем результирующий объект для пользователя с id "9D3B1042-9E88-499F-B13F-3E7F7F3FAD7D"this.getRelAU("9D3B1042-9E88-499F-B13F-3E7F7F3FAD7D",
function(result){
console.log(result);});//Тот же вызов, но с явным определением контекста для callback-функцииthis.getRelAU("9D3B1042-9E88-499F-B13F-3E7F7F3FAD7D",
function(result){
console.log(result);}
, context);//Получаем результирующий объект для пользователя связанного с контактом id которого "E7D525FB-88EE-4947-94CC-D013E85D2F79"this.getRelAU("E7D525FB-88EE-4947-94CC-D013E85D2F79",
function(result){
console.log(result);},
true);//Тот же вызов, но с явным определением контекста для callback-функцииthis.getRelAU("E7D525FB-88EE-4947-94CC-D013E85D2F79",
function(result){
console.log(result);},
true,
context
);
в схему корректно не выгружается кириллица, а поскольку в SysAdminUnitType одна только "Функциональная роль" названа кириллицей.
То после импорта схемы посмотрите в исходник, там где "кракозебры" замените на "Функциональная роль"
Будет время, обновлю MD-корректный
Получилось запустить, но думаю стоит добавить полный код схемы с примером как его использовать. это многим поможет. дело в том, что этот код будут использовать только те кто начинает, им как раз нужна полная инф.
создала у себя миксин, но без этого UserUtilsMixinResources, а также изменив названия миксина в 3 местах. когда его подключаю в своем клиентском модуле, выходит ошибка.
Есть какие-то особенности при этого подключении миксина?