Вопрос

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

Имеется следующая проблема: Возникают различные ошибки при установке пакетов скачанных с marketplace. Устанавливаю стандартным способом, через интерфейс установки приложений в BPM. Например, установка валится на проверке зависимостей устанавливаемого пакета от пакетов в БД, или при выполнении sql скриптов установки справочных значений,  и т.д..

Вопрос: каким образом можно разобрать(распаковать) скачанный с marketplace пакет(приложение) на составляющие,  что-то поправить в нем и собрать обратно для загрузки на свой стенд BPM? Может есть инструкция(на академии не нашел) ?

Спасибо!

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

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

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

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

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

Про marketplace понятно, что лучше обратиться к разработчику пакета. Но вопрос у меня в другом. Если например, стандартным способом выгрузить пакет из из системы, то он выгружается в архиве zip, а в нем архив gz, а в нем один файл. Вот вопрос - можно ли этот файл как-то открыть в VisualStudio например для редактирования?

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

Вот нашел, утилиту bpmcli

https://github.com/Advance-Technologies-Foundation/bpmcli  - может она умеет распаковывать пакеты?

Там упоминается команда:

Convert existing package to project

Convert package with name MyApp and MyIntegration, located in directory C:\Pkg

bpmcli convert -p C:\Pkg -n MyApp,MyIntegration

Convert all packages in directory C:\Pkg

bpmcli convert -p C:\Pkg

Её код — в файле PackageConverter.cs 

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

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

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

Всем привет в документации есть пример с добавление нового контакта по средствам веб запроса. Сделал все работает. Щас пытаюсь записать лид, но получаю:"Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.". Подскажите что я делаю не так?

В тесте пытаюсь записать лид с одним заполненным полем(Название контрагента

Мой код:

public static void insertData()
        {
            Console.WriteLine("Попытка создать лид");

            // Экземпляр класса запроса.
            var insertQuery = new InsertQuery()
            {
                // Название корневой схемы.
                RootSchemaName = "Lead",
                // Коллекция добавляемых значений колонок.
                ColumnValues = new ColumnValues()
            };

            var columnExpressionName = new ColumnExpression
            {
                // Тип выражения запроса к схеме объекта — параметр.
                ExpressionType = EntitySchemaQueryExpressionType.Parameter,
                // Параметр выражения запроса.
                Parameter = new Parameter
                {
                    // Значение параметра.
                    Value = "ЛИД C САЙТА",
                    // Тип данных параметра — строка.
                    DataValueType = DataValueType.Text
                }
            };


          

            // Инициализация коллекции колонок запроса.
            insertQuery.ColumnValues.Items = new Dictionary<string, ColumnExpression>();
            // Добавление выражений запроса в коллекцию добавляемых колонок.
            // Колонка [Название контрагента].
            insertQuery.ColumnValues.Items.Add("Account", columnExpressionName);
           


            // Сериализация экземпляра класса запроса на добавление в JSON-строку.
            var json = new JavaScriptSerializer().Serialize(insertQuery);

            // Преобразование строки JSON-объекта в массив байтов.
            byte[] jsonArray = Encoding.UTF8.GetBytes(json);
            // Создание экземпляра HTTP-запроса.
            var insertRequest = HttpWebRequest.Create(insertQueryUri) as HttpWebRequest;
            // Определение метода запроса.
            insertRequest.Method = "POST";
            // Определение типа содержимого запроса.
            insertRequest.ContentType = "application/json";
            // Добавление полученных ранее аутентификационных cookie в запрос на получение данных.
            insertRequest.CookieContainer = AuthCookie;
            // Установить длину содержимого запроса.
            insertRequest.ContentLength = jsonArray.Length;

            // Добавление CSRF-токена в заголовок запроса.
            CookieCollection cookieCollection = AuthCookie.GetCookies(new Uri(authServiceUri));
            string csrfToken = cookieCollection["BPMCSRF"].Value;
            insertRequest.Headers.Add("BPMCSRF", csrfToken);

            // Помещение в содержимое запроса JSON-объекта.
            using (var requestStream = insertRequest.GetRequestStream())
            {
                requestStream.Write(jsonArray, 0, jsonArray.Length);
            }

          
          
          // Выполнение HTTP-запроса и получение ответа от сервера.
          using (var response = (HttpWebResponse)insertRequest.GetResponse())
          {
              // Вывод ответа в консоль.
              using (StreamReader reader = new StreamReader(response.GetResponseStream()))
              {
                  Console.WriteLine("JSON ответ от сервера");
                  Console.WriteLine(reader.ReadToEnd());
              }
          }


        }

 

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

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

Добрый день.

В таких случаях проще всего сравнить запросы через Fiffler(тогда станет ясно что забыли). Пример работы можно посмотреть - https://academy.terrasoft.ua/documents/technic-sdk/7-12/vypolnenie-zapr…

Короче, проблема было в том что в карточке лида были обязательные поля. Но конечно забавно возвращать 500ю ошибку 

VladKapitanchyk,

Спасибо

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

Добрый день!

На маркетплэйсе в данный момент существует только одно решение по интеграции скриптов телефонных продаж в CRM (коннектор скриптдизайнер).

Скажите пожалуйста, быть может кто-то пробовал реализовывать скрипты продаж своими способами (может даже внутренними средствами bpm: через бизнес-процессы)?

Может есть другие интеграции скриптов, помимо решения , представленного на маркетплэйс?

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

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

Здравствуйте, Александр!

Для решения вашей бизнес цели Вы можете использовать базовый функционал bpm'online, например, создать бизнес процесс, который будет запускаться по сигналу Звонок. После чего будет выполнять переход по созданным страницам (элемент "Автогенерируемая страница"). 

Альтернативный вариант, чтобы не нагружать систему по "сигналу Звонок" Вы можете назначить операторам организационную роль "Оператор КЦ", тогда на CTI - панели будут отображаться бизнес процессы которые можно запускать во время звонка. Указываются в справочнике "Действия cti панели".

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

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

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

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

День добрый! 

Скрипт по апдейту значений из продукта в заказе продуктов в счете (через график поставок и оплат) лежит в схеме OrderAmountHelper.

Удачи!

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

Необходимо установить валидацию на заполнения полей детали средства связи тип телефон
validateField: function(value) {
var invalidMessage = "";
var communicationType = this.get("CommunicationType");
if (communicationType) {
if (CommunicationUtils.isEmailType(communicationType.value) && !Ext.isEmpty(value) &&
!EmailHelper.isEmailAddress(value)) {
invalidMessage = resources.localizableStrings.WrongEmailFormat;
} else if (CommunicationUtils.isPhoneType(communicationType.value) &&
!this.isPhoneNumber(value)) {
invalidMessage = resources.localizableStrings.WrongPhoneFormat;
} else if (CommunicationUtils.isSkypeType(communicationType.value) && !Ext.isEmpty(value) &&
!this.isSkypeAddress(value)) {
invalidMessage = resources.localizableStrings.WrongSkypeFormat;
}
}
return {
fullInvalidMessage: invalidMessage,
invalidMessage: invalidMessage
};
},

это метод из модуля BaseCommunicationViewModel, переопределил этот метод в замещающей странице, но никак изменений на странице контактов не происходит:)

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

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

так же есть еще метод isPhoneNumber: function(value) {
var phonePattern = /^[^'|^`]*$/;
return phonePattern.test(value);
},

Евгений, добрый день.

Насколько я понимаю, Вы замещали ViewModel, что в принципе не есть хорошей практикой, да и если это и делать, необходимо полностью переносить код из базовой реализации. Рекомендую Вам создать замещающую схему для самой детали, и в:
this.addColumnValidator("Number", newItem.validateField, newItem);
и вместо validateField вызывать свою реализацию.

"Мотков Илья" написал:

Евгений, добрый день.

Насколько я понимаю, Вы замещали ViewModel, что в принципе не есть хорошей практикой, да и если это и делать, необходимо полностью переносить код из базовой реализации. Рекомендую Вам создать замещающую схему для самой детали, и в:
this.addColumnValidator("Number", newItem.validateField, newItem);
и вместо validateField вызывать свою реализацию.


спасибо за совет:)

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

Необходимо что бы для объекта орг структуры скрывалась вкладки с деталями на странице редактирования. исходный код замещающей страницы позволяет скрыть и добавить вкладку, но при сохранении консоль выдает ошибку :
define("SysAdminUnitPageV2", ["ConfigurationConstants"],
function() {
return {
entitySchemaName: "SysAdminUnit",
attributes: {
"ITShowDetails": {

"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"dependencies": [
{
"columns": ["ITShowDetails"],
"methodName": "showRegionsSalesAreas"

}
]

}

},
details: /**SCHEMA_DETAILS*/{

"ITRegionInOrgStructureDetail": {
"schemaName": "ITRegionInOrgStructureDetail",
"entitySchemaName": "ITRegionInOrgStructure",
"filter": {
"detailColumn": "ITSysAdminUnit",
"masterColumn": "Id"

}

}
}/**SCHEMA_DETAILS*/,
methods: {
onEntityInitialized: function() {
this.callParent(arguments);
this.showRegionsSalesAreas();
},
showRegionsSalesAreas: function() {

var showDetail = this.get("ITShowDetails");
var tabsCollection = this.get("TabsCollection");
var selectTab = tabsCollection.contains("ITRegionsSalesAreas") ?
tabsCollection.get("ITRegionsSalesAreas"):false;
if (showDetail === true && !selectTab) {
tabsCollection.insert(5, "ITRegionsSalesAreas", this.selectTab);

} else if (showDetail === false &&
selectTab) {
this.selectTab = selectTab;
tabsCollection.removeByKey("ITRegionsSalesAreas");

}
this.callParent(arguments);
}
},
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"parentName": "Tabs",
"propertyName": "tabs",
"index": 5,
"name": "ITRegionsSalesAreas",
"values": {
"caption": {"bindTo": "Resources.Strings.RegionsSalesAreasCaption"},
"items": []
}
},
{
"operation": "insert",
"name": "ITRegionInOrgStructureDetail",
"values": {
"itemType": 2,
"markerValue": "added-detail"

},
"parentName": "ITRegionsSalesAreas",
"propertyName": "items",
"index": 0

},
{
"operation": "insert",
"parentName": "Header",
"propertyName": "items",
"name": "ITShowDetails",
"values": {
"layout": {"column": 0, "row": 2, "colSpan": 12}
}

},
{
"operation": "insert",
"parentName": "Header",
"propertyName": "items",
"name": "SysAdminUnitTypeValue",
"values": {
"layout": {"column": 12, "row": 2, "colSpan": 12}
}

}
]/**SCHEMA_DIFF*/

};

});

Скрывает вкладки и добавляет, но при сохранении выдает ошибку в консоль:
less-parser.js:4151 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
xhr @ less-parser.js:4151
loadStyleSheet @ less-parser.js:4043
loadStyleSheets @ less-parser.js:3935
less.refresh @ less-parser.js:3894
(anonymous) @ less-parser.js:3910
(anonymous) @ less-parser.js:4305
less-parser.js:4199 less: parsed http://localhost:82/core/83ba267f0b2f5663dc71a6f8341355dd/combined/all-c... successfully.
less-parser.js:4199 less: css for http://localhost:82/core/83ba267f0b2f5663dc71a6f8341355dd/combined/all-c... generated in 71ms
less-parser.js:4199 less: css generated in 71ms
4all-combined.js:578 Колонка Id не объявлена в ViewModel элемента меню
log @ all-combined.js:578
getMenuItemConfig @ all-combined.js:1519
onAddItem @ all-combined.js:1518
(anonymous) @ all-combined.js:1518
each @ all-combined.js:1
each @ all-combined.js:680
onCollectionDataLoaded @ all-combined.js:1518
setControlPropertyValue @ all-combined.js:526
setControlInitialValue @ all-combined.js:525
(anonymous) @ all-combined.js:522
Terrasoft.utils.array.each @ all-combined.js:231
bind @ all-combined.js:522
bind @ all-combined.js:1105
callParent @ all-combined.js:1
bind @ all-combined.js:1516
bindMenu @ all-combined.js:1526
bind @ all-combined.js:1549
(anonymous) @ all-combined.js:1127
each @ all-combined.js:1
bindItems @ all-combined.js:1127
bind @ all-combined.js:1127
generate @ ConfigurationBootstrap.js:5596
render @ ConfigurationBootstrap.js:5558
safeExecute @ core.js:758
renderModule @ core.js:92
renderChainModule @ core.js:138
processModule @ core.js:145
(anonymous) @ core.js:237
execCb @ require.js:1693
check @ require.js:881
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1457
4all-combined.js:578 Колонка Id не объявлена в ViewModel элемента меню
log @ all-combined.js:578
getMenuItemConfig @ all-combined.js:1519
onAddItem @ all-combined.js:1518
(anonymous) @ all-combined.js:1518
each @ all-combined.js:1
each @ all-combined.js:680
onCollectionDataLoaded @ all-combined.js:1518
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
loadAll @ all-combined.js:681
(anonymous) @ ConfigurationBootstrap.js:5008
parseResponse @ all-combined.js:966
callParent @ all-combined.js:1
parseResponse @ all-combined.js:983
(anonymous) @ all-combined.js:966
callback @ all-combined.js:954
a.callback @ all-combined.js:941
callback @ all-combined.js:1
onComplete @ all-combined.js:1
onStateChange @ all-combined.js:1
(anonymous) @ all-combined.js:1
all-combined.js:578 Колонка Id не объявлена в ViewModel элемента меню
log @ all-combined.js:578
getMenuItemConfig @ all-combined.js:1519
onAddItem @ all-combined.js:1518
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
onCollectionAdd @ all-combined.js:677
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:684
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:713
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
doInsert @ all-combined.js:1
insert @ all-combined.js:1
add @ all-combined.js:1
add @ all-combined.js:679
addItem @ all-combined.js:685
loadProfileButtonMenu @ MainHeaderSchema.js:220
onRender @ MainHeaderSchema.js:177
render @ ConfigurationBootstrap.js:22365
callParent @ all-combined.js:1
render @ ConfigurationBootstrap.js:23464
safeExecute @ core.js:758
renderModule @ core.js:92
renderChainModule @ core.js:138
(anonymous) @ ConfigurationBootstrap.js:22294
callback @ all-combined.js:1
(anonymous) @ MainHeaderSchema.js:168
(anonymous) @ ConfigurationBootstrap.js:17229
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17784
querySysSettingsItem @ all-combined.js:948
initGoogleTagManager @ ConfigurationBootstrap.js:17782
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17264
(anonymous) @ ConfigurationBootstrap.js:17274
(anonymous) @ all-combined.js:477
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1011
(anonymous) @ require.js:134
requestObject.onreadystatechange @ profile.js:39
all-combined.js:578 Колонка Id не объявлена в ViewModel элемента меню
log @ all-combined.js:578
getMenuItemConfig @ all-combined.js:1519
onAddItem @ all-combined.js:1518
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
onCollectionAdd @ all-combined.js:677
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:684
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:713
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
doInsert @ all-combined.js:1
insert @ all-combined.js:1
add @ all-combined.js:1
add @ all-combined.js:679
addItem @ all-combined.js:685
loadProfileButtonMenu @ MainHeaderSchema.js:233
onRender @ MainHeaderSchema.js:177
render @ ConfigurationBootstrap.js:22365
callParent @ all-combined.js:1
render @ ConfigurationBootstrap.js:23464
safeExecute @ core.js:758
renderModule @ core.js:92
renderChainModule @ core.js:138
(anonymous) @ ConfigurationBootstrap.js:22294
callback @ all-combined.js:1
(anonymous) @ MainHeaderSchema.js:168
(anonymous) @ ConfigurationBootstrap.js:17229
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17784
querySysSettingsItem @ all-combined.js:948
initGoogleTagManager @ ConfigurationBootstrap.js:17782
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17264
(anonymous) @ ConfigurationBootstrap.js:17274
(anonymous) @ all-combined.js:477
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1011
(anonymous) @ require.js:134
requestObject.onreadystatechange @ profile.js:39
all-combined.js:578 Колонка Id не объявлена в ViewModel элемента меню
log @ all-combined.js:578
getMenuItemConfig @ all-combined.js:1519
onAddItem @ all-combined.js:1518
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
onCollectionAdd @ all-combined.js:677
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:684
callParent @ all-combined.js:1
onCollectionAdd @ all-combined.js:713
fire @ all-combined.js:1
continueFireEvent @ all-combined.js:1
fireEventArgs @ all-combined.js:1
fireEvent @ all-combined.js:1
doInsert @ all-combined.js:1
insert @ all-combined.js:1
add @ all-combined.js:1
add @ all-combined.js:679
addItem @ all-combined.js:685
loadProfileButtonMenu @ MainHeaderSchema.js:239
onRender @ MainHeaderSchema.js:177
render @ ConfigurationBootstrap.js:22365
callParent @ all-combined.js:1
render @ ConfigurationBootstrap.js:23464
safeExecute @ core.js:758
renderModule @ core.js:92
renderChainModule @ core.js:138
(anonymous) @ ConfigurationBootstrap.js:22294
callback @ all-combined.js:1
(anonymous) @ MainHeaderSchema.js:168
(anonymous) @ ConfigurationBootstrap.js:17229
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17784
querySysSettingsItem @ all-combined.js:948
initGoogleTagManager @ ConfigurationBootstrap.js:17782
f @ all-combined.js:470
(anonymous) @ ConfigurationBootstrap.js:17264
(anonymous) @ ConfigurationBootstrap.js:17274
(anonymous) @ all-combined.js:477
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1011
(anonymous) @ require.js:134
requestObject.onreadystatechange @ profile.js:39
core.js:579 Элемент SectionSummaryContainer не найден
writeErrorMessage @ core.js:579
injectedSandbox.loadModule @ core.js:513
loadSummaryModule @ SectionBundleModule.js:69086
loadSummary @ SectionBundleModule.js:69081
onRender @ SectionBundleModule.js:68813
callParent @ all-combined.js:1
onRender @ SysAdminUnitSectionV2.js:748
render @ ConfigurationBootstrap.js:22365
safeExecute @ core.js:758
renderModule @ core.js:92
renderChainModule @ core.js:138
(anonymous) @ ConfigurationBootstrap.js:22294
(anonymous) @ SectionBundleModule.js:68894
f @ all-combined.js:470
(anonymous) @ SectionBundleModule.js:68889
f @ all-combined.js:470
callback @ all-combined.js:1
(anonymous) @ SectionBundleModule.js:71423
(anonymous) @ all-combined.js:477
execCb @ require.js:1693
check @ require.js:881
(anonymous) @ require.js:1136
(anonymous) @ require.js:134
(anonymous) @ require.js:1186
each @ require.js:59
emit @ require.js:1185
check @ require.js:936
enable @ require.js:1173
init @ require.js:786
(anonymous) @ require.js:1011
(anonymous) @ require.js:134
requestObject.onreadystatechange @ profile.js:39
all-combined.js:578 Object {connectionConfig: "{"debugMode":false,"disableCallCentre":false,"isAu…se,"useNotificationSound":false,"useVideo":false}", msgServerAddress: "", assemblyName: "", success: true}
all-combined.js:1 Uncaught TypeError: Cannot read property 'apply' of undefined
at i.callParent (all-combined.js:1)
at i.showRegionsSalesAreas (SysAdminUnitPageV2.js:739)
at i.onEntityInitialized (SysAdminUnitPageV2.js:721)
at i. (SectionBundleModule.js:25284)
at f (all-combined.js:470)
at i. (SectionBundleModule.js:25269)
at i. (all-combined.js:1013)
at i.parseGetEntityResponse (all-combined.js:980)
at i. (all-combined.js:981)
at i.callback (all-combined.js:954)
callParent @ all-combined.js:1
showRegionsSalesAreas @ SysAdminUnitPageV2.js:739
onEntityInitialized @ SysAdminUnitPageV2.js:721
(anonymous) @ SectionBundleModule.js:25284
f @ all-combined.js:470
(anonymous) @ SectionBundleModule.js:25269
(anonymous) @ all-combined.js:1013
parseGetEntityResponse @ all-combined.js:980
(anonymous) @ all-combined.js:981
callback @ all-combined.js:954
a.callback @ all-combined.js:941
callback @ all-combined.js:1
onComplete @ all-combined.js:1
onStateChange @ all-combined.js:1
(anonymous) @ all-combined.js:1
core.js:579 user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...
line: 1
column: 44656
message: Uncaught TypeError: Cannot read property 'apply' of undefined
date: Thu Jun 08 2017 11:52:09 GMT+0300 (RTZ 2 (зима))
stack: TypeError: Cannot read property 'apply' of undefined
at i.callParent (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)
at i.showRegionsSalesAreas (http://localhost:82/0/configuration/b1e2814cad734eab60c931de3bb88cc7ru-R...)
at i.onEntityInitialized (http://localhost:82/0/configuration/b1e2814cad734eab60c931de3bb88cc7ru-R...)
at i. (http://localhost:82/0/configuration/db72f11f26ed19bd975b81f534ca9ee9/Sec...)
at f (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)
at i. (http://localhost:82/0/configuration/db72f11f26ed19bd975b81f534ca9ee9/Sec...)
at i. (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)
at i.parseGetEntityResponse (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)
at i. (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)
at i.callback (http://localhost:82/core/9081d8eb154840ddc3ec408c11264ff4/combined/all-c...)

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

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

А если

entitySchemaName: "SysAdminUnit",

убрать, будет работать?

нет, потому что лог поле в схеме объекта SysAdminUnit

Тогда беда. Насколько я помню конфигурация вообще напрямую не работает с SysAdminUnit. Даже UserPageV2 работает через вьюху. Просто так сохранить в SysAdminUnit думаю не получится.

Upd. Ну да, this.entitySchemaName="VwSysAdminUnit" по-умолчанию. В SysAdminUnitRoleBasePageV2 есть метод saveEntity, который черпает столбцы для сохранения из вьюхи и отправляет их в сервис:

var config = {
	serviceName: "AdministrationService",
	methodName: "SaveRole",
	data: dataSend
};

Как минимум надо удалять entitySchemaName="SysAdminUnit" из вашей схемы, добавлять столбец во вью, альтерить sql-командой и уже дальше смотреть, работает или нет

Спасибо, подумаю над этим.

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

Доброй день!
Может кто подскажет.
Как увеличить количество выводимых значений в поле lookup data control в карточке клиента?
Сейчас их 40.

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

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

Это значение в 40 записей реестра задаётся для всей системы.
Как его менять, см. тут.

Спасибо, попробовал, значение ставиться для всех типов полей, кроме lookup data control с выставленной галочкой "выпадающий список". Вот его мне и нужно изменить. Где эта галочка и стоит.

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

Спасибо.

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

Добрый день.
На сервис sq_OpportunityLog добавил доп условия в WHERE (чтоб деталь логирования показывала не все записи) принудительные галки на условие поставил, чтоб всегда были включены. Но программа игнорирует мои доп условия и использует условия, те что заложенны в типовом варианте.
Не понятно, почему не работает. По трейсу в Провайлере запрос идет в туже таблицу tbl_OpportunityLog

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

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

Сервис «sq_Opportunity» относится к основной таблице раздела «tbl_Opportunity», а не к таблице «tbl_OpportunityLog».

Это я описался, я поправил именно сервис sq_OpportunityLog

Будьте внимательнее.:wink:

поправил то я ошибку в описании (на форуме) а в программе у меня правильно был доработан sq_OpportunityLog. но не работает
Вопрос остаеться открытым(((

Алексей, а как именно он был «правильно доработан». Может, дело в этом?

Добавил параметры и уcловия к запросу, вот так он выглядит если смотреть на просмотр (в конфигураторе). :

SELECT
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[tbl_OpportunityLog].[CreatedByID] AS [CreatedByID],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[CustomerID] AS [CustomerID],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[ChannelID] AS [ChannelID],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[StageID] AS [StageID],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[TypeID] AS [TypeID],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[OwnerID] AS [OwnerID],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[ContactID] AS [ContactID],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[AlliasID] AS [AlliasID],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName],
[tbl_OpportunityLog].[AlliasSHID] AS [AlliasSHID]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = :RecordID AND
(EXISTS
(SELECT
[tbl_ContactDepartment].[ID] AS [ID]
FROM
[dbo].[tbl_ContactDepartment] AS [tbl_ContactDepartment]
WHERE([tbl_ContactDepartment].[ContactID] = '{251FB9AC-C17E-4DF7-A0CB-D591FDB97462}' AND
[tbl_ContactDepartment].[DepartmentID] =
(SELECT TOP 1
[tbl_Opportunity].[ChannelID] AS [ChannelID]
FROM
[dbo].[tbl_Opportunity] AS [tbl_Opportunity]
WHERE([tbl_Opportunity].[ID] = :RecordID)))) OR
'{EAB3D8EC-5400-4A26-8634-ACA9203EEB8E}' IN
(SELECT
[tbl_AdminUnit].[ID] AS [ID]
FROM
[dbo].[tbl_AdminUnit] AS [tbl_AdminUnit]
WHERE([tbl_AdminUnit].[UserIsAdmin] = :Is AND
[tbl_AdminUnit].[UserIsEnabled] = :Is))))

ORDER BY
4 DESC

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

А с правами доступа всё в порядке?

Да вроде норм, что под админом что просто под пользователем трейс ведет себя одинаково странно: при первом переходе на вкладку детали журнал изменения:
1) отрабатывает мой запрос (который я поправил),
2) а следом идет старый запрос:
exec sp_executesql N'SELECT TOP 40
[tbl_OpportunityLog].[ID] AS [ID],
[tbl_OpportunityLog].[RecordID] AS [RecordID],
[tbl_OpportunityLog].[ActionID] AS [ActionID],
[tbl_OpportunityLog].[CreatedOn] AS [CreatedOn],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_OpportunityLog].[CustomerName] AS [CustomerName],
[tbl_OpportunityLog].[ChannelName] AS [ChannelName],
[tbl_OpportunityLog].[StageStage] AS [StageStage],
[tbl_OpportunityLog].[TypeOpportunityType] AS [TypeOpportunityType],
[tbl_OpportunityLog].[OwnerName] AS [OwnerName],
[tbl_OpportunityLog].[ContactName] AS [ContactName],
[tbl_OpportunityLog].[Revenue] AS [Revenue],
[tbl_OpportunityLog].[EstimatedRevenue] AS [EstimatedRevenue],
[tbl_OpportunityLog].[EstimatedStartDate] AS [EstimatedStartDate],
[tbl_OpportunityLog].[EstimatedCloseDate] AS [EstimatedCloseDate],
[tbl_OpportunityLog].[DateConfirm] AS [DateConfirm],
[tbl_OpportunityLog].[AlliasName] AS [AlliasName],
[tbl_OpportunityLog].[IsTender] AS [IsTender],
[tbl_OpportunityLog].[EstimatedRevenueTo] AS [EstimatedRevenueTo],
[tbl_OpportunityLog].[AlliasSHName] AS [AlliasSHName]
FROM
[dbo].[tbl_OpportunityLog] AS [tbl_OpportunityLog]
LEFT OUTER JOIN
[dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_OpportunityLog].[CreatedByID]
WHERE([tbl_OpportunityLog].[RecordID] = @P1)
ORDER BY
4 DESC',N'@P1 varchar(8000)','{073780C3-F023-4CC9-B3A6-00036BFA6A30}'

, и если перейти к следующей записи, то уже только 2-ой запрос работает.

Функция RefreshChangesLogDetail в scr_BaseWorkspace вызывает RefreshDetailData из scr_DB, а та запускает функцию RefreshDetailDataByParentID.

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, false);

А в ней происходит отключение всех фильтров при помощи:

EnableDatasetFilters(ChildDataset, false);

Чтобы фильтры не отключались, нужно вызывать эту функцию RefreshDetailDataByParentID с последним параметром DoNotDisableAllFilters, равным true.

Вы можете внести доработку, чтобы эта функция запускалась со включенными фильтрами конкретно для нужной детали или для всех, в зависимости от потребностей. Понять внутри функции, что за деталь, можно по ChildDataset.SelectQuery.Caption равному "sq_OpportunityLog".
Получится вроде:

RefreshDetailDataByParentID(ParentFieldValue, ChildDataset, ChildFilterName, (ChildDataset.SelectQuery.Caption == 'sq_OpportunityLog'));

Спасибо, теперь все получилось.

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

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

На конфигурации "A" - разрабатывался пакет в его составе предусмотрено несколько SQL-скриптов.
Они были созданы с Типом установки "После сохранения пакета".
Пакет был успешно перенесен в другую конфигурацию ("B") через SVN, т.е. установлен там из репозитория в котором из конфигурации "A" он был зафиксирован.

После установки пакета в конфигурацию "B",
И выполнения пункта действий конфигуратора "Установить для требующих обновления" - скрипты были выполнены и с них снялся признак "Требует установки в БД".

А вот в искомой конфигурации "А" (где разрабатывался пакет и откуда он фиксировался в SVN) после "Установки этих скриптов" - выполнении действия конфигуратора "Установить выбранные элементы" - признак "Требует установки в БД" - не снимается,
Что приводит к их постоянному повторному выполнению, когда кто либо в конфигурации использует "Установить для требующих установки".
Можно ли, и если да то как снять этот признак принудительно ?

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

PS: 3 доступных значения "Тип установки",
не ясно чем они отличаются, когда и при каких условиях выполняются.
(в документации всего 2 упоминания на 97-й странице, ничего никак не разъясняющие)
Не очень понятно, что например подразумевается под типом установки "После сохранения пакета".
О каком "сохранении" идет речь ?
Т.е. они выполняются каждый раз когда пакет - что?
Фиксируется в репозитории или устанавливается из него, или при каждом обновлении пакета.

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

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

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

Можно ли, и если да то как снять этот признак принудительно? - Да можно, вот простой скрипт:

update SysPackageSqlScript set NeedInstall = 0 where name = ''

Т.е. они выполняются каждый раз когда пакет - что? - когда пакет сохраняется в БД

Если будете переносить пакеты при помощи WorkspaceConsole, Вы сможете увидеть в какой момент времни происходит выполнение sql скриптов.

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

Добрый день !
Подскажите пожалуйста как посмотреть стек вызова функции при отладке ?

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

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

Если используете для отладки Visual Studio, там есть окно «Call Stack». Если оно не открыто, нажмите Ctrl+Alt+C.

спасибо

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