новое окно
Скрипты
Разработка

Новое окно

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

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

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

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

Нравится

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

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

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

и тут:

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

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

что-то типа этого:
[javascript]
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);
}
[/javascript]

[javascript]
Attributes.Add('RecordID', GUID_NULL)
[/javascript]
означает что запись добавляется, если поставите конкретный ИД - будет изменение существующей

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

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

Я открываю новое окно следующим способом:
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
[javascript]
wnd_BaseDBEditOnPrepare(Window);
[/javascript]

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

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

[javascript]
ShowEditWindowEx(EditWindowUSI, Attributes, DefaultValues);
[/javascript]

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

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

DefaultValues:

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

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

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

[javascript]
var DefaultValues = new Dictionary();
var Attributes = new Dictionaty();
ShowEditWindowEx('wnd_IncidentEdit', Attributes, DefaultValues);
[/javascript]

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

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

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

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

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

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

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