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