Доброго времени суток!
Существует задача:
Открыть новое окно при нажатии кнопки окна инцидента,
при этом передать данные из карточки инцидента в новое окно и используя их заполнить поля.
Как эти данные передать, и используя их, заполнить поля?
Нравится
что-то типа этого:
[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');