Новое окно

Доброго времени суток!

Существует задача:

Открыть новое окно при нажатии кнопки окна инцидента,
при этом передать данные из карточки инцидента в новое окно и используя их заполнить поля.

Как эти данные передать, и используя их, заполнить поля?

Нравится

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

Добрый день,
то что Вам нужно, описано тут:

http://www.community.terrasoft.ru/blogs/9079

и тут:

http://www.community.terrasoft.ru/forum/topic/9208

Дмитрий,

Форум разработчиков Terrasoft 3.X

что-то типа этого:

function CreateContract() {
	var EditWindowUSI = 'wnd_ContractEdit';
	var Attributes = GetNewDictionary();
	var OpportunityID = BaseWorkspace.GridDataset.Values('ID');
	var CurrentDate = new Date(System.Now());
	Attributes.Add('RecordID', GUID_NULL);		
	Attributes.Add('NotifyObject', Self);
	var DefaultValues = GetNewDictionary();	
	DefaultValues.Add('OpportunityID', OpportunityID);
	var Dataset = BaseWorkspace.GridDataset;
	var CustomerID = GetFieldValueFromDisabledField(Dataset, 'CustomerID');
	DefaultValues.Add('CustomerID', CustomerID);
	var ContactID = GetFieldValueFromDisabledField(Dataset, 'ContactID');
	DefaultValues.Add('ContactID', ContactID);
	DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
	DefaultValues.Add('StartDate', CurrentDate.getVarDate());	
	DefaultValues.Add('DueDate', CurrentDate.getVarDate());	
	Attributes('IsCreatedByOpportunityID') = OpportunityID;
	var CampaignID = GetFieldValueFromDisabledField(Dataset, 'CampaignID');
	DefaultValues.Add('CampaignID', CampaignID);
	var ProjectID = GetFieldValueFromDisabledField(Dataset, 'ProjectID');
	DefaultValues.Add('ProjectID', ProjectID);
	ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
}
Attributes.Add('RecordID', GUID_NULL)

означает что запись добавляется, если поставите конкретный ИД - будет изменение существующей

Спасибо, буду разбираться.

Коллеги, за первый пост извините - не заметил название ветки. Александр, огромное спасибо что поправили меня.
Дмитрий - спасибо за публикацию решения.

Я открываю новое окно следующим способом:
var ClauseWindow = Services.GetNewItemByUSI('wnd_New');
ClauseWindow.Attributes('IncidentID') = '{Incident_ID}';
ClauseWindow.Prepare();
ClauseWindow.Show();

где передается Incident_ID, и на основе его открывается датасет,
и при событии OnPrepare в скрипте нового окна

(Window) {
dlData.Dataset.Open();
}

но обработка длится минуты 2-3, после этого все же выводит запись, которая и передавалась.
Как я понимаю тут надо применить фильтр по полю Incident_ID?
Или в чем может быть проблема?

"zod13" написал:Как я понимаю тут надо применить фильтр по полю Incident_ID?

да, конечно

если у вас окно на базе wnd_BaseDBEdit - напишете в OnPrepare

wnd_BaseDBEditOnPrepare(Window);

А разве id открываемой записи просто не должна быть в Attributes('RecordID')?

Согласен с Александром,
лучше всего использовать функцию:

ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);

где EditWindowUSI - срока, с названием сервиса окна, которое необходимо открыть ('wnd_IncidentEdit');
Attributes:

var Attributes = new Dictionaty();
Attributes('RecordID') = '{some_id}'; //если нужно открыть существующую запись. если новую - вообще не задаем атрибутов

DefaultValues:

var DefaultValues = new Dictionary();
DefaultValues('Name') = 'name'; //значения по умолчанию для полей датасета открываемой карточки

В таком варианте Вам не нужно ничего писать на OnPrepare() открываемой карточки и пр.

Итого, если нужно создать новую запись, получим три строки кода:

var DefaultValues = new Dictionary();
var Attributes = new Dictionaty();
ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);

Хорошо,
когда я делаю способом описанным выше, у меня все равно поля датасета остаются не активными,
и думаю причина этому не открытый датасет, но про попытке его открыть через событие нового окна OnPrepare() , история та же, просто зависает:

var DefaultValues = new GetNewDictionary();   	 
var Attributes = new GetNewDictionary();
	Attributes('ID') = Dataset.Values('ID');
ShowEditWindowEx('wnd_New', Attributes, DefaultValues); 

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

Два вопроса:
1) Что написано на OnPrepare нового окна?
Думаю надо, то что описал Дмитрий, поставить wnd_BaseDBEditOnPrepare(Window);
2) Почему Attributes('ID')? Если в 4-ех комментариях стоит Attributes('RecordID');

И окна лучше наследовать от wnd_BaseDBEdit.

Спасибо всем! Разобрался!

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