Добавление нового комментария (кнопки) в "Напоминаниях"

Здравствуйте!
Так как я не являюсь программистом и уровень моих знаний в языках программирования (JScript и другие) равен «0» :(, обращаюсь с вопросом/просьбой к Вам, уважаемые специалисты в данной области.

Версия программы: Terrasoft Service Desk 3.3.2.182
В стандартном окне «Напоминания» (wnd_Remindings), есть потребность добавить новую кнопку «Комментарий» (wnd_IncidentCommentEdit, wnd_TaskCommentEdit), с помощью которой сотрудник сможет, не отвлекаясь при переключении между окнами, добавлять соответствующие комментарии к напоминанию по инциденту или задаче.

Новую кнопку в окне добавил без трудностей, но проблема в том, что я не могу ее заставить правильно работать, так как мне этого нужно.
Пробивал найти подобный код в разных сервисах, но его я не нашел. Пробивал разные вариации построения этого кода под мою потребность, с разных сервисов (скриптов) так же без результатов.
В скрипте «scr_Remindings» указано, что окно открывается от типа объекта (Задача или Инцидент), если использовать кнопку «Открыть». Так же мне нужно, что бы от типа объекта открывался тот или иной комментарий.

Подскажите, пожалуйста, как можно реализовать такой функционал.
Буду Вам очень признателен за помощь.

P.S. Подскажите, пожалуйста, литературу для начинающих по JScript’y :).
Спасибо.

Нравится

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

Насколько я представляю, реализовать Вам вопрос необходимо следующим образом:

1. При нажатии на кнопку записать в переменную ID (инцидента или задачи).
2. Прописать открытие окна добавления комментариев.
3. После добавления текста в поле и нажатия на ОК провести фильтрацию датасета по ID.
4. Сделать пост на деталь комментариев записи, которая у нас есть после фильтрации.

"Гакало Игорь Александрович" написал:

Насколько я представляю, реализовать Вам вопрос необходимо следующим образом:

1. При нажатии на кнопку записать в переменную ID (инцидента или задачи).
2. Прописать открытие окна добавления комментариев.
3. После добавления текста в поле и нажатия на ОК провести фильтрацию датасета по ID.
4. Сделать пост на деталь комментариев записи, которая у нас есть после фильтрации.

Здравствуйте, Игорь!
Спасибо Вам за ответ, но могли бы Вы поподробнее описать или показать где в сервисах есть подобные коды?
К сожалению, моих знаний в программировании не достаточно для того чтобы выполнить Ваши рекомендации. :sad:
Спасибо.

Внесу небольшие уточнения и пояснения по описанному мной варианту.
Запись, которая находится в таблице напоминаний, имеет кроме ID, описания, времени создания, объекта напоминания и подобных полей еще такие полезные данные, как SubjectTypeID и SubjectID.

К примеру, Вы создали запись в разделе "Инциденты" и добавили к ней напоминание кому-либо.
В SubjectTypeID будут данные о том, что запись относиться к разделу инцидентов, а в SubjectID будет находиться ID записи инцидента, к которой было создано напоминание.

Итак. Появляется окошко напоминаний. Для текущей записи в окне напоминаний необходимо определить, к какому из разделов относиться данное напоминание. Такую проверку можно сделать по SubjectTypeID. По этому ID мы понимаем, что напоминание находиться в инцидентах.

Открыть окно добавления комментариев можно, к примеру, с помощью функции ShowEditWindowEx. Примеры ее использования в конфигурации есть.

Появляется окошко, вводится текст, нажимается ОК, происходит фильтрация датасета.
К примеру, ApplyDatasetFilter(IncidentDataset, 'ID', SubjectID, true);
Есть случаев использования такого фильтра в конфигурации :smile:

В теории, таким образом у нас есть все, чтобы найти необходимую запись, из окна напоминаний, к которой мы можем добавить комментарий.

Посмотрите, как реализовано добавление обычных напоминаний, к примеру, по установке "Напоминания ответственному" в карточке задачи. И подобным образом попробуйте добавить комментарий.

Роман, если по ходу реализации будут возникать вопросы, напишите.

Здравствуйте, Игорь!
Спасибо Вам за пояснения, но разобраться до конца с этой задачей я не сумел.

Раньше у меня кнопка была вообще не активна при нажатии, но сейчас, с помощью Ваших рекомендаций, у меня уже открывается окно «Комментарий», но:
1.Таких окон, как комментарий у меня сразу же 2.
2.При нажатии на кнопку комментарий, отображается окно добавления комментария (новая запись).
Окно остается (2 окна) и в нем можно даже прописать текст, а сохранить не удается так, как отсутствует «Автор».
3.Ошибок никаких нет.
Собственно на этом этапе я и застрял :sad:
Не пойму, как исправить ошибку с 2 окнами, которые открываются одновременно и как привязать к записи (к новому комментарию) автора.
Покажу Вам «кашу» (код, если его можно так назвать:smile:), может быть с него Вам будет более понятней где ошибка:

function OpenIncidentCommentEdit(Window) {
var Attributes = GetNewDictionary();
Attributes.Add('IsNew', true);
var DefaultValues = GetNewDictionary();	
ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
var RemindingsDataset = GetSingleItemByCode('ds_IncidentComment');
ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
var RemindingsDataset = GetSingleItemByCode('ds_TaskComment');
RemindingsDataset.Open();
	    if (!RemindingsDataset.IsEmptyPage) {
	        return;
	    }
ApplyDatasetFilter(IncidentCommentDataset, 'IncidentID', SubjectID, true);
ApplyDatasetFilter(TaskCommentDataset, 'TaskID', SubjectID, true);
}
 
function btnCommentOnClick(Control) {
	var OwnerID = Connector.CurrentUser.ContactID;
	OpenIncidentCommentEdit();
}

Игорь, спасибо Вам за помощь.

Добрый день!

Роман, Вы прописали дважды открытие окна комментариев. Одно для инцидентов (ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);), другое для задач (ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);).
Предлагаю перед открытием окон сделать проверку на то, к какому датасету относится запись и в зависимости от датасета открыть либо окно комментариев для инцидентов, либо окно для задач.

Подстановку пользователя в необходимое окно, в случае, если автор не заполняется, можно сделать при помощи DefaultValues.Add. Узнать текущего пользователя можно при помощи Connector.CurrentUser.ContactID;

А фильтрацию данных датасета (ApplyDatasetFilter) и добавление записи "повесьте" на ОК соответствующей карточки комментариев.

"Гакало Игорь Александрович" написал:

Добрый день!

Роман, Вы прописали дважды открытие окна комментариев. Одно для инцидентов (ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);), другое для задач (ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);).
Предлагаю перед открытием окон сделать проверку на то, к какому датасету относится запись и в зависимости от датасета открыть либо окно комментариев для инцидентов, либо окно для задач.

Подстановку пользователя в необходимое окно, в случае, если автор не заполняется, можно сделать при помощи DefaultValues.Add. Узнать текущего пользователя можно при помощи Connector.CurrentUser.ContactID;

А фильтрацию данных датасета (ApplyDatasetFilter) и добавление записи "повесьте" на ОК соответствующей карточки комментариев.

Спасибо Игорь, за предоставленный ответ.
Я бы с радостью выполнил Ваши рекомендации, но не могу по той простой причине, что я не опытен в JScript’e, да и в других областях программирования. (учусь по мере возможностей)

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

К примеру, я понимаю, о чем Вы здесь написали:
«…Предлагаю перед открытием окон сделать проверку на то, к какому датасету относится запись и в зависимости от датасета открыть либо окно комментариев для инцидентов, либо окно для задач…»
Но как оно должно выглядеть в коде понятия не имею. Знаю как называются нужные для меня окна в сервисах, но....:sad:

Игорь, я прошу у Вас извинения за то, что Вас отвлекаю, но могли бы Вы мне «разжевать» то о чем Вы писали ранее.
Спасибо.

Роман, сейчас попробую сделать проверку, о которой я говорил, и по результату напишу.

"Гакало Игорь Александрович" написал:

Роман, сейчас попробую сделать проверку, о которой я говорил, и по результату напишу.

Спасибо большое, жду.

В окне напоминаний у нас есть колонка "Тип объекта" (по умолчанию крайняя права), в которой мы видим, к какому разделу относится данное напоминание.

По нажатию на кнопку нам необходимо получить запись этого поля.
Для выделенной записи в реестре напоминаний нам подойдет следующий код:

if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача') 
{
sw = 0;
}
 
if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
sw = 1;
}

В зависимости от типа раздела напоминаний, происходила запись нуля или единички в переменную. В условие проверки впишите открытие необходимого окна комментариев, либо инцидентов, либо задач. Таким образом, будет открываться только одно окно и нужное.

"Гакало Игорь Александрович" написал:

В окне напоминаний у нас есть колонка "Тип объекта" (по умолчанию крайняя права), в которой мы видим, к какому разделу относится данное напоминание.

По нажатию на кнопку нам необходимо получить запись этого поля.
Для выделенной записи в реестре напоминаний нам подойдет следующий код:

if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача')
{
sw = 0;
}

if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент')
{
sw = 1;
}

В зависимости от типа раздела напоминаний, происходила запись нуля или единички в переменную. В условие проверки впишите открытие необходимого окна комментариев, либо инцидентов, либо задач. Таким образом, будет открываться только одно окно и нужное.

Игорь, спасибо Вам, но где находится "условие проверки", как оно изображено в коде?
И как правильно сделать подстановку пользователя в этом коде?

Сейчас у меня открываются 2 окна одновременно, без автора.

Проверьте, пожалуйста, что не правильно в этом коде (по идее - все не правильно:smile:):

function OpenIncidentCommentEdit(Dataset) {
 var IncidentID = Dataset.Values('IncidentID'); {
	var IncidentData = GetDatasetFieldValuesByID('ds_Incident', IncidentID,
		'OwnerID', 'ContactID');
	if (IncidentData == null) {
		return;
	}
  } 
}
 
function OpenTaskCommentEdit(Dataset) {
 var TaskID = Dataset.Values('TaskID'); {
	var TaskData = GetDatasetFieldValuesByID('ds_Task', TaskID,
		'OwnerID', 'ContactID');
	if (TaskData == null) {
		return;
	}
  }
} 
 
function OpenIncidentCommentEdit(Window) {
 if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
sw = 1;
}
var Attributes = GetNewDictionary();
Attributes.Add('IsNew', true);
var DefaultValues = GetNewDictionary();	
/*if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
sw = 1;
}*/
ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
var RemindingsDataset = GetSingleItemByCode('ds_IncidentComment');
RemindingsDataset.Open();
            if (!RemindingsDataset.IsEmptyPage) {
                return;
            }
ApplyDatasetFilter(IncidentCommentDataset, 'IncidentID', SubjectID, true);
ApplyDatasetFilter(Dataset, 'AuthorID', AuthorID, true);
 }
 
function OpenTaskCommentEdit(Window) {
var Attributes = GetNewDictionary();
Attributes.Add('IsNew', true);
var DefaultValues = GetNewDictionary();	
/*if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача') 
{
sw = 0;
}  */
ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
var RemindingsDataset = GetSingleItemByCode('ds_TaskComment');
RemindingsDataset.Open();
            if (!RemindingsDataset.IsEmptyPage) {
                return;
            }
ApplyDatasetFilter(TaskCommentDataset, 'TaskID', SubjectID, true);
ApplyDatasetFilter(Dataset, 'AuthorID', AuthorID, true);
}
 
function btnCommentOnClick(Control) {
	if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
sw = 1;
}	
    OpenIncidentCommentEdit();
    if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача') 
{
sw = 0;
}
    OpenTaskCommentEdit();
}

Спасибо.

Роман, использование переменной sw было только для примера :smile: Использовать ее не стоит)

В базовой версии комментариев в задачах нет, поэтому полностью проверить не смог.
Условие вызова окна в зависимости от типа будет выглядеть так:

if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача') 
{
ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
}
 
if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
}

:smile:
Да, действительно сейчас у меня добавляются комментарии в соответствии от выбранного поля, но автор не подтягивается. Пробивал так:

DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
// и так
var AuthorCommentID = Connector.CurrentUser.ContactID;
DefaultValues.Add('SubjectID', OwnerID);

Как видите - без результатов.

Игорь, для того что бы у меня в окно комментариев добавлялся автор, мне нужно в коде указать ID контакта (пользователя) и SubjectID или что то другое?
Спасибо.

Автора в окно добавил, как показано в коде ниже:

	var Attributes = GetNewDictionary();
	Attributes.Add('IsNew', true);
	var DefaultValues = GetNewDictionary(); 
	var OwnerID = Connector.CurrentUser.ContactID;
	var DefaultValues = GetNewDictionary();
	DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
	var IncidentID = dlData.Dataset.Values('SubjectID');
	var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
 
	if (SubjectType == 'Задача') 
	{
		ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
	}
 
	if (SubjectType == 'Инцидент') 
	{
		ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
	}

Обратите внимание на то, что сравнение типа объекта было изменено через переменную (по совету добрых наблюдателей темы :wink:).
И есть еще один момент, который также можно улучшить - проверку не по DisplayValues, а по Values. Тип напоминания может быть переименован, ID останется прежним.
Посмотреть ID Вы можете в перечислении, как показано на скриншоте:

1

Вы можете опционально изменить запись в переменную так:

var SubjectType = dlData.Dataset.Values('{8E742F80-1C1A-4657-8D46-F189F0640544}');

Здравствуйте, Игорь!

Извините за то, что долго не отвечал, не было времени проверить.
Сейчас проверил, следуя Вашим рекомендациям и рекомендациям наблюдателей темы (спасибо:smile:), автор подтягивается, все отлично, но (как всегда:smile:) запись (комментарий) не сохраняется в реестре Инцидентов и Задач.
Как я понимаю, я не прописал фильтрацию данных датасета.
Вы ранее писали что: «фильтрацию данных датасета (ApplyDatasetFilter) и добавление записи "повесьте" на ОК соответствующей карточки комментариев.» Не пойму как мне это сделать.
Пробивал разные подобные коды в сервисах. Привожу пример (закомментированные поля, это те которые я пробивал):

function OpenIncidentCommentEdit(Window) {
var Attributes = GetNewDictionary();
Attributes.Add('IsNew', true);
        var DefaultValues = GetNewDictionary(); 
        var OwnerID = Connector.CurrentUser.ContactID;
        var DefaultValues = GetNewDictionary();
        DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
        var IncidentID = dlData.Dataset.Values('SubjectID');
        var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Инцидент') 
{
ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
}
var RemindingsDataset = GetSingleItemByCode('ds_IncidentComment');
RemindingsDataset.Open();
            if (!RemindingsDataset.IsEmptyPage) {
                return;
            }
ApplyDatasetFilter(IncidentDataset, 'ID', SubjectID, true);          
//ApplyDatasetFilter(IncidentCommentDataset, 'IncidentID', SubjectID, true);
//ApplyDatasetFilter(Dataset, 'AuthorID', OwnerID, true);
 }
 
function OpenTaskCommentEdit(Window) {
var Attributes = GetNewDictionary();
Attributes.Add('IsNew', true);
var DefaultValues = GetNewDictionary();	
var OwnerID = Connector.CurrentUser.ContactID;
var DefaultValues = GetNewDictionary();
DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
var TaskID = dlData.Dataset.Values('SubjectID');
var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
if (dlData.Dataset.DisplayValues('SubjectTypeID') == 'Задача') 
{
ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
}
var RemindingsDataset = GetSingleItemByCode('ds_TaskComment');
RemindingsDataset.Open();
            if (!RemindingsDataset.IsEmptyPage) {
                return;
ApplyDatasetFilter(TaskDataset, 'ID', NewCommentID, true);            }
//ApplyDatasetFilter(TaskCommentDataset, 'TaskID', SubjectID, true);
//ApplyDatasetFilter(Dataset, 'OwnerID', OwnerID, true);   
//ApplyDatasetFilter(Dataset, 'ID', RecordID, true);
}
 
function btnCommentOnClick(Control) {
    OpenIncidentCommentEdit();
    OpenTaskCommentEdit();
}

И еще одно, не понимаю, что Вы имели, введу: "И есть еще один момент, который также можно улучшить - проверку не по DisplayValues, а по Values. Тип напоминания может быть переименован, ID останется прежним.
Посмотреть ID Вы можете в перечислении, как показано на скриншоте:"

Можно поподробнее описать.
Спасибо.

Доброе утро, Роман!

На самом деле, комментарий сохраняется. В этом Вы можете убедиться, сделав выборку на базе данных:

select * from tbl_IncidentComment

Дело в том, что запись в таблице есть, но IncidentID у него NULL, поэтому ни на одной детали записи нет.
Для решения вопроса обойдемся без фильтрации данных. Просто можно запостить комментарий, при этом присвоив IncidentID.

То есть, в скрипте комментариев добавим условие, что если комментарий добавляется из окна напоминаний, то сделать запись IncidentID. Реализуемо с помощью атрибутов. Когда проверю этот вариант, напишу Вам.

P.S: Идея насчет ID довольно детально описана в предыдущем моем посте, если что-то детально не понятно, напишите.

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

	var CommentSource = Connector.Attributes('CommentSource');
	var Incident = Connector.Attributes('Incident');
	var Task = Connector.Attributes('Task');
 
	var Attributes = GetNewDictionary();
	Attributes.Add('IsNew', true);
	var DefaultValues = GetNewDictionary(); 
	var OwnerID = Connector.CurrentUser.ContactID;
	var DefaultValues = GetNewDictionary();
	DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
 
	Connector.Attributes('Incident') = dlData.Dataset.Values('SubjectID');
	var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
 
	if (SubjectType == 'Задача') 
	{
		ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
		Connector.Attributes('CommentSource') = 'Task';  
	}
 
	if (SubjectType == 'Инцидент') 
	{
		ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
		Connector.Attributes('CommentSource') = 'Incident';
	}

Затем я создал событие ds_IncidentCommentOnDatasetBeforePost для ds_IncidentComment:

1

На обработку в него поместил код:

if (Connector.Attributes('CommentSource') == 'Incident'){
Dataset.Append();
Dataset.Values('IncidentID') = Connector.Attributes('Incident');
}

После этого комментарий добавлялся к необходимому инциденту :wink:

Здравствуйте, Игорь!
Спасибо Вам, спасибо Вам наблюдатели темы – кнопка работает, комментарий успешно добавляется.:biggrin:
Вот получившийся код:

function OpenIncidentCommentEdit(Window) {
var CommentSource = Connector.Attributes('CommentSource');
        var Incident = Connector.Attributes('Incident');
 
        var Attributes = GetNewDictionary();
        Attributes.Add('IsNew', true);
        var DefaultValues = GetNewDictionary();
        var OwnerID = Connector.CurrentUser.ContactID;
        var DefaultValues = GetNewDictionary();
        DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
 
        Connector.Attributes('Incident') = dlData.Dataset.Values('SubjectID');
        var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
        if (SubjectType == 'Инцидент')
        {
                ShowEditWindowEx('wnd_IncidentCommentEdit', Attributes, DefaultValues);
                Connector.Attributes('CommentSource') = 'Incident';
        }
}        
function OpenTaskCommentEdit(Window) {
var CommentSource = Connector.Attributes('CommentSource');
        var Task = Connector.Attributes('Task');
        var Attributes = GetNewDictionary();
        Attributes.Add('IsNew', true);
        var DefaultValues = GetNewDictionary();
        var OwnerID = Connector.CurrentUser.ContactID;
        var DefaultValues = GetNewDictionary();
        DefaultValues.Add('OwnerID', Connector.CurrentUser.ContactID);
        Connector.Attributes('Task') = dlData.Dataset.Values('SubjectID');
        var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
 
        if (SubjectType == 'Задача')
        {
                ShowEditWindowEx('wnd_TaskCommentEdit', Attributes, DefaultValues);
                Connector.Attributes('CommentSource') = 'Task';  
        }
}
function btnCommentOnClick(Control) {
    OpenIncidentCommentEdit();
    OpenTaskCommentEdit();
}

P.S.
С Вашего поста: «И есть еще один момент, который также можно улучшить - проверку не по DisplayValues, а по Values. Тип напоминания может быть переименован, ID останется прежним.
Посмотреть ID Вы можете в перечислении, как показано на скриншоте:»
Банальный вопрос:smile::
Зачем переименовивать тип напоминания?
Что в итоге поменяется, если проверку делать по Values?
Если я правильно понимаю, то я могу использовать этот код:

var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID')

Или этот (проверку делать по ID):

var SubjectType = dlData.Dataset.Values('{8E742F80-1C1A-4657-8D46-F189F0640544}');

А в чем разница?:smile:
Если подобные команды где-то описаны (руководство может) подскажите, пожалуйста, о них.
Спасибо.

Роман, только в том, что в первом случае мы обращаемся по имени, а во втором - по ID :)
Правильным тоном является обращение по ID.
Кроме случаев, если может быть несколько перечислений с одинаковыми именами или имя будет переименовываться, придумать причин не могу. Оба варианта исключает использование ID.

"Roman.Mykytenko" написал:Зачем переименовивать тип напоминания?
Что в итоге поменяется, если проверку делать по Values?
Если я правильно понимаю, то я могу использовать этот код:
var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID')

Или этот (проверку делать по ID):
var SubjectType = dlData.Dataset.Values('{8E742F80-1C1A-4657-8D46-F189F0640544}');

А в чем разница?


Не совсем:
Вы можете проверку выполнять так:

var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
if (SubjectType == "Задача") {// do something}

НО, если отображаемое значение будет изменено, то Ваш код просто перестанет работать. Зачем переименовывать Вас не должно сильно волновать, т.к. в этом конкретном случае, может, быть никто и не будет менять заголовок, но в общем случае справочники даются пользователю с возможностью их редактировать и задачу легко могут назвать активностью, а вот Id записи из интерфейса пользователя поменять не удастся, поэтому Ваша проверка станет надежнее, если проверять Вы будете значение, которое с меньшей вероятностью может быть изменено. Лучше всего, конечно, проверять по коду, если в справочнике есть такое поле, но давайте пока что остановимся на этом:

var taskSubjectTypeId = '{8E742F80-1C1A-4657-8D46-F189F0640544}';
var SubjectTypeId = dlData.Dataset.Values('SubjectTypeId');
if (SubjectTypeId == taskSubjectTypeId) {//do something} 

Спасибо Игорь.

В ходе тестирования комментариев с напоминаний, они успешно добавлялись к соответствующему Инциденту или Задаче.
Когда я добавлял комментарий не через напоминания, к примеру, создавал новый Инцидент (или существующий) комментарий к нему не добавлялся, а добавляется к тому Инциденту или Задаче к которому ранее добавил комментарий через напоминания.
Это через, то что мы обращаемся по имени, а не по ID?

"Раловец Ольга" написал:Roman.Mykytenko пишет:

Зачем переименовивать тип напоминания?
Что в итоге поменяется, если проверку делать по Values?
Если я правильно понимаю, то я могу использовать этот код:
var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID')

Или этот (проверку делать по ID):
var SubjectType = dlData.Dataset.Values('{8E742F80-1C1A-4657-8D46-F189F0640544}');

А в чем разница?

Не совсем:
Вы можете проверку выполнять так:

var SubjectType = dlData.Dataset.DisplayValues('SubjectTypeID');
if (SubjectType == "Задача") {// do something}
НО, если отображаемое значение будет изменено, то Ваш код просто перестанет работать. Зачем переименовывать Вас не должно сильно волновать, т.к. в этом конкретном случае, может, быть никто и не будет менять заголовок, но в общем случае справочники даются пользователю с возможностью их редактировать и задачу легко могут назвать активностью, а вот Id записи из интерфейса пользователя поменять не удастся, поэтому Ваша проверка станет надежнее, если проверять Вы будете значение, которое с меньшей вероятностью может быть изменено. Лучше всего, конечно, проверять по коду, если в справочнике есть такое поле, но давайте пока что остановимся на этом:

var taskSubjectTypeId = '{8E742F80-1C1A-4657-8D46-F189F0640544}';
var SubjectTypeId = dlData.Dataset.Values('SubjectTypeId');
if (SubjectTypeId == taskSubjectTypeId) {//do something}

Здравствуйте, Ольга!
Спасибо Вам за разъяснения.
Теперь я понял, зачем надо было делать проверку по ID.
Пробивал сделать по аналогии с тем, как Вы описали, к сожалению, код у меня вышел не рабочий.
Объект «DataField {Id Инцидента или Задачи}» не предназначен.
В принципе заголовки никто не будет менять, кроме меня, по этому, сейчас у меня нет нужды в том, чтобы проверку делать по ID.
Сейчас, я не пойму, почему у меня все новые записи (комментарии) добавляются к тому типу объекта, к которому я ранее добавил комментарий через напоминания. :smile:

Роман, дело в том, что значения атрибутов остались теми, которые использовались при заполнении напоминаний. То есть условие if (Connector.Attributes('CommentSource') == 'Incident') продолжает выполняться. Необходимо в них записать другие значения.

Измените код следующим образом:

if (Connector.Attributes('CommentSource') == 'Incident'){
Dataset.Append();
Dataset.Values('IncidentID') = Connector.Attributes('Incident');
}
    Connector.Attributes('CommentSource') = null;
    Connector.Attributes('Incident') = null;

Игорь, спасибо, все работает :smile:
В случае неработоспособности функционала, я отпишусь.

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