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

Как можно на детали с реестром добавить кликабельную картинку, которая подгружается по внешнему URL(хранящемся в поле объекта детали), при клике на которую, она бы загружается в полном размере?

Версия sales enterprise 7.9.1.3284

Нравится

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

Здравствуйте, таких базовых средств в bpm'online нет, но, обладая навыками разработчика вы можете попробовать сделать это самостоятельно.
Вот это может вам пригодится как пример:
https://www.w3schools.com/howto/howto_css_modal_images.asp
И если вы захотите сделать это как собственный контрол, то, вот эта инструкция так же будет полезной: svoy_kontrol__generator__diff.doc

Крапивницкий Николай,

Добрый день! Получилось реализовать задачу? 

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

Здравствуйте.
Есть таблица домов, в ней связь по DomkomID -> ID с таблицей tbl_Domkom.
Т.е. на одного домкома может быть несколько домов.
И у домкомов, и у домов есть свои разделы.
В разделе домкомов есть деталь "Дома" (дома выбираются из tbl_Houses по DomkomID). Проблема в том, что при добавлении дома в детали, нужно не добавлять новый дом, а находить существующий и прописывать в нём DomkomID.
Как реализовать подобный функционал?
Спасибо.

Нравится

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

Здравствуйте Ринат,
Подобную реализацию вы можете посмотреть в разделе [Инциденты], деталь [Связанные инциденты], обратите внимание на кнопку "Добавить связь"
1
Основная идея это вызывать окно выбора фунцией ShowSelectDataWindow и подвязывать уже существующие дома, если вы хотите делать Update поля DomkomID (таблица tbl_Houses) после выбора, можете создать сервис UpdateQuery в который передавать параметры для записи.

Если возникнут дополнительные вопросы, обращайтесь.

Алексей, спасибо, получилось.

Ниже пример решения. Может, кому пригодится.

Сервис HousesGridArea продублировал и изменил в нём обработчики событий:

function btnAddOnClick(Control) {
 
	var Dataset = GetSingleItemByCode('ds_TehCheck' /* датасет для wnd_SelectData */, 'HousesSearchGridArea');
	EnableDatasetFilters(Dataset, false);
 
	var SearchFieldNames = 'HouseAddress;DomkomID';
	var DisplayFieldNames = 'HouseAddress;Comment;DomkomID';
	var SearchFieldName = 'HouseAddress';
	var Tag = 'SelectHouse';
	var KeyFieldName = 'ID';
	var KeyValue = '';
	var SearchValue = '';
	var NotifyObject = Self;
	var IsReadOnly = false;
	ShowSelectDataWindow(Dataset, SearchFieldNames, DisplayFieldNames,
		KeyFieldName, KeyValue, SearchFieldName, SearchValue, NotifyObject,
		Tag, IsReadOnly);
}
 
function wnd_HousesGridAreaOnNotify(ScriptableService, Sender, Message, Data) {
	var SenderCode = ExtractUSICodeEx(Sender.USI);
	if ((Sender.Tag == 'SelectHouse') && (Message == MSG_OK)) {
	    var ParentItemID = Self.Attributes('ParentItemID');
	    var HouseID = Sender.Attributes('KeyValue');
		var Dataset = dlData.Dataset;
 
	    var HouseDomkomUpdateQuery = Services.GetNewItemByUSI('uq_HouseDomkom');
		HouseDomkomUpdateQuery.Parameters.ItemsByName('ID').Value = HouseID;
		HouseDomkomUpdateQuery.Parameters.ItemsByName('DomkomID').Value = ParentItemID;
	    HouseDomkomUpdateQuery.Execute()
 
	    RefreshDataset(Dataset);
		return;
	}
 
	wnd_BaseGridAreaOnNotify(ScriptableService, Sender, Message, Data);
}
 
function btnDeleteOnClick(Control) {
	var Dataset = dlData.Dataset;
	var HouseID = Dataset.Values('ID');
 
	var HouseDomkomDeleteQuery = Services.GetNewItemByUSI('uq_HouseDomkom');
	HouseDomkomDeleteQuery.Parameters.ItemsByName('ID').Value = HouseID;
	HouseDomkomDeleteQuery.Parameters.ItemsByName('DomkomID').Value = '';
	HouseDomkomDeleteQuery.Execute()
 
	RefreshDataset(Dataset);
}

И UpdateQuery в прикреплении (2 параметра, ID дома и ID домкома). При удалении DomkomID становится пустым, при изменении DomkomID берётся из wnd_SelectData.

Я правильно понял что вопрос закрыт ?

Да, закрыт.

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

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

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

Функцию вывода делал по "образу и подобию" OpenTaskGridAreaWindow в wnd_CallEditScript:

function OpenLSUslugiWindow(WindowGridAreaUSI, ParentItemID, ParentItemFieldName, WindowCaption) {
        if (IsEmptyGUID(ParentItemID)) {
                ShowWarningDialog('Для работы с подключениями значение поля ' +
                        'должно быть заполнено');
                return;
        }
        var TaskGridAreaWindow = GetSingleItemByCode(WindowGridAreaUSI, ParentItemFieldName + 'InCallEdit');
       
        TaskGridAreaWindow.Attributes('ParentItemID') = ParentItemID;
        TaskGridAreaWindow.Attributes('ParentItemFieldName') = ParentItemFieldName;
        TaskGridAreaWindow.WindowCaption = WindowCaption;
       
        var LSWindow = TaskGridAreaWindow.ComponentsByName('wndLSGridArea').Window;
        var LSDataset = LSWindow.ComponentsByName('dlData').Dataset;
               
        RefreshDetailDataByParentID(ParentItemID, Dataset, ParentItemFieldName);
       
        TaskGridAreaWindow.Prepare();
       
        var UslugiWindow = TaskGridAreaWindow.ComponentsByName('wndUslugiDetail').Window;
        var UslugiDataset = UslugiWindow.ComponentsByName('dlData').Dataset;
               
        var CurID = LSDataset.Values('ID');
       
        var Dataset = LSDataset;
       
        RefreshDetailDataByParentID(CurID, UslugiDataset, ParentItemFieldName);
       
        TaskGridAreaWindow.Show();
}

Данный код выдаёт "State" есть null и не является объектом, ошибка в (RefreshDetailDataByParentID), не передаётся dataset.
Если вручную не апдейтить wndUslugiDetail, оно вообще не инициализируется.

Может, есть какие-нибудь примеры?
Спасибо.

Нравится

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

Ринат, попробуйте изменить код следующим образом:

function OpenLSUslugiWindow(WindowGridAreaUSI, ParentItemID,
	ParentItemFieldName, WindowCaption) {   
	if (IsEmptyGUID(ParentItemID)) {
		ShowWarningDialog('Для работы с задачами значение поля ' +
			'должно быть заполнено');
		return;
	}
	var TaskGridAreaWindow = GetSingleItemByCode(WindowGridAreaUSI,
		ParentItemFieldName + 'InCallEdit');
	TaskGridAreaWindow.Attributes('ParentItemID') = ParentItemID;
	TaskGridAreaWindow.Attributes('ParentItemFieldName') = ParentItemFieldName;	
	TaskGridAreaWindow.WindowCaption = WindowCaption;
	var LSDataset = TaskGridAreaWindow.ComponentsByName('wndLSGridArea').Window.ComponentsByName('dlData').Dataset;
	RefreshDetailDataByParentID(ParentItemID, LSDataset, ParentItemFieldName);
	var UslugiDataset = TaskGridAreaWindow.ComponentsByName('wndUslugiDetail').Window.ComponentsByName('dlData').Dataset;
	EnableDatasetFilters(UslugiDataset, false);	
	RefreshDetailDataByParentID(LSDataset('LSID'), UslugiDataset, 'LSID');
	TaskGridAreaWindow.Prepare();
	TaskGridAreaWindow.Show();
}

Наталия, спасибо, сработало!

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